用Quick-Cocos2d-x 3.3简单开发微信打飞机 -03 添加爆炸动画和子d与敌机的碰撞

用Quick-Cocos2d-x 3.3简单开发微信打飞机 -03 添加爆炸动画和子d与敌机的碰撞,第1张

概述前言 这个就作为最后一篇吧,当然,可以扩展的方面还有很多,比如分数的记录,结算界面还有一些小道具等,就不添加了。这只是当作一个简单的入门,而在这个入门中确实学到了不少东西。而那些没添加的东西呢,其实,就没那么重要了。没有太难的知识点。所以,就没必要纠结太长时间了。 正文 碰撞检测: 碰撞检测重新写了一个计时器,这个计时器是每帧调用的,也就是每秒调用60次。但是,没有用updata。 检测碰撞的函数

前言

这个就作为最后一篇吧,当然,可以扩展的方面还有很多,比如分数的记录,结算界面还有一些小道具等,就不添加了。这只是当作一个简单的入门,而在这个入门中确实学到了不少东西。而那些没添加的东西呢,其实,就没那么重要了。没有太难的知识点。所以,就没必要纠结太长时间了。


正文

碰撞检测:

碰撞检测重新写了一个计时器,这个计时器是每帧调用的,也就是每秒调用60次。但是,没有用updata。

检测碰撞的函数如下:

1 @H_502_32@ 2 @H_502_32@ 3 @H_502_32@ 4 @H_502_32@ 5 @H_502_32@ 6 @H_502_32@ 7 @H_502_32@ 8 @H_502_32@ 9 @H_502_32@ 10 @H_502_32@ 11 @H_502_32@ 12 @H_502_32@ 13 @H_502_32@ 14 @H_502_32@ 15 @H_502_32@ 16 @H_502_32@ 17 @H_502_32@ 18 @H_502_32@ 19 @H_502_32@ 20 @H_502_32@ 21 @H_502_32@ 22 @H_502_32@ 23 @H_502_32@ 24 @H_502_32@ 25 @H_502_32@ 26 @H_502_32@ 27 @H_502_32@ 28 @H_502_32@ 29 @H_502_32@ 30 @H_502_32@ 31 @H_502_32@ 32 @H_502_32@ 33 @H_502_32@ 34 @H_502_32@ 35 @H_502_32@ 36 @H_502_32@ 37 @H_502_32@ 38 @H_502_32@ 39 @H_502_32@ 40 @H_502_32@ 41 @H_502_32@ 42 @H_502_32@ 43 @H_502_32@ functionGameScene:checkCollision() @H_502_32@ --这个方法处理碰撞检测,子d和敌人的碰撞检测,敌人和player的碰撞检测 @H_502_32@ for k_b,v_binpairs(self.bullets) do @H_502_32@ k_e,v_einpairs(self.enermy) do @H_502_32@ if cc.rectIntersectsRect(v_e:getBoundingBox(),v_b:getBoundingBox())then--检测碰撞 @H_502_32@ localeffectSprite=display.newSprite( "#explosion_01.png" ):addTo(self)--爆炸精灵 @H_502_32@ effectSprite:pos(v_e:getposition()) @H_502_32@ --这里用了笨方法,在播放完动画后,removeSelf,这个Animation是不是不能更Action一起呢?没有在API中找到答案,我会继续的。 @H_502_32@ effectSprite:playAnimationOnce(self:createAnimation( "explosion_0%d.png" ,0.5,3)) @H_502_32@ localsequence=cc.Sequence:create(cc.DelayTime:create(0.6), @H_502_32@ cc.CallFunc:create(function() @H_502_32@ effectSprite:removeSelf() @H_502_32@ end) @H_502_32@ ) @H_502_32@ @H_502_32@ effectSprite:runAction(sequence) @H_502_32@ --子d是一q毙命,偷懒了 @H_502_32@ v_e.isDead= true @H_502_32@ v_b.isDead= true @H_502_32@ end @H_502_32@ end @H_502_32@ end @H_502_32@ @H_502_32@ --清除死亡的子d和敌人 @H_502_32@ do @H_502_32@ v_b.isDead== true then @H_502_32@ self.bullets[v_b]=nil @H_502_32@ v_b:removeSelf() @H_502_32@ end @H_502_32@ end @H_502_32@ do @H_502_32@ v_e.isDead== then @H_502_32@ self.enermy[v_e]=nil @H_502_32@ v_e:removeSelf() @H_502_32@ end @H_502_32@ end @H_502_32@ end @H_502_32@ --帧动画从1开始,返回一个真动画 @H_502_32@ functionGameScene:createAnimation(framename,delayTime,frameNum) @H_502_32@ localframes=display.newFrames(framename,1,frameNum) @H_502_32@ localanimation=display.newAnimation(frames,delayTime/frameNum) @H_502_32@ return animation @H_502_32@ end @H_502_32@ @H_502_32@
@H_502_32@ @H_502_32@

到这里,我要写的东西就完了,这个程序没有那么精致,但是,其中还是有不少知识点的,相信对于像我一样刚开始接触quick的人来说还是有帮助的,当然,至于程序的细化,实现更复杂的功能,就《微信打飞机来说》,剩下的工作可能就是更改了,应该没多少难点了。

GameScene源码:

43 @H_502_32@ 44 @H_502_32@ 45 @H_502_32@ 46 @H_502_32@ 47 @H_502_32@ 48 @H_502_32@ 49 @H_502_32@ 50 @H_502_32@ 51 @H_502_32@ 52 @H_502_32@ 53 @H_502_32@ 54 @H_502_32@ 55 @H_502_32@ 56 @H_502_32@ 57 @H_502_32@ 58 @H_502_32@ 59 @H_502_32@ 60 @H_502_32@ 61 @H_502_32@ 62 @H_502_32@ 63 @H_502_32@ 64 @H_502_32@ 65 @H_502_32@ 66 @H_502_32@ 67 @H_502_32@ 68 @H_502_32@ 69 @H_502_32@ 70 @H_502_32@ 71 @H_502_32@ 72 @H_502_32@ 73 @H_502_32@ 74 @H_502_32@ @H_427_403@ 75 @H_502_32@ 76 @H_502_32@ 77 @H_502_32@ 78 @H_502_32@ 79 @H_502_32@ 80 @H_502_32@ 81 @H_502_32@ 82 @H_502_32@ @H_696_419@ 83 @H_502_32@ 84 @H_502_32@ 85 @H_502_32@ 86 @H_502_32@ 87 @H_502_32@ 88 @H_502_32@ 89 @H_502_32@ 90 @H_502_32@ 91 @H_502_32@ 92 @H_502_32@ 93 @H_502_32@ 94 @H_502_32@ 95 @H_502_32@ 96 @H_502_32@ 97 @H_502_32@ 98 @H_502_32@ 99 @H_502_32@ 100 @H_502_32@ 101 @H_502_32@ 102 @H_502_32@ 103 @H_502_32@ 104 @H_502_32@ 105 @H_502_32@ 106 @H_502_32@ 107 @H_502_32@ 108 @H_502_32@ 109 @H_502_32@ 110 @H_502_32@ 111 @H_502_32@ 112 @H_502_32@ 113 @H_502_32@ 114 @H_502_32@ 115 @H_502_32@ 116 @H_502_32@ 117 @H_502_32@ 118 @H_502_32@ 119 @H_502_32@ 120 @H_502_32@ 121 @H_502_32@ 122 @H_502_32@ 123 @H_502_32@ @H_24_502@require("src/app/scenes/Utils") @H_502_32@ "src/app/data/EnermyConfig") @H_502_32@ localBulletConfig=require("src/app/data/BulletConfig") @H_502_32@ localBulletSprite=import(".BulletSprite") @H_502_32@ localEnermySprite=import(".EnermySprite") @H_502_32@ localscheduler=require(cc.PACKAGE_name..".scheduler") @H_502_32@ @H_502_32@ localGameScene=class("GameScene"display.newScene() @H_502_32@ end) @H_502_32@ @H_502_32@ functionGameScene:ctor() @H_502_32@ --加载pList @H_502_32@ display.addSpriteFrames("explosion.pList""explosion.png"--添加Player精灵 @H_502_32@ self.player=display.newSprite("hero_1.png"):addTo(self) @H_502_32@ self.player:pos(display.cx,display.cy) @H_502_32@ self.player:setLocalZOrder(10) @H_502_32@ self.touchPos=cc.p(0,0) @H_502_32@ self.bullets={} @H_502_32@ self.enermy={} @H_502_32@ @H_502_32@ --添加一个touchLayer接收点击事件 @H_502_32@ self.touchLayer=display.newcolorLayer(cc.c4b(255,255)):addTo(self) @H_502_32@ self.touchLayer:settouchEnabled() @H_502_32@ self.touchLayer:addNodeEventListener(cc.NODE_touch_EVENT,function(event) @H_502_32@ @H_502_32@ event.name=="began"then @H_502_32@ self.touchPos=cc.p(event.x,event.y) @H_502_32@ elseifevent.name=="moved"then @H_502_32@ localx=event.x-self.touchPos.x; @H_502_32@ localy=event.y-self.touchPos.y; @H_502_32@ self:ontouch(x,y); @H_502_32@ else @H_502_32@ end @H_502_32@ returntrue @H_502_32@ end) @H_502_32@ --添加子d的创建计时器 @H_502_32@ scheduler.scheduleGlobal(function() @H_502_32@ self:createBullet() @H_502_32@ self:createEnermy() @H_502_32@ self:checkCollision() @H_502_32@ end,1)--1为时间 @H_502_32@ --添加碰撞检测的计时器 @H_502_32@ scheduler.scheduleGlobal(function() @H_502_32@ self:checkCollision() @H_502_32@ end @H_502_32@ @H_502_32@ functionGameScene:ontouch(x,y) @H_502_32@ --更新飞机的位置,没有对飞机是否会触屏做限制 @H_502_32@ self.player:pos(self.player:getpositionX()+x,self.player:getpositionY()+y) @H_502_32@ end @H_502_32@ @H_502_32@ functionGameScene:createBullet() @H_502_32@ localconfig=config_bullets[1] @H_502_32@ localbullet=BulletSprite:create(config):addTo(self) @H_502_32@ bullet:pos(self.player:getposition()) @H_502_32@ self.bullets[bullet]=bullet @H_502_32@ end @H_502_32@ @H_502_32@ functionGameScene:createEnermy() @H_502_32@ --print("createenermyschedule") @H_502_32@ localconfig=config_enermy[1] @H_502_32@ localx=math.random(100,400) @H_502_32@ localy=display.height+100 @H_502_32@ localenermy=EnermySprite:create(config):addTo(self) @H_502_32@ enermy:setposition(cc.p(x,y)) @H_502_32@ self.enermy[enermy]=enermy @H_502_32@ end @H_502_32@ functionGameScene:checkCollision() @H_502_32@ --这个方法处理碰撞检测,子d和敌人的碰撞检测,敌人和player的碰撞检测 @H_502_32@ do @H_502_32@ do @H_502_32@ ):addTo(self) @H_502_32@ effectSprite:pos(v_e:getposition()) @H_502_32@ --effectSprite:runAction(cc.Sequence(self:createAnimation(cc.CallFunc:create(function() @H_502_32@ effectSprite:removeSelf() @H_502_32@ end) @H_502_32@ ) @H_502_32@ @H_502_32@ effectSprite:runAction(sequence) @H_502_32@ @H_502_32@ true @H_502_32@ true @H_502_32@ end @H_502_32@ end @H_502_32@ end @H_502_32@ @H_502_32@ --清除死亡的子d和敌人 @H_502_32@ do @H_502_32@ then @H_502_32@ self.bullets[v_b]=nil @H_502_32@ v_b:removeSelf() @H_502_32@ end @H_502_32@ end @H_502_32@ do @H_502_32@ then @H_502_32@ self.enermy[v_e]=nil @H_502_32@ v_e:removeSelf() @H_502_32@ end @H_502_32@ end @H_502_32@ end @H_502_32@ --帧动画从1开始 @H_502_32@ animation @H_502_32@ end @H_502_32@ @H_502_32@ functionGameScene:onEnter() @H_502_32@ end @H_502_32@ @H_502_32@ functionGameScene:onExit() @H_502_32@ end @H_502_32@ @H_502_32@ GameScene @H_502_32@ @H_502_32@
@H_502_32@ @H_502_32@

由于,自己知识有限,程序可能还有其他问题。如果,有人发现希望指正,大家一起进步吧!!


感谢本文笔者(最后的牛仔)的分享,Cocos引擎中文官网欢迎更多的开发者分享开发经验。来稿请发送至:[email protected]

总结

以上是内存溢出为你收集整理的用Quick-Cocos2d-x 3.3简单开发微信打飞机 -03 添加爆炸动画和子d与敌机的碰撞全部内容,希望文章能够帮你解决用Quick-Cocos2d-x 3.3简单开发微信打飞机 -03 添加爆炸动画和子d与敌机的碰撞所遇到的程序开发问题。

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

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

原文地址: http://outofmemory.cn/web/1055538.html

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

发表评论

登录后才能评论

评论列表(0条)

保存