zoukankan      html  css  js  c++  java
  • 用Quick3.3开发微信打飞机 (二) -------------------- 子弹和敌人的配置和创建

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

    1. 这次将实现子弹的配置文件,敌人的配置文件,子弹的精灵和敌人的精灵。以及子弹的发射和敌人的产生。  

     

    子弹的分析:

    游戏中不可能只有一种子弹,这样子弹就需要一个配置文件,配置文件中有子弹的类型,子弹的贴图,子弹的生命以及子弹的移动速度。

    敌人的分析:

    同样,游戏中会出现多种敌人,所以,也需要一个敌人的配置文件,其中包括敌人的类型,贴图,速度,生命等属性。

    在这里新建了一个目录(data)来存放配置文件。

    data中有两个配置文件,一个是子弹的配置文件,一个是敌人的配置文件。

    BulletConfig.lua源码

    1. config_bullets = {}  
    2. config_bullets[1] = {  
    3.     id = 1,  
    4.     skin = "bullet_0.png",  
    5.     life = 10,  
    6.     speed = 0.5  
    7. }  
    8. config_bullets[2] = {  
    9.     id = 2,  
    10.     skin = "bullet_1.png",  
    11.     life = 10,  
    12.     speed = 0.2  
    13. }  


    EnermyConfig.lua源码

    1. config_enermy = {}  
    2.   
    3. config_enermy[1] = {  
    4.     id = 1,  
    5.     skin = "enemy_b.png",  
    6.     speed = 0.2,  
    7.     life = 100  
    8. }  
    9. config_enermy[2] = {  
    10.     id = 2,  
    11.     skin = "enemy_m.png",  
    12.     speed = 0.2,  
    13.     life = 50  
    14. }  
    15. config_enermy[3] = {  
    16.     id = 3,  
    17.     skin = "enemy_s.png",  
    18.     speed = 0.2,  
    19.     life = 10  
    20. }  


    每一个配置文件对应一个精灵,即,子弹的配置文件对应的是子弹的精灵,敌人的配置文件对应的是敌人的精灵。

    EnermySprite.lua源码:

    1. local scheduler = require(cc.PACKAGE_NAME .. ".scheduler")  
    2.   
    3. local BulletSprite = class("BulletSprite",function (path)  
    4.     return display.newSprite(path)  
    5. end)  
    6.   
    7. function BulletSprite:create(data)  
    8.     local bulleSprite = BulletSprite.new(data.skin)  
    9.     for k ,v in pairs(data) do  
    10.         bulleSprite[k] = v  
    11.     end  
    12.     bulleSprite:init()  
    13.     return bulleSprite  
    14. end  
    15.   
    16. function BulletSprite:ctor()  
    17.      
    18. end  
    19.   
    20. function BulletSprite:init()  
    21.     --子弹移动的计时器  
    22.     scheduler.scheduleGlobal(function()  
    23.         local speed = (self.speed * display.height) / 60  
    24.         self:pos(self:getPositionX(),speed + self:getPositionY())  
    25.     end,1.0 / 60)  
    26. end  
    27.   
    28.   
    29.   
    30. return BulletSprite  


    EnermySprite.lua源码

    1. local scheduler = require(cc.PACKAGE_NAME .. ".scheduler")  
    2.   
    3. local EnermySprite = class("EnermySprite",function (path)  
    4.     return display.newSprite(path)  
    5. end)  
    6.   
    7. function EnermySprite:create(data)  
    8.     local enermy = EnermySprite.new(data.skin)  
    9.     for k ,v in pairs(data) do  
    10.         enermy[k] = v  
    11.     end  
    12.     enermy:init()  
    13.       
    14.     return enermy  
    15. end  
    16.   
    17. function EnermySprite:init()  
    18.     scheduler.scheduleGlobal(function()  
    19.         local speed = (self.speed * display.height) / 60  
    20.         self:pos(self:getPositionX(),self:getPositionY() - speed)  
    21.     end,1.0 / 60)  
    22. end  
    23.   
    24. return EnermySprite  


    这里实现了子弹和敌人,接着将他们添加到游戏主界面中就OK了。

    在这里,我将它们都放在了一个计时器中,当然,实际上他们是不应该在一个计时器中的。因为,游戏中产生敌人和子弹的节奏应该是不一致的。

    GameScene的源码如下:

      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.   
      8. local GameScene = class("GameScene",function ()  
      9.     return display.newScene("GameScene")  
      10. end)  
      11.   
      12. function GameScene:ctor()  
      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.   
      21.     --添加一个TouchLayer接收点击事件  
      22.     self.touchLayer = display.newColorLayer(cc.c4b(255,0,0,255)):addTo(self)  
      23.     self.touchLayer:setTouchEnabled(true)  
      24.     self.touchLayer:addNodeEventListener(cc.NODE_TOUCH_EVENT,function(event)  
      25.           
      26.         if event.name == "began" then  
      27.             self.touchPos = cc.p(event.x,event.y)  
      28.         elseif event.name == "moved" then  
      29.             local x = event.x - self.touchPos.x ;  
      30.             local y = event.y - self.touchPos.y ;  
      31.             self.touchPos = cc.p(event.x,event.y) ;  
      32.             self:onTouch(x,y) ;  
      33.         else  
      34.             self.touchPos = cc.p(0,0)   
      35.         end  
      36.         return true  
      37.     end)  
      38.     --添加子弹的创建计时器  
      39.     scheduler.scheduleGlobal(function()  
      40.       self:createBullet()--这里将产生子弹和敌人放在了同一个计时器中,实际上不应该是这样的  
      41.       self:createEnermy()  
      42.     end , 1)  -- 1 为时间  
      43. end  
      44.   
      45. function GameScene:onTouch(x,y)  
      46.      --更新飞机的位置,没有对飞机是否会触屏做限制  
      47.     self.player:pos(self.player:getPositionX() + x,self.player:getPositionY() + y)  
      48. end  
      49.   
      50. function GameScene:createBullet()  
      51.     local config = config_bullets[1]  
      52.     local bullet = BulletSprite:create(config):addTo(self)  
      53.     bullet:pos(self.player:getPosition())  
      54.     self.bullets[bullet] = bullet  
      55. end  
      56.   
      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.   
      67. function GameScene:onEnter()  
      68. end  
      69.   
      70. function GameScene:onExit()  
      71. end  
      72.   
      73. return GameScene  
  • 相关阅读:
    ACM 一种排序
    ACM Binary String Matching
    ACM 括号配对问题
    ACM BUYING FEED
    ACM 喷水装置(二)
    ACM 会场安排问题
    ACM 推桌子
    ACM 心急的C小加
    ACM 田忌赛马
    ACM 疯牛
  • 原文地址:https://www.cnblogs.com/dudu580231/p/4807007.html
Copyright © 2011-2022 走看看