【cocos2d-x lua】飞机大战小游戏4:敌机
敌机即将出场。
一、敌机类
区别于主角飞机只有一架,敌机是有非常多架的,因此需要编写一个敌机类。
在views文件夹下新建items文件夹,并新建EnemyItem类。
local EnemyItem = class("EnemyItem",function (frame)
local enemy = cc.Sprite:createWithSpriteFrameName(frame)
return enemy
end)
return EnemyItem
基础的enemy类编写完成。
二、敌机层
1.新建敌机层
在layers文件夹下新建EnemyLayer,enemyArray用于存储敌机。
local EnemyLayer = class("EnemyLayer",function ()
local enemyLayer = display.newLayer()
local enemyArray = {}
enemyLayer.enemyArray = enemyArray
enemyLayer.layer = enemyLayer
return enemyLayer
end)
return EnemyLayer
2.新建敌机
以敌机A作为示例:
function EnemyLayer:addEnemyA()
local enemy = EnemyItem.new("enemy1.png") --创建enemy对象实例
-- 随机初始化敌机位置
local enemySize = enemy:getContentSize()
local minX = enemySize.width/2
local maxX = CCDirector:getInstance():getVisibleSize().width - enemySize.width/2
local enemyX = math.random(minX,maxX)
enemy:setPosition(cc.p(enemyX,CCDirector:getInstance():getVisibleSize().height+enemySize.height/2))
table.insert(self.enemyArray,enemy)
-- 随机敌机飞行速度
local minDuration = 15
local maxDuration = 20
local enemyDuration = math.random(minDuration,maxDuration)
local actionMove = CCMoveTo:create(enemyDuration,cc.p(enemyX,0-enemySize.height * 3))
enemy:runAction(actionMove)
self:addChild(enemy)
end
这样简单的直线运动敌机A就创建完成了,敌机B、C的创建和敌机A类似,区别在于运行速度不同。
三、游戏页面添加敌机
游戏页面的敌机是不断出现的,因此可以使用定时器定时产生敌机,间隔时间可以自定。
function EnemyLayer:enemyAttack()
CCDirector:getInstance():getScheduler():scheduleScriptFunc(handler(self,self.addEnemyA),3,false)
CCDirector:getInstance():getScheduler():scheduleScriptFunc(handler(self,self.addEnemyB),5,false)
end
因为游戏页面需要存储敌机数组用于后续的碰撞检测,因此敌机层需要一个函数来返回敌机数组。
function EnemyLayer:getEnemyArray()
return self.enemyArray
end
回到游戏页面:
local EnemyLayer = import(".layers/EnemyLayer")
local enemys = EnemyLayer.new()
self.enemys = enemys
self:addChild(enemys)
self.enemyArray = enemys:getEnemyArray()
enemys:enemyAttack()
总结
现在,屏幕上就出现源源不断的敌机了。