经典的入门小游戏。这里用quick-cocos2d-x3.2又一次写一遍,以便熟悉下quick

首先,创建project,假设不会自行百度啊。

1、编译效果例如以下:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFNQ1k=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

2、将游戏背景设置为白色,同一时候我们也来看一下MainScene.lua的文件

local MainScene = class("MainScene", function()
return display.newScene("MainScene")
end) -- 相当于C++中的构造函数
function MainScene:ctor()
-- 将背景设置为白色,并且这个作为当前场景的层,以便以后实现触摸事件
self.touchLayer_ = display.newColorLayer(cc.c4b(255,255,255,255)):addTo(self) end function MainScene:onEnter()
end function MainScene:onExit()
end return MainScene

效果:

加入忍者将其放在屏幕左边中间,以及加入每帧刷新的方法。

在ctor方法的后面加入例如以下代码。

   --加入忍者精灵
self.player_ = display.newSprite("Player.png"):addTo(self.touchLayer_)
self.player_:pos(self.player_:getContentSize().width / 2 , display.height / 2) -- 初始化存储飞镖和敌人(怪物)的数组
self.projectiles_ = {}
self.monsters_ = {} -- 加入每帧刷新的方法
self:addNodeEventListener(cc.NODE_ENTER_FRAME_EVENT,handler(self , self.update))
self:scheduleUpdate()

之后在MainScene.lua中加入

--加入敌人
function MainScene:addMonster() end function MainScene:onTouchEnded(x , y) end --每帧刷新
function MainScene:update(dt)
print("update") end

效果

加入每秒调用的方法。

在MainScene.lua的最上面加入例如以下代码

local scheduler = require(cc.PACKAGE_NAME .. ".scheduler")

之后在ctor方法中的最以下加入例如以下代码:

     --  加入一个每秒刷新的方法
scheduler.scheduleGlobal(function()
self:addMonster() --每秒调用的方法
end , 1) -- 1 为时间

以下实现加入怪物

--加入敌人
function MainScene:addMonster()
local monster = display.newSprite("monster.png"):addTo(self.touchLayer_) local minY = monster:getContentSize().height / 2
local maxY = display.height - monster:getContentSize().height / 2 local rangeY = maxY - minY local actualY = math.random(rangeY)
monster:pos(display.width + monster:getContentSize().width / 2 , actualY) local minDuration = 2.0
local maxDuration = 4.0 local rangeDuration = maxDuration - minDuration local actualDuration = (math.random(rangeDuration)) transition.moveTo(monster,{
x = -monster:getContentSize().width / 2,
y = actualY ,
time = actualDuration,
onComplete = function (event)
--运行结束后删除
self.monsters_[event] = nil
event:removeSelf()
end })
-- 放入 存放怪物的数据 以后以便删除
self.monsters_[monster] = monster
end

加入触摸事件,在ctor方法的最以下

  --加入触摸事件
self.touchLayer_:setTouchEnabled(true)
self.touchLayer_:addNodeEventListener(cc.NODE_TOUCH_EVENT,function(event)
if event.name == "ended" then
self:onTouchEnded(event.x,event.y)
end
return true
end)

实现电机屏幕发射飞镖

function MainScene:onTouchEnded(x , y)
print("onTouchEnded") local location = cc.p(x,y)
local projectile = display.newSprite("Projectile.png"):addTo(self)
projectile:pos(20 , display.height / 2)
local px , py = projectile:getPosition() local offset = cc.pSub(location,cc.p(px,py)) if (offset.x <= 0) then return end local realX = display.width + projectile:getContentSize().width / 2
local ratio = offset.y / offset.x local realY = realX * ratio +py local realDest = cc.p(realX,realY) local offRealX = realX - px
local offRealY = realY - py local length = math.sqrt(offRealX * offRealX + offRealY * offRealY) local velocity = 480 / 1 local realMoveDuration = length / velocity transition.moveTo(projectile,{
x = realDest.x ,
y = realDest.y ,
time = realMoveDuration ,
onComplete = function (event)
self.projectiles_[event] = nil
event:removeSelf() end
})
self.projectiles_[projectile] = projectile end

最后实现打击敌人子弹和敌人同一时候消失。

-- 求两点间距离
local function dist(ax, ay, bx, by)
local dx, dy = bx - ax, by - ay
return math.sqrt(dx * dx + dy * dy)
end --每帧刷新
function MainScene:update(dt) -- print("update")
local projectilesToDelete = {} for k_pro, v_pro in pairs(self.projectiles_) do local monstersToDelete = {} for k_mon , v_mon in pairs(self.monsters_) do
local p_x , p_y = v_pro:getPosition()
local m_x,m_y = v_mon:getPosition() if dist(p_x,p_y,m_x,m_y) <= 30 then monstersToDelete[v_mon] = v_mon
projectilesToDelete[v_pro] = v_pro
end end for k_m_d , v_m_d in pairs(monstersToDelete) do
-- local x , y = v_m_d:getPosition()
self.monsters_[v_m_d] = nil
v_m_d:removeSelf() end monstersToDelete = nil
end for k_p_d , v_p_d in pairs(projectilesToDelete) do self.projectiles_[v_p_d] = nil
v_p_d:removeSelf()
end
projectilesToDelete = nil end

这样我们就实现了这个简单的小游戏,感觉有quick实现起来比之前easy非常多。

代码下载:http://download.csdn.net/detail/qqmcy/8087361

原文地址:http://blog.csdn.net/qqmcy/article/details/40508873

