GameLayer=class("GameLayer",function()
returncc.LayerColor:create(cc.c4b(255,255,255))
end)
functionGameLayer:ctor()
--控制类
self.control=nil
self.score=0
self.gem=0
end
functionGameLayer:createLayer()
locallayer=GameLayer.new()
layer:bg()
returnlayer
end
--游戏背景图
functionGameLayer:bg()
localsize=cc.Director:getInstance():getWinSize()
--创建一个围绕屏幕四周的物理边界
localnode=cc.Node:create()
node:setPhysicsBody(cc.PhysicsBody:createEdgeBox(cc.size(size.width,size.height),cc.PHYSICSBODY_MATERIAL_DEFAULT,5))
node:setPosition(size.width/2,size.height/2+50)
self:addChild(node)
-- 地面(一条线)
localedgeSprite=cc.Sprite:create()
edgeSprite:setTextureRect(cc.rect(0,size.width,2))
edgeSprite:setColor(cc.c3b(125,125,0))
edgeSprite:setPosition(size.width/2,50)
self:addChild(edgeSprite)
--分数
locallabelScore=cc.Label:createWithTTF("",20)
labelScore:setColor(cc.c3b(0,0))
labelScore:setString(self.score)
labelScore:setPosition(size.width-80,size.height-35)
self:addChild(labelScore)
--宝石个数
locallabelGem=cc.Label:createWithTTF("",28)
labelGem:setColor(cc.c3b(0,0))
labelGem:setString(self.gem)
labelGem:setPosition(size.width-180,size.height-35)
self:addChild(labelGem)
--宝石
localcache=cc.SpriteFrameCache:getInstance()
cache:addSpriteFrames(Res.gemPlist,Res.gemPng)
self.control=Control:create(self,50)
localspGem=cc.Sprite:createWithSpriteFrameName("green.png")
spGem:setPosition(size.width-220,size.height-35)
spGem:setScale(0.5)
self:addChild(spGem)
self:scheduleUpdateWithPriorityLua(function(dt)
--分数
self.score=self.score+dt
labelScore:setString(string.format("%#.2f",self.score))
self.control:updateBlock(self.score)
end,0)
--一个body的CategoryBitmask和另一个body的ContactTestBitmask的逻辑与的结果不等于0时,接触事件将被发出,否则不发送。
--一个body的CategoryBitmask和另一个body的CollisionBitmask的逻辑与结果不等于0时,他们将碰撞,否则不碰撞
--需要两个body相互位与运算的值都是大于0时才会发生碰撞检测和发送接触事件通知
--碰撞监听
localconListener=cc.EventListenerPhysicsContact:create();
conListener:registerScriptHandler(function(contact)
print("---contact-碰撞了--")
--处理游戏中精灵碰撞逻辑
localnode1=contact:getShapeA():getBody():getNode()
localname1=node1:getName()
localtag1=node1:getTag()
print("name1:",name1)
localnode2=contact:getShapeB():getBody():getNode()
localname2=node2:getName()
localtag2=node2:getTag()
print("name2:",name2)
--英雄碰到宝石
ifname1=="gem"then
localx,y=node1:getPosition()
self.gem=self.gem+1
labelGem:setString(string.format("%s",self.gem))
labelGem:runAction(cc.Sequence:create(cc.ScaleTo:create(0.2,1.5),cc.CallFunc:create(
function(sender)
sender:runAction(cc.ScaleTo:create(0.1,1))
end)))
ifnil~=node1then
self:removeChild(node1,true)
end
--node1:runAction(cc.Sequence:create(cc.Spawn:create(cc.MoveTo:create(0.1,cc.p(node1:getPositionX(),node1:getPositionY()+50)),cc.ScaleTo:create(0.1,0.5),cc.FadeOut:create(0.1)),
--cc.CallFunc:create(function(sender)
--self:removeChild(sender,true)
--end)))
--英雄碰到障碍物死亡
elseifname1=="hero"then
localx,y=node2:getPosition()
cc.Director:getInstance():replaceScene(StartGame:createScene())
elseifname2=="hero"then
localx,y=node2:getPosition()
cc.Director:getInstance():replaceScene(StartGame:createScene())
end
returntrue
end,cc.Handler.EVENT_PHYSICS_CONTACT_BEGIN)
cc.Director:getInstance():getEventDispatcher():addEventListenerWithSceneGraphPriority(conListener,self)
end
returnGameLayer