滚动的背景
1. 先创建两个背景图片,并添加到一个表中
1 -- 创建一个滚动的背景 2 function GameScene:createBackground( ) 3 -- body 4 -- 创建一个背景1 5 local background1 = display.newSprite("image/background/b1.png") 6 :align(display.BOTTOM_LEFT, display.left, display.bottom + 10) 7 :addTo(self) 8 local background2 = display.newSprite("image/background/b2.png") 9 :align(display.BOTTOM_LEFT, display.left + background1:getContentSize().width, display.bottom)10 :addTo(self)11 12 -- 把创建的两个背景添加到表中13 table.insert(self.background, background1)14 table.insert(self.background, background2)15 16 end
2.创建一个滚动背景的函数
1 -- 创建一个滚动背景的函数 2 function GameScene:scrollBackground( dt ) 3 -- body 4 -- 判断第二个背景的位置,如果移动到超出屏幕的左边,则将第一个背景显示到屏幕上 5 if self.background[2]:getPositionX( ) <= 0 then 6 self.background[1]:setPositionX( 0 ) 7 end 8 -- 设置x轴的位置,一每帧50的速度向右运动 9 local x1 = self.background[1]:getPositionX() - 50 * dt10 -- 背景二的图片紧跟背景一的图片11 local x2 = x1 + self.background[1]:getContentSize().width12 -- 设置两个图片的位置13 self.background[1]:setPositionX(x1)14 self.background[2]:setPositionX(x2)15 16 end
3.在crot函数中调用这两个函数,并启动update, (帧事件)实现背景的滚动
1 function GameScene:ctor( ) 2 -- body 3 -- 创建一个 table 来存放背景 4 self.background = {} 5 6 self:createBackground() 7 8 -- 调用帧事件 9 self:addNodeEventListener( cc.NODE_ENTER_FRAME_EVENT, handler( self, self.scrollBackground ) )10 self:scheduleUpdate()11 12 end
self:unscheduleUpdate() -- 禁用帧事件,停止整个背景层滚动
其中,addNodeEventListener 方法用于注册帧事件,
scheduleUpdate 方法则启用了帧事件,
只有调用了 scheduleUpdate 后,帧事件才会被触发