一般来说,我对 spritekit/jstilemap/programming 还是很陌生。
我正在构建一个带有两个使用视差垂直滚动的瓷砖地图的赛车游戏。我想知道是否可以更新 tilemap 而不必删除当前的 tilemap 并创建一个新的?
这基本上就是我现在正在做的。创建两个瓷砖地图:
for var i = 0; i < 2; i++
{
//tilemap
var tileMap = JSTileMap(named: "map1.tmx")
//size of tilemap
var rect = tileMap.calculateAccumulatedFrame()
tileMap.position = CGPoint(x: Int(rect.minX)/2, y: i*Int(rect.height))
tileMap.name = "tilemap"
self.addChild(tileMap)
}
并在更新中找到名为 tilemap 的节点。如果它们足够低,请将它们向下移动并弹起。然后,如果该地图已被查看 4 次,则通过创建一个全新的地图然后删除旧地图来使用新地图更新地图。这可行,但在加载新地图时会产生障碍。
self.enumerateChildNodesWithName("tilemap") {
node, stop in
node.position = CGPointMake(node.position.x,node.position.y-8)
if(node.position.y <= -node.calculateAccumulatedFrame().height) {
self.mapCount += 1
if (self.mapCount <= 3) {
// if map count is less than 3 just show the same map over and over
node.position = CGPointMake(node.position.x, node.position.y+node.calculateAccumulatedFrame().height*2)
} else if (self.mapCount == 5) {
//update map if has been shown 4 times
println("newTILE")
var tileMap = JSTileMap(named: "map2.tmx")
var rect = tileMap.calculateAccumulatedFrame()
tileMap.position = CGPointMake(node.position.x, node.position.y+node.calculateAccumulatedFrame().height*2)
tileMap.name = "tilemap"
self.addChild(tileMap)
//remove old map
node.removeFromParent()
} else if(self.mapCount >= 5) {
node.position = CGPointMake(node.position.x, node.position.y+node.calculateAccumulatedFrame().height*2)
}
}