用Quick3.3简单开发微信打飞机 (三)----------------------------- 添加爆炸动画和子弹与敌机的碰撞

用Quick3.3简单开发微信打飞机03 添加爆炸动画和子弹与敌机的碰撞

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

碰撞检测:

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

检测碰撞的函数如下:

[plain] view plaincopyprint?

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

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

GameScene源码:

[plain] view plaincopyprint?

  1. require("src/app/scenes/Utils")
  2. require("src/app/data/EnermyConfig")
  3. local BulletConfig = require("src/app/data/BulletConfig")
  4. local BulletSprite = import(".BulletSprite")
  5. local EnermySprite = import(".EnermySprite")
  6. local scheduler = require(cc.PACKAGE_NAME .. ".scheduler")
  7. local GameScene = class("GameScene",function ()
  8. return display.newScene("GameScene")
  9. end)
  10. function GameScene:ctor()
  11. --加载plist
  12. display.addSpriteFrames("explosion.plist", "explosion.png")
  13. --添加Player精灵
  14. self.player = display.newSprite("hero_1.png"):addTo(self)
  15. self.player:pos(display.cx,display.cy)
  16. self.player:setLocalZOrder(10)
  17. self.touchPos = cc.p(0,0)
  18. self.bullets = {}
  19. self.enermy = {}
  20. --添加一个TouchLayer接收点击事件
  21. self.touchLayer = display.newColorLayer(cc.c4b(255,0,0,255)):addTo(self)
  22. self.touchLayer:setTouchEnabled(true)
  23. self.touchLayer:addNodeEventListener(cc.NODE_TOUCH_EVENT,function(event)
  24. if event.name == "began" then
  25. self.touchPos = cc.p(event.x,event.y)
  26. elseif event.name == "moved" then
  27. local x = event.x - self.touchPos.x ;
  28. local y = event.y - self.touchPos.y ;
  29. self.touchPos = cc.p(event.x,event.y) ;
  30. self:onTouch(x,y) ;
  31. else
  32. self.touchPos = cc.p(0,0)
  33. end
  34. return true
  35. end)
  36. --添加子弹的创建计时器
  37. scheduler.scheduleGlobal(function()
  38. self:createBullet()
  39. self:createEnermy()
  40. self:checkCollision()
  41. end , 1)  -- 1 为时间
  42. --添加碰撞检测的计时器
  43. scheduler.scheduleGlobal(function()
  44. self:checkCollision()
  45. end,1.0 / 60)  -- 1 为时间
  46. end
  47. function GameScene:onTouch(x,y)
  48. --更新飞机的位置,没有对飞机是否会触屏做限制
  49. self.player:pos(self.player:getPositionX() + x,self.player:getPositionY() + y)
  50. end
  51. function GameScene:createBullet()
  52. local config = config_bullets[1]
  53. local bullet = BulletSprite:create(config):addTo(self)
  54. bullet:pos(self.player:getPosition())
  55. self.bullets[bullet] = bullet
  56. end
  57. function GameScene:createEnermy()
  58. --print("create enermy schedule")
  59. local config = config_enermy[1]
  60. local x = math.random(100,400)
  61. local y = display.height + 100
  62. local enermy = EnermySprite:create(config):addTo(self)
  63. enermy:setPosition(cc.p(x,y))
  64. self.enermy[enermy] = enermy
  65. end
  66. function GameScene:checkCollision()
  67. --这个方法处理碰撞检测,子弹和敌人的碰撞检测,敌人和player的碰撞检测
  68. for k_b,v_b in pairs(self.bullets) do
  69. for k_e,v_e in pairs(self.enermy) do
  70. if cc.rectIntersectsRect(v_e:getBoundingBox(),v_b:getBoundingBox()) then
  71. local effectSprite = display.newSprite("#explosion_01.png"):addTo(self)
  72. effectSprite:pos(v_e:getPosition())
  73. --effectSprite:runAction(cc.Sequence(self:createAnimation("explosion_0%d.png",0.5,3),cc.RemoveSelf(),nil))
  74. effectSprite:playAnimationOnce(self:createAnimation("explosion_0%d.png",0.5,3))
  75. local sequence = cc.Sequence:create(cc.DelayTime:create(0.6),
  76. cc.CallFunc:create(function()
  77. effectSprite:removeSelf()
  78. end)
  79. )
  80. effectSprite:runAction(sequence)
  81. v_e.isDead = true
  82. v_b.isDead = true
  83. end
  84. end
  85. end
  86. --清除死亡的子弹和敌人
  87. for k_b,v_b in pairs(self.bullets) do
  88. if v_b.isDead == true then
  89. self.bullets[v_b] = nil
  90. v_b:removeSelf()
  91. end
  92. end
  93. for k_e,v_e in pairs(self.enermy) do
  94. if v_e.isDead == true then
  95. self.enermy[v_e] = nil
  96. v_e:removeSelf()
  97. end
  98. end
  99. end
  100. --帧动画从1开始
  101. function GameScene:createAnimation(frameName,delayTime,frameNum)
  102. local frames = display.newFrames(frameName,1,frameNum)
  103. local animation = display.newAnimation(frames,delayTime / frameNum)
  104. return animation
  105. end
  106. function GameScene:onEnter()
  107. end
  108. function GameScene:onExit()
  109. end
  110. return GameScene

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

