这里只介绍extern.lua的其中的两个方法,也是我们接下来要用到的两个方法。
1.function class(classname, super) 这个方法用于声明一个类,第一个参数是你要定义的类名,第二个参数要继承的父类实体(从参数中可以发现只是实现单继承)。
2.function clone(Object) 这个方法用于复制对象
回到正题,想要增添敌机,第一件事想到肯定是定义一个敌机的实体类,那我们定义一个吧,在EnemyLayer.lua文件中定义Enemy实体类
require "Lua/extern"
Enemy = class("Enemy", function(frame)
local sprite = CCSprite:createWithSpriteFrameName(frame)
local peer = {}
tolua.setpeer(sprite,peer)
return sprite
end
)
Enemy.__index = Enemy
function Enemy:create(frame,life,score,level)
local enemy = Enemy.new(frame)
local peer = tolua.getpeer(enemy)
peer.life = life--敌机的生命值
peer.score = score--打爆这架敌机,可获得的分数
peer.level = level--敌机的等级,图片资源中有三种敌机
return enemy
end
function Enemy:getLife()
return tolua.getpeer(self).life
end
function Enemy:getLevel()
return tolua.getpeer(self).level
end
function Enemy:getScore()
return tolua.getpeer(self).score
end
function Enemy:loseLife()
tolua.getpeer(self).life = tolua.getpeer(self).life - 1
end
有了敌机,我们再创建一个敌机图层
function create()
layer = CCLayer:create()
start()
return layer
end
start()方法将所有敌机添加到图层中
local enemyAEntry = nil
local enemyBEntry = nil
local enemyCEntry = nil
function start()
enemyAEntry = CCDirector:sharedDirector():getScheduler():scheduleScriptFunc(addEnemyA, 3,false)
enemyBEntry = CCDirector:sharedDirector():getScheduler():scheduleScriptFunc(addEnemyB, 1,false)
enemyCEntry = CCDirector:sharedDirector():getScheduler():scheduleScriptFunc(addEnemyC, 10,false)
end
在这儿就只贴出添加敌机A方法的代码addEnemyA(),其他两个都与这个类似。
local Enemy_A_Life = 1
local Enemy_B_Life = 2
local Enemy_C_Life = 3
local Enemy_A_SCORE = 5
local Enemy_B_SCORE = 10
local Enemy_C_SCORE = 15
local Enemy_A_Level = 1
local Enemy_B_Level = 2
local Enemy_C_Level = 3
local layer = nil
local enemyArray = {}
function addEnemyAB(frameName,life,score,level)
local enemy = Enemy:create(frameName,life,score,level)
local enemyASizie = enemy:getContentSize()
local minX = enemyASizie.width / 2
local maxX = visibleSize.width - (enemyASizie.width / 2)
local rangX = maxX - minX
local actualX = (math.random() * rangX) + minX
enemy:setPosition(ccp(actualX,visibleSize.height + enemyASizie.height / 2))
layer:addChild(enemy)
table.insert(enemyArray,enemy)
local minDuration = 10
local maxDuration = 20
local rangeDur = maxDuration - minDuration
local actuakDur = (math.random() * rangeDur) + minDuration
local actionMove = CCMoveTo:create(actuakDur,ccp(actualX,0 - enemy:getContentSize().height / 2))
local actionDone = CCCallFuncN:create(removeEnemy)
local sequence = CCSequence:createWithTwoActions(actionMove,actionDone)
enemy:runAction(sequence)
end
function addEnemyA()
addEnemyAB("enemy1.png",Enemy_A_Life,Enemy_A_SCORE,Enemy_A_Level)
end
enemyArray这个参数用来存放所有的敌机,在后面的碰撞检测时会有用处。
本计划将代码整理后再上传,无赖这段时间太忙,没时间整理,也不知道什么时候有时间更新博文。所以今天先将所有代码上传一份吧,方便大家学习交流。
源码下载http://download.csdn.net/detail/yifuteli/7305869