飞镖忍者 quick-cocos2d-x3.2的更多相关文章

  1. 【Q2D】如何导出自定义C++类给框架使用

    本文基于Quick cocos2d x这个游戏框架,为了行文流畅,后面都简称Q2D 导出自定义c++类给项目使用已经有了现成的例子了 详见:http://quick.cocos.org/?p=235 ...

  2. quick-cocos2d 设置横屏

    quick cocos2d新建项目,在xcode中 起模拟器,默认的是竖屏,我想做一个横屏的游戏,前面已经说了 选中你的项目,在General这个标签内,Deoployment info的这个分组,有 ...

  3. Cocos2d-x游戏实例《忍者飞镖》之对象管理

    推荐移步至<忍者飞镖射幽灵>之对象管理阅读 配置环境:win7+Cocos2d-x.2.0.3+VS2012 目标读者:需了解游戏帧率以及回调函数的概念 一.引言 对具体游戏demo的分析 ...

  4. Unity 游戏开发技巧集锦之使用忍者飞镖创建粒子效果

    Unity 游戏开发技巧集锦之使用忍者飞镖创建粒子效果 使用忍者飞镖创建粒子效果 游戏中,诸如烟.火.水滴.落叶等粒子效果,都可以使用粒子系统(particle system)来实现.例如,<明 ...

  5. cocos2d-x3.0创建第一个jsb游戏

    第一步: 最新的cocos2d-x.下载地址https://github.com/cocos2d/cocos2d-x github上最新的引擎,值得注意的是官网上发布的引擎是稳定版.选择哪种就看个人喜 ...

  6. 使用Swift和SpriteKit写一个忍者游戏

    这篇文章的游戏使用SpriteKit和Swift语言来完毕. SpriteKit是苹果自己的游戏引擎,更能贴合iOS系统底层的API,只是架构和实现上都是模仿了Cocos2D.所以使用上事实上区别不大 ...

  7. 忍者无敌-实例讲解Cocos2d-x瓦片地图

    实例比较简单,如图所示,地图上有一个忍者精灵,玩家点击他周围的上.下.左.右,他能够向这个方向行走.当他遇到障碍物后是无法穿越的,障碍物是除了草地以为部分,包括了:树.山.河流等. 忍者实例地图(TO ...

  8. 【Quick 3.3】资源脚本加密及热更新(三)热更新模块

    [Quick 3.3]资源脚本加密及热更新(三)热更新模块 注:本文基于Quick-cocos2dx-3.3版本编写 一.介绍 lua相对于c++开发的优点之一是代码可以在运行的时候才加载,基于此我们 ...

  9. 【Quick 3.3】资源脚本加密及热更新(二)资源加密

    [Quick 3.3]资源脚本加密及热更新(二)资源加密 注:本文基于Quick-cocos2dx-3.3版本编写 一.介绍 在前一篇文章中介绍了代码加密,加密方式是XXTEA.对于资源文件来说,同样 ...

随机推荐

  1. BZOJ 刷题记录 PART 5

    拖了好久才写的. [BZOJ2821]接触分块大法.这道题略有点新颖.首先我们先分块.然后统计每块中每一个数出现的个数. 以下是联立各个方块,预处理出第I个方块到第J个方块出现正偶数次数的个数. fo ...

  2. C#实现窗口拖动时各个控件同比自己主动放缩大小

    实现方式主要是利用panel控件为主题.对于每一个控件的大小位置和字体这几个属性进行记录. 然后依据窗口改变的大小同一时候放缩. 简要过程例如以下: 1 创建C#窗口程序项目. 2  Panel放置到 ...

  3. HTTP/2 服务器推送(Server Push)教程(HTTP/2 协议的主要目的是提高网页性能,配置Nginx和Apache)

    HTTP/2 协议的主要目的是提高网页性能. 头信息(header)原来是直接传输文本,现在是压缩后传输.原来是同一个 TCP 连接里面,上一个回应(response)发送完了,服务器才能发送下一个, ...

  4. jQuery源码02--(3043 , 3183) Deferred : 延迟对象 : 对异步的统一管理

    //延迟对象 jQuery.extend({ Deferred: function( func ) { var tuples = [//resolve完成.reject未完成.notify进行中类似于 ...

  5. js---05 自定义属性

    <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...

  6. express中的中间件理解

    什么是中间件 中间件是一个可访问请求对象(req)和响应对象(res)的函数,在 Express 应用的请求-响应循环里,下一个内联的中间件通常用变量 next 表示.中间件的功能包括: 执行任何代码 ...

  7. 微信小程序,前端大梦想(二)

    微信小程序之数据缓存实例-备忘录     数据缓存在移动端的使用是非常重要的,既可以减少用户的流量支出又可以提高程序的访问速度和用户体验.每个微信小程序都可以有自己的本地缓存,可以通过 wx.setS ...

  8. 今日SGU 5.5

    SGU 114 题意:求一个点到其他点的距离总和最小,距离的定义是x轴距离乘以那个点的人数p 收获:带权中位数,按坐标排序,然后扫一遍,最后权值超过或等于总权值的一半时的那个点就是答案,证明暂无 #i ...

  9. SpringMVC &amp; Struts2

    这两个框架可谓Java中的经典,Java开发必懂的框架,这两天在面试中又问道两者的异同.这里简单做了整理供大家參考交流. 概念:

  10. Repractise基础篇:Web应用开发七日谈

    Repractise基础篇:Web应用开发七日谈 本来想的仅仅是画一个例如以下的七日图来说说Web开发的.随后又想了想这似乎是一个非常棒的Web开发相关的知识介绍.应用开发是一个非常有意思的循环,多数 ...