--其实能把这个文件直接覆盖的,你对比一下没多少区别的
--导入lua文件
--定时器
scheduler = require("framework.scheduler")
--主角飞机
local Role = import("..Obj.Role")
--敌人
local Enemy = import("..Obj.Enemy")
--子弹
local Bullet = import("..Obj.Bullet")
local MainScene = class("MainScene", function()
return display.newScene("MainScene")
end)
function MainScene:ctor()
self.plane = Role.new()
--添加主角飞机在场景
self:addChild(self.plane)
--保存敌人的容器
self.arrayEnemy = CCArray:create()
self.arrayEnemy:retain()
--保存子弹的容器
self.arrayBullet = CCArray:create()
self.arrayBullet:retain()
end
--生产敌人的定时器回调函数
function MainScene:newEnemy( dt )
local planeEnemy = Enemy.new()
planeEnemy:pos(math.random(50,display.sizeInPixels.width-50), display.cy*2)
self:addChild(planeEnemy)
self.arrayEnemy:addObject(planeEnemy)
--print(arrayEnemy:count() .. "arrayEnemy")
end
--生产子弹的定时器回调函数
function MainScene:newBullet( dt )
local roleBullet = Bullet.new()
self:addChild(roleBullet)
roleBullet:pos(self.plane:getPositionX(),self.plane:getPositionY())
roleBullet:runBullet()
self.arrayBullet:addObject(roleBullet)
--print(arrayBullet:count() .. "arrayBullet")
end
--检测碰撞的定时器回调函数
function MainScene:onCollision( dt )
--敌人跟子弹的碰撞 如果碰撞那么就要在场景内删除对象和在容器内删除
for i=0, self.arrayEnemy:count()-1 do
for j=0, self.arrayBullet:count()-1 do
local enemyObj = tolua.cast(self.arrayEnemy:objectAtIndex(i), "CCNode")
local bulletObj = tolua.cast(self.arrayBullet:objectAtIndex(j), "CCNode")
--敌人超过屏幕还没死就自动删除
if enemyObj:getPositionY() == -480 then
enemyObj:removeFromParent()
self.arrayEnemy:removeObjectAtIndex(i)
return
end
--子弹超出屏幕范围还没消失自动删除
if bulletObj:getPositionY() == 480 then
bulletObj:removeFromParent()
self.arrayBullet:removeObjectAtIndex(j)
return
end
--敌人跟子弹碰撞判断
if enemyObj:boundingBox():intersectsRect(bulletObj:boundingBox()) then
enemyObj:removeFromParent()
bulletObj:removeFromParent()
self.arrayEnemy:removeObjectAtIndex(i)
self.arrayBullet:removeObjectAtIndex(j)
return
end
end
end
--敌人跟主角飞机的碰撞以及判断结果 如果碰撞那么就要在场景内删除对象和在容器内删除
for i=0, self.arrayEnemy:count()-1 do
local enemyObj = tolua.cast(self.arrayEnemy:objectAtIndex(i), "CCNode")
if self.plane:boundingBox():intersectsRect(enemyObj:boundingBox()) then
self.plane:removeFromParent()
scheduler.unscheduleGlobal(self.handle1)
scheduler.unscheduleGlobal(self.handle2)
scheduler.unscheduleGlobal(self.handle3)
self:addChild(ui.newTTFLabel({text = "Game Over", font = "黑体", size = 40}):pos(display.cx, display.cy))
end
end
end
function MainScene:onEnter()
--初始化启动三个定时器
self.handle1 = scheduler.scheduleGlobal(handler(self, self.newEnemy), 0.5)
self.handle2 = scheduler.scheduleGlobal(handler(self, self.newBullet), 0.5)
self.handle3 = scheduler.scheduleGlobal(handler(self, self.onCollision), 0)
end
function MainScene:onExit()
--用完手尾要好,清除它们
self.arrayEnemy:release()
self.arrayBullet:release()
end
return MainScene