大大小小关于无线滚动的文章很多。本人只是单单记录一些。自己的一些想法。
那么关于无限地图最主要就是要保证首尾相接。就可以保证地图的无限滚动了。如果不能保证那就回出现大大小小的问题。导致很不自然。那么我们直接看代码的实现过程吧!
首先需要初始化地图的数量。至少两张。这是一个横向的滚动。那么纵向的也是一样的思想
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
大概思路便是如此了。有何问题可以留言