时间: 2024-10-12 10:03:36

用Quick3.3简单开发微信打飞机 (三)----------------------------- 添加爆炸动画和子弹与敌机的碰撞的相关文章

用Quick3.3简单开发微信打飞机03 添加爆炸动画和子弹与敌机的碰撞

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

用Quick3.3简单开发微信打飞机01

楼主也是初学quick,想写几个简单的小项目入门,想想最简单的还是"微信打飞机"了(之前学cocos2d-js的时候也是从这个项目开始入手的). 这里只是写一个微信打飞机的Demo,所以,不需要有太多的功能.先简单的分析下: 大概分为四个部分来实现: 1.先新建项目实现一个飞机在屏幕中移动 自定义场景, 精灵的定义 屏幕点击事件 2.在游戏中添加敌人和子弹 数组, 计时器 3.添加碰撞检测 数组中元素的删除, 动画 分数的实现 4.游戏结算 界面的切换, 这里先实现第一部分: 写一个M

用Quick3.3简单开发微信打飞机02

这次将实现子弹的配置文件,敌人的配置文件,子弹的精灵和敌人的精灵.以及子弹的发射和敌人的产生. 子弹的分析: 游戏中不可能只有一种子弹,这样子弹就需要一个配置文件,配置文件中有子弹的类型,子弹的贴图,子弹的生命以及子弹的移动速度. 敌人的分析: 同样,游戏中会出现多种敌人,所以,也需要一个敌人的配置文件,其中包括敌人的类型,贴图,速度,生命等属性. 在这里新建了一个目录(data)来存放配置文件. data中有两个配置文件,一个是子弹的配置文件,一个是敌人的配置文件. BulletConfig.

用Quick3.3开发微信打飞机 (一) ----------------- 场景切换

用Quick3.3简单开发微信打飞机01 楼主也是初学quick,想写几个简单的小项目入门,想想最简单的还是“微信打飞机”了(之前学cocos2d-js的时候也是从这个项目开始入手的). 这里只是写一个微信打飞机的Demo,所以,不需要有太多的功能.先简单的分析下: 大概分为四个部分来实现: 1.先新建项目实现一个飞机在屏幕中移动 自定义场景, 精灵的定义 屏幕点击事件 2.在游戏中添加敌人和子弹 数组, 计时器 3.添加碰撞检测 数组中元素的删除, 动画 分数的实现 4.游戏结算 界面的切换,

用Quick3.3开发微信打飞机 (二) -------------------- 子弹和敌人的配置和创建

用Quick3.3简单开发微信打飞机02 [plain] view plaincopyprint? 这次将实现子弹的配置文件,敌人的配置文件,子弹的精灵和敌人的精灵.以及子弹的发射和敌人的产生. 子弹的分析: 游戏中不可能只有一种子弹,这样子弹就需要一个配置文件,配置文件中有子弹的类型,子弹的贴图,子弹的生命以及子弹的移动速度. 敌人的分析: 同样,游戏中会出现多种敌人,所以,也需要一个敌人的配置文件,其中包括敌人的类型,贴图,速度,生命等属性. 在这里新建了一个目录(data)来存放配置文件.

cocos2dx游戏开发——微信打飞机学习笔记(一)——开发准备

一.环境的搭建 1.Windows开发准备: (1)软件下载及安装 •下载Cocos2d-x 最新版本:http://www.cocos2d-x.org/download 或者从Cocos2d-x GitHub主页中克隆Develop分支:https://github.com/cocos2d/cocos2d-x •配置Python 2.7 环境:http://www.python.org/download/releases/ •建议IDE:Visual Studio 2013 •运行cocos2

cocos2dx游戏开发——微信打飞机学习笔记(三)——WelcomeScene的搭建

一.场景与层的关系: cocos2dx的框架可以说主要由导演,场景,层,精灵来构成: 1.其中导演,意如其名,就是操控整个游戏的一个单例,管理着整个游戏. 2.场景就像电影的一幕剧情,所以说,懂得如何划分好游戏的场景,是开始动手做游戏的第一步. 3.一个场景会有很多层,用来处理场景不同的功能. 4.而精灵则是最小的单位,比如子弹,飞机,敌机都是一个个的精灵所组成的.   二.WelcomeScene的搭建: 1.场景和层的二种搭建方法: (1)一种就是跟HelloWorld示例一样的方法,以一个

cocos2dx游戏开发——微信打飞机学习笔记(二)——游戏框架

一.游戏的基本框架: WelcomeScene    ——>    GameScene   ——>   GameOverScene ||                                       ||                                    || ∨                                      ∨                                   ∨ WelcomeLayer            

cocos2dx游戏开发——微信打飞机学习笔记(十)——碰撞检测的搭建

一.七说八说        大家都发现了= =,做了那么多,发现就是摆设,完全没有打飞机的感觉,没有实现碰撞的监测.比如说呢,子弹和敌机,玩家与敌机就是需要有碰撞检测的说,然后在这篇我想会很长很长的教程中我们一步步的进行完善的说~. 二.子弹与灰机的碰撞检测 (1)加入爆炸的动画~(加到EnemyLayer中) a.通用的敌人爆炸动画的创建函数~ Animate* EnemyLayer::playAnimation(std::string formatstring, int count) { a