我正在研究IOS中的一个小游戏,它涉及滚动的tilemap。 我得到了我的背景图片,如此滚动
- (void)moveBg
{
[self enumerateChildNodesWithName:@"scroll" usingBlock:
^(SKNode *node, BOOL *stop) {
SKSpriteNode * bg = (SKSpriteNode *) node;
CGPoint bgVelocity = CGPointMake(-BG_POINTS_PER_SEC, 0.0);
CGPoint amtToMove = CGPointMultiplyScalar(bgVelocity, _dt);
bg.position = CGPointAdd(bg.position, amtToMove);
}];
}
但是如果我加载我的tilemap并将其命名为“滚动”,就像我在下面
一样- (TileMapLayer *)createLandScape
{
_tileMap = [JSTileMap mapNamed:@"level1.tmx"];
_tileMap.name=@"scroll";
return [[TmxTileMapLayer alloc]
initWithTmxLayer:[_tileMap layerNamed:@"Background"]];
}
我认为tilemap滚动与背景图像滚动不同。我想,如果有人可以帮助我,或指出我正确的方向,那就完成了。
谢谢!
答案 0 :(得分:2)
添加了SKNode的背景,并将tilemap添加为子项。现在,当调用滚动背景代码时,它会滚动tilemmap并带有
SKSpriteNode * bg =
[SKSpriteNode spriteNodeWithImageNamed:@"bg"];
bg.anchorPoint = CGPointZero;
bg.position = CGPointZero;
bg.name = @"bg";
[self addChild:bg];
[bg addChild:_tileMap];
答案 1 :(得分:1)
由于JSTileMap从SKNode扩展,您应该能够像应用任何其他节点一样应用操作。
无论如何,您将tilemap转换为SKSpriteNode。不仅如此,您还要将您的tilemap包装到TmxTileMapLayer类中。不知道你为什么要这样做,但问题是你的JSTileMap一旦你施放它就超出了范围。
您可能想尝试一下:
- (void)moveBg
{
[self enumerateChildNodesWithName:@"scroll" usingBlock:
^(SKNode *node, BOOL *stop) {
JSTileMap * bg = (JSTileMap *) node;
CGPoint bgVelocity = CGPointMake(-BG_POINTS_PER_SEC, 0.0);
CGPoint amtToMove = CGPointMultiplyScalar(bgVelocity, _dt);
bg.position = CGPointAdd(bg.position, amtToMove);
}];
}
您也可以通过强制转换整个包装类(如果TmxTileMapLayer从SKNode扩展)
TmxTileMapLayer * bg = (TmxTileMapLayer *) node;
滚动贴图的另一种方法就是:
_tiledMap = [JSTileMap mapNamed:@"level1.tmx"];
if (_tiledMap) {
[self addChild:_tiledMap];
}
_tiledMap.position = CGPointMake(ORIGINPOINT);
SKAction *scroll = [SKAction moveTo:CGPointMake(MOVETOPOINT) duration:SPEED];
[_tiledMap scroll];
甚至更好的方式(移动地图图层而不是整个tileMap):
_tiledMap = [JSTileMap mapNamed:@"level1.tmx"];
if (_tiledMap) {
[self addChild:_tiledMap];
}
_tiledMap.position = CGPointMake(ORIGINPOINT);
TMXLayer *someLayer = [_tiledMap layerNamed:@"someLayer"];
SKAction *scroll = [SKAction moveTo:CGPointMake(MOVETOPOINT) duration:SPEED];
[someLayer scroll];