飞镖忍者 quick-cocos2d-x3.2

飞镖忍者 quick-cocos2d-x3.2,第1张

概述经典的入门小游戏,这里用quick-cocos2d-x3.2重新写一遍,以便熟悉下quick 首先,创建工程,如果不会自行百度啊。 1、编译效果如下: 2、将游戏背景设置为白色,同时我们也来看一下MainScene.lua的文件 local MainScene = class("MainScene", function() return display.newScene("MainScen

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

首先,创建工程,如果不会自行百度啊。

1、编译效果如下:



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)):addTo(self)                endfunction MainScene:onEnter()endfunction MainScene:onExit()endreturn 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()	endfunction 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] = monsterend



添加触摸事件,在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] = projectileend

最后实现打击敌人子d和敌人同时消失。

-- 求两点间距离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 = nilend

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

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

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

总结

以上是内存溢出为你收集整理的飞镖忍者 quick-cocos2d-x3.2全部内容,希望文章能够帮你解决飞镖忍者 quick-cocos2d-x3.2所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1005886.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-22
下一篇2022-05-22

发表评论

登录后才能评论

评论列表(0条)

    保存