用Quick-Cocos2d-x 3.3简单开发微信打飞机 -03 添加爆炸动画和子弹与敌机的碰撞
来源:互联网 发布:qq堂有mac 编辑:程序博客网 时间:2024/05/22 04:22
前言
这个就作为最后一篇吧,当然,可以扩展的方面还有很多,比如分数的记录,结算界面还有一些小道具等,就不添加了。这只是当作一个简单的入门,而在这个入门中确实学到了不少东西。而那些没添加的东西呢,其实,就没那么重要了。没有太难的知识点。所以,就没必要纠结太长时间了。
正文
碰撞检测:
碰撞检测重新写了一个计时器,这个计时器是每帧调用的,也就是每秒调用60次。但是,没有用updata。
检测碰撞的函数如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
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源码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
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
由于,自己知识有限,程序可能还有其他问题。如果,有人发现希望指正,大家一起进步吧!!
感谢本文笔者(最后的牛仔)的分享,Cocos引擎中文官网欢迎更多的开发者分享开发经验。来稿请发送至:support@cocos.org。
0 0
- 用Quick-Cocos2d-x 3.3简单开发微信打飞机 -03 添加爆炸动画和子弹与敌机的碰撞
- 用Quick3.3简单开发微信打飞机03 添加爆炸动画和子弹与敌机的碰撞
- 飞机大战开发04子弹与敌机的碰撞检测
- [cocos2d-x] 打飞机子弹敌机碰撞检测
- cocos2d-x 3.2 |飞机大战:敌机与爆炸
- 用Quick-Cocos2d-x 3.3简单开发微信打飞机 -01
- 用Quick-Cocos2d-x 3.3简单开发微信打飞机 -02
- 【cocos2d-x-3.2】【高仿微信打飞机系列二】【敌机 碰撞检测 爆炸管理】
- 飞机游戏:敌机子弹的实现与死亡之后的爆炸效果
- 《塔防类手游开发教程》 第八节 炮塔子弹与怪物碰撞添加爆炸动画
- cocos2d-x(十二)Lua开发飞机大战-7-添加敌机
- unity学习之飞机大战制作 关键点(六) 子弹与敌机之间的碰撞
- Cocos2d-x 3.2 lua飞机大战开发实例(二)敌机类的封装,以及碰撞检测的实现
- cocos2d-x(十一)Lua开发飞机大战-6-添加子弹
- [cocos2d-x][游戏开发]通过cocos2d-x实现简易飞机大战 07.游戏界面 敌机的产生与移动
- 敌机飞机的添加
- [cocos2d-x]捕鱼达人鱼和子弹的碰撞检测
- 飞机大战之六:敌机爆炸(碰撞检测)
- mac os x配置adb大局命令的方法
- 设置sparkstreaming每个batch处理消息数量
- MAC安装oh my zsh
- cocos2dx 4.3 ToggleVisibility
- HDU 1800 Flying to the Mars
- 用Quick-Cocos2d-x 3.3简单开发微信打飞机 -03 添加爆炸动画和子弹与敌机的碰撞
- 基于socket的ftp实现
- RxJava 操作符 just和from
- strpbrk和strcspn这两个函数的区别
- 创建链接
- Log4J 配置
- IOS控件 动画操作 与 CALayer 简单操作
- 三++14
- 第17题