加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

飞镖忍者 quick-cocos2d-x3.2

发布时间:2020-12-14 19:14:12 所属栏目:百科 来源:网络整理
导读:经典的入门小游戏,这里用quick-cocos2d-x3.2重新写一遍,以便熟悉下quick 首先,创建工程,如果不会自行百度

经典的入门小游戏,这里用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)
        
        
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实现起来比之前容易很多。

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读