【cocos2d-x lua】飞机大战小游戏4:敌机

【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()

总结

现在,屏幕上就出现源源不断的敌机了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值