用Quick3.3简单开发微信打飞机03 添加爆炸动画和子弹与敌机的碰撞
2015-01-17 12:17
381 查看
这个就作为最后一篇吧,当然,可以扩展的方面还有很多,比如分数的记录,结算界面还有一些小道具等,就不添加了。这只是当作一个简单的入门,而在这个入门中确实学到了不少东西。而那些没添加的东西呢,其实,就没那么重要了。没有太难的知识点。所以,就没必要纠结太长时间了。
碰撞检测:
碰撞检测重新写了一个计时器,这个计时器是每帧调用的,也就是每秒调用60次。但是,没有用updata。
检测碰撞的函数如下:
GameScene源码:
由于,自己知识有限,程序可能还有其他问题。如果,有人发现希望指正,大家一起进步吧!!
碰撞检测:
碰撞检测重新写了一个计时器,这个计时器是每帧调用的,也就是每秒调用60次。但是,没有用updata。
检测碰撞的函数如下:
function GameScene:checkCollision() --这个方法处理碰撞检测,子弹和敌人的碰撞检测,敌人和player的碰撞检测 for k_b,v_b in pairs(self.bullets) do for k_e,v_e in pairs(self.enermy) do if cc.rectIntersectsRect(v_e:getBoundingBox(),v_b:getBoundingBox()) then--检测碰撞 local effectSprite = display.newSprite("#explosion_01.png"):addTo(self)--爆炸精灵 effectSprite:pos(v_e:getPosition()) --这里用了笨方法,在播放完动画后,removeSelf,这个Animation是不是不能更Action一起呢?没有在API中找到答案,我会继续的。 effectSprite:playAnimationOnce(self:createAnimation("explosion_0%d.png",0.5,3)) local sequence = cc.Sequence:create(cc.DelayTime:create(0.6), cc.CallFunc:create(function() effectSprite:removeSelf() end) ) effectSprite:runAction(sequence) --子弹是一枪毙命,偷懒了 v_e.isDead = true v_b.isDead = true end end end --清除死亡的子弹和敌人 for k_b,v_b in pairs(self.bullets) do if v_b.isDead == true then self.bullets[v_b] = nil v_b:removeSelf() end end for k_e,v_e in pairs(self.enermy) do if v_e.isDead == true then self.enermy[v_e] = nil v_e:removeSelf() end end end --帧动画从1开始,返回一个真动画 function GameScene:createAnimation(frameName,delayTime,frameNum) local frames = display.newFrames(frameName,1,frameNum) local animation = display.newAnimation(frames,delayTime / frameNum) return animation end到这里,我要写的东西就完了,这个程序没有那么精致,但是,其中还是有不少知识点的,相信对于像我一样刚开始接触quick的人来说还是有帮助的,当然,至于程序的细化,实现更复杂的功能,就《微信打飞机来说》,剩下的工作可能就是更改了,应该没多少难点了。
GameScene源码:
require("src/app/scenes/Utils") require("src/app/data/EnermyConfig") local BulletConfig = require("src/app/data/BulletConfig") local BulletSprite = import(".BulletSprite") local EnermySprite = import(".EnermySprite") local scheduler = require(cc.PACKAGE_NAME .. ".scheduler") local GameScene = class("GameScene",function () return display.newScene("GameScene") end) function GameScene:ctor() --加载plist display.addSpriteFrames("explosion.plist", "explosion.png") --添加Player精灵 self.player = display.newSprite("hero_1.png"):addTo(self) self.player:pos(display.cx,display.cy) self.player:setLocalZOrder(10) self.touchPos = cc.p(0,0) self.bullets = {} self.enermy = {} --添加一个TouchLayer接收点击事件 self.touchLayer = display.newColorLayer(cc.c4b(255,0,0,255)):addTo(self) self.touchLayer:setTouchEnabled(true) self.touchLayer:addNodeEventListener(cc.NODE_TOUCH_EVENT,function(event) if event.name == "began" then self.touchPos = cc.p(event.x,event.y) elseif event.name == "moved" then local x = event.x - self.touchPos.x ; local y = event.y - self.touchPos.y ; self.touchPos = cc.p(event.x,event.y) ; self:onTouch(x,y) ; else self.touchPos = cc.p(0,0) end return true end) --添加子弹的创建计时器 scheduler.scheduleGlobal(function() self:createBullet() self:createEnermy() self:checkCollision() end , 1) -- 1 为时间 --添加碰撞检测的计时器 scheduler.scheduleGlobal(function() self:checkCollision() end,1.0 / 60) -- 1 为时间 end function GameScene:onTouch(x,y) --更新飞机的位置,没有对飞机是否会触屏做限制 self.player:pos(self.player:getPositionX() + x,self.player:getPositionY() + y) end function GameScene:createBullet() local config = config_bullets[1] local bullet = BulletSprite:create(config):addTo(self) bullet:pos(self.player:getPosition()) self.bullets[bullet] = bullet end function GameScene:createEnermy() --print("create enermy schedule") local config = config_enermy[1] local x = math.random(100,400) local y = display.height + 100 local enermy = EnermySprite:create(config):addTo(self) enermy:setPosition(cc.p(x,y)) self.enermy[enermy] = enermy end function GameScene:checkCollision() --这个方法处理碰撞检测,子弹和敌人的碰撞检测,敌人和player的碰撞检测 for k_b,v_b in pairs(self.bullets) do for k_e,v_e in pairs(self.enermy) do if cc.rectIntersectsRect(v_e:getBoundingBox(),v_b:getBoundingBox()) then local effectSprite = display.newSprite("#explosion_01.png"):addTo(self) effectSprite:pos(v_e:getPosition()) --effectSprite:runAction(cc.Sequence(self:createAnimation("explosion_0%d.png",0.5,3),cc.RemoveSelf(),nil)) effectSprite:playAnimationOnce(self:createAnimation("explosion_0%d.png",0.5,3)) local sequence = cc.Sequence:create(cc.DelayTime:create(0.6), cc.CallFunc:create(function() effectSprite:removeSelf() end) ) effectSprite:runAction(sequence) v_e.isDead = true v_b.isDead = true end end end --清除死亡的子弹和敌人 for k_b,v_b in pairs(self.bullets) do if v_b.isDead == true then self.bullets[v_b] = nil v_b:removeSelf() end end for k_e,v_e in pairs(self.enermy) do if v_e.isDead == true then self.enermy[v_e] = nil v_e:removeSelf() end end end --帧动画从1开始 function GameScene:createAnimation(frameName,delayTime,frameNum) local frames = display.newFrames(frameName,1,frameNum) local animation = display.newAnimation(frames,delayTime / frameNum) return animation end function GameScene:onEnter() end function GameScene:onExit() end return GameScene
由于,自己知识有限,程序可能还有其他问题。如果,有人发现希望指正,大家一起进步吧!!
相关文章推荐
- 用Quick-Cocos2d-x 3.3简单开发微信打飞机 -03 添加爆炸动画和子弹与敌机的碰撞
- 用Quick3.3简单开发微信打飞机 (三)----------------------------- 添加爆炸动画和子弹与敌机的碰撞
- 用Quick-Cocos2d-x 3.3简单开发微信打飞机 -01
- 用Quick3.3简单开发微信打飞机01
- 用Quick3.3简单开发微信打飞机02
- 用Quick-Cocos2d-x 3.3简单开发微信打飞机 -02
- 用Quick3.3开发微信打飞机 (二) -------------------- 子弹和敌人的配置和创建
- 《塔防类手游开发教程》 第八节 炮塔子弹与怪物碰撞添加爆炸动画
- 用Quick3.3开发微信打飞机 (一) ----------------- 场景切换
- cocos2dx游戏开发——微信打飞机学习笔记(十)——碰撞检测的搭建
- unity3d开发 打飞机小游戏(五)(飞机移动/敌机死亡动画)
- unity3d添加子弹爆炸预制体动画
- ios开发之--简单动画效果的添加
- 【cocos2d-x-3.2】【高仿微信打飞机系列二】【敌机 碰撞检测 爆炸管理】
- 如何用cocos2d-x来开发简单的Uphone游戏:(三) 射击子弹 & 碰撞检测
- 使用3.0实现微信打飞机——4.添加敌机
- 飞机大战开发04子弹与敌机的碰撞检测
- 如何用cocos2d-x来开发简单的Uphone游戏:(三) 射击子弹 & 碰撞检测
- 微信公众平台开发视频教程-03-获取Access Token和获取微信服务器IP,添加微信菜单
- iOS开发-给TableView或者CollectionView的cell添加简单动画,很方便,直接粘代码即可