关于无限滚动(基于Cocos2d-x 3.3)

  大大小小关于无线滚动的文章很多。本人只是单单记录一些。自己的一些想法。

那么关于无限地图最主要就是要保证首尾相接。就可以保证地图的无限滚动了。如果不能保证那就回出现大大小小的问题。导致很不自然。那么我们直接看代码的实现过程吧!

首先需要初始化地图的数量。至少两张。这是一个横向的滚动。那么纵向的也是一样的思想

self.moveTargets = {

display.newSprite("shake/pan/bg.png",0,0),

display.newSprite("shake/pan/bg.png",1136,0),

display.newSprite("shake/pan/bg.png",2272,0),

display.newSprite("shake/pan/bg.png",3408,0)

}

然后开始初始化一些信息。当然可以把上面的代码都放到一个for里面。初始就ok了节省代码。

fori,vinpairs(self.moveTargets)do

v:setAnchorPoint(0,0)

v:addChild(display.newTTFLabel({text =string.format("xxxxxxx %d",i),size =40,x =200,y =200}))

self:addChild(v)

end

地图的数量

self.scrollLen = #self.moveTargets

初始化地图的宽度

self.moveWidth =self.moveTargets[1]:getContentSize().width

self.bgMoveX = self.moveWidth

self.scrollIndex =1

self.moveEnd =0


然后就是滚动函数了

functionBoxMonsterScrollNode:onMoveBackground()

self.bgMoveX = self.bgMoveX - BG_MOVE_SPEED ---做 地图交替处理

ifself.bgMoveX <=self.moveEnd then --判断时候需要更换位置

self.moveTargets[self.scrollIndex]:setPositionX(self.moveWidth * (self.scrollLen -1))

self.scrollIndex = self.scrollIndex +1

if self.scrollIndex > self.scrollLen then

self.scrollIndex =1 ----每一次需要更换的对象index

end

self.bgMoveX = self.moveWidth  ----重置默认

self.moveEnd = BG_MOVE_SPEED

end

fori,vinpairs(self.moveTargets)do

v:setPositionX(v:getPositionX() -BG_MOVE_SPEED) ----设置位置

end

end


大概思路便是如此了。有何问题可以留言

你可能感兴趣的:(关于无限滚动(基于Cocos2d-x 3.3))