Qiuck_Cocos实战(一)

本文介绍了Quick_Cocos飞机大战项目的实战内容,涵盖了Bullet类的设计,包括其直线运动、碰撞消失和超限消失的特性。同时讲解了HeroPlane类,详述了HeroPlane如何响应用户点击移动、发射子弹以及被攻击后的动画效果。文章强调了通过scheduler在主场景中统一管理update函数以提高效率的重要性。
摘要由CSDN通过智能技术生成

我们之前说了要做飞机大战的项目,就从这篇开始吧。

Bullet类

子弹类是这样一种类,它由飞机发出,直线运动,撞到物体后消失,超出地图后也会消失。


-- Bullet

-- 构造函数里面有很多参数,根据这些参数,我们可以实现不同样式的子弹
local Bullet=class("Bullet", function(filename,poX,poY,style,parentNode)

    local bullet= display.newSprite(filename)

    return bullet
end)


function Bullet:ctor(filename,poX,poY,style,parentNode)

    self.moveType=style -- 运动的方向,有的子弹是斜着飞的
    self:setAnchorPoint(0.5,0)
    self:setPosition(cc.p(poX,poY))

    parentNode:addChild(self,2)

    self.speed=5

end

function Bullet:move()

    local positionX=self:getPositionX()
    local positionY=self:getPositionY()

    -- update

    if self.moveType==1 then
        self:setPosition(cc.p(positionX,positionY+self.speed))
        elseif self.moveType==2 then
            self:setPosition(cc.p(positionX-self.speed/2,positionY+self.speed*0.8660))
            elseif self.moveType==3 then
                self:setPosition(cc.p(positionX+self.speed/2,positionY+self.speed*0.8660))
                end
end

return Bullet

如果你理解了上篇文章所讲,应该知道这里的move方法是一个放在scheduler里执行的方法。

HeroPlane类

hero是这样的一个类,它能随着你的点击移动,然后一直发射子弹,会被敌机攻击,然后生命值不够了就爆炸

-- HeroPlane

local HeroPlane=class("HeroPlane", function()
    return display.newSprite("#hero1.png")
    end)

function HeroPlane:ctor()
    self:setAnchorPoint(0.5,0)
    self:setPosition(display.cx,0)
    self.speed=3
    self.HP=20
end

-- 按照恒定速度移动到一个点
function HeroPlane:move(pox,poy)

    self:stopAllActions()

    local dis=cc.pGetDistance(cc.p(pox,poy),cc.p(self:getPositionX(),self:getPositionY()))

    local timeDelay=dis/self.speed/global_fps

    local moveAction=cc.MoveTo:create(timeDelay,cc.p(pox , poy))
totalAction=cc.Spawn:create(angleRevert,moveAction)
    self:runAction(moveAction)
end


function HeroPlane:getNewBox()
    local originBox=self:getBoundingBox()

    originBox.x=originBox.x+10
    originBox.y=originBox.y +10
    originBox.width=originBox.width-20
    originBox.height=originBox.height-20

    return originBox
end

function HeroPlane:blowup()
    local frames=display.newFrames("hero_blowup_n%d.png",1,4)
    local animation=display.newAnimation(frames,0.2)
    local animate=cc.Animate:create(animation)
    -- local action=cc.RepeatForever:create(animate) -- 你可以用这句让他循环播放
    self:runAction(animate)

    -- audio.playMusic("sound/hero_down.mp3")
end

return HeroPlane

hero的blowup方法是根据plist文件生成逐帧动画的固定方法,cocos中的动画都是根据设定的时间加入主循环的时间片中,然后顺序执行。

我们这里都没有执行需要更新(update)的函数(比如子弹的move和hero的move),我们将会把它放在主场景的scheduler中执行,一个场景只需要一个update,这才是最高效的方式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值