首页 > 代码库 > 用Quick3.3简单开发微信打飞机02

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


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

子弹的分析:

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

敌人的分析:

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

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

技术分享

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

BulletConfig.lua源码

config_bullets = {}
config_bullets[1] = {
    id = 1,
    skin = "bullet_0.png",
    life = 10,
    speed = 0.5
}
config_bullets[2] = {
    id = 2,
    skin = "bullet_1.png",
    life = 10,
    speed = 0.2
}

EnermyConfig.lua源码

config_enermy = {}

config_enermy[1] = {
    id = 1,
    skin = "enemy_b.png",
    speed = 0.2,
    life = 100
}
config_enermy[2] = {
    id = 2,
    skin = "enemy_m.png",
    speed = 0.2,
    life = 50
}
config_enermy[3] = {
    id = 3,
    skin = "enemy_s.png",
    speed = 0.2,
    life = 10
}

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

EnermySprite.lua源码:

local scheduler = require(cc.PACKAGE_NAME .. ".scheduler")

local BulletSprite = class("BulletSprite",function (path)
	return display.newSprite(path)
end)

function BulletSprite:create(data)
	local bulleSprite = BulletSprite.new(data.skin)
    for k ,v in pairs(data) do
        bulleSprite[k] = v
    end
    bulleSprite:init()
    return bulleSprite
end

function BulletSprite:ctor()
   
end

function BulletSprite:init()
    --子弹移动的计时器
    scheduler.scheduleGlobal(function()
        local speed = (self.speed * display.height) / 60
        self:pos(self:getPositionX(),speed + self:getPositionY())
    end,1.0 / 60)
end



return BulletSprite

EnermySprite.lua源码

local scheduler = require(cc.PACKAGE_NAME .. ".scheduler")

local EnermySprite = class("EnermySprite",function (path)
	return display.newSprite(path)
end)

function EnermySprite:create(data)
	local enermy = EnermySprite.new(data.skin)
    for k ,v in pairs(data) do
        enermy[k] = v
    end
	enermy:init()
	
	return enermy
end

function EnermySprite:init()
    scheduler.scheduleGlobal(function()
        local speed = (self.speed * display.height) / 60
        self:pos(self:getPositionX(),self:getPositionY() - speed)
    end,1.0 / 60)
end

return EnermySprite

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

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

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()
    --添加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()
    end , 1)  -- 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:onEnter()
end

function GameScene:onExit()
end

return GameScene




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