关于ios:Tilemap not Scrolling in spritekit | 珊瑚贝

Tilemap not Scrolling in spritekit


我正在 IOS 中开发一个涉及滚动瓷砖地图的小游戏。
我已经让我的背景图片像这样滚动

1
2
3
4
5
6
7
8
9
10
– (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 并将其命名为 “scroll”,如下所示

1
2
3
4
5
6
7
8
– (TileMapLayer *)createLandScape
{

  _tileMap = [JSTileMap mapNamed:@”level1.tmx”];
  _tileMap.name=@”scroll”;
  return [[TmxTileMapLayer alloc]
          initWithTmxLayer:[_tileMap layerNamed:@”Background”]];
}

我相信瓷砖地图滚动与背景图像滚动不同。我想如果有人可以帮助我或为我指出正确的方向来完成这件事。

谢谢!

  • 是否可以将瓷砖地图分配给背景?并滚动它?
  • 滚动地图到底是什么意思?你是说当你的玩家在地图上移动时地图也在移动?
  • @sangony 不,没有玩家,我希望瓷砖地图从左到右滚动,就像我滚动背景一样。
  • @sangony 自己…不关注玩家
  • @sangony 我一直在尝试在 tilemap 上运行操作,但这似乎也不起作用
  • 我认为这更像是移动视图而不是移动瓦片地图的情况。您是否考虑过并尝试过这样做?
  • @sangony 考虑过但是,这不会让我所有的孩子都喜欢这个观点吗?其次,移动视图的原理和移动背景一样吗?
  • 是和不是。背景通常设置为 0,0,并且视图围绕背景移动。因此,至少在我的拙见中,移动视图并跟踪背景中的所有内容更容易。如果您有孩子附在视图上,那么他们也会移动,但通常只有玩家。其他对象通常定义了相对于背景图而不是视图的坐标。示例:当视图达到 y=800 时,一个敌人出现在视图上。我的建议绝不是唯一正确的建议,因为这完全取决于您如何编写代码。
  • @sangony 好的,所以在这种情况下….如果我将 tilemap 作为背景图片的子项并滚动背景图片。瓷砖地图也应该滚动……对吗?
  • 是的,它应该。如果您仍然遇到问题,请告诉我,我可以为您发布一些示例代码。
  • @sangony 现在就试试
  • @sangony 啊,是的。我的 tilemap 滚动了,您可以在答案下发布一些内容,以便我可以选择它作为答案吗?
  • 感谢您的提议,但您自己解决了这个问题。发布您的答案,将其标记为正确,我会给它一个 1。快乐编码!


添加了SKNode的背景并添加了tilemap作为子项。现在,当调用滚动背景代码时,它会与 is

一起滚动 tilemmap

1
2
3
4
5
6
7
  SKSpriteNode * bg =
  [SKSpriteNode spriteNodeWithImageNamed:@”bg”];
  bg.anchorPoint = CGPointZero;
  bg.position = CGPointZero;
  bg.name = @”bg”;
  [self addChild:bg];
    [bg addChild:_tileMap];

由于 JSTileMap 从 SKNode 扩展而来,您应该能够像应用任何其他节点一样应用操作。

无论如何,您正在将您的 tilemap 投射到一个 SKSpriteNode 中。不仅如此,您还将您的 tilemap package到 TmxTileMapLayer 类中。不知道你为什么要这样做,但问题是你的 JSTileMap 一旦你投射它就超出了范围。

你可能想试试这个:

1
2
3
4
5
6
7
8
9
10
– (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);
   }];
}

您也可以通过强制转换来移动整个package类(如果 TmxTileMapLayer 从 SKNode 扩展)

1
TmxTileMapLayer * bg = (TmxTileMapLayer *) node;

另一种滚动瓷砖地图的方法很简单:

1
2
3
4
5
6
7
8
_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):

1
2
3
4
5
6
7
8
9
10
_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];


来源:https://www.codenong.com/23149333/

微信公众号
手机浏览(小程序)

Warning: get_headers(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57

Warning: get_headers(): Failed to enable crypto in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57

Warning: get_headers(https://static.shanhubei.com/qrcode/qrcode_viewid_8645.jpg): failed to open stream: operation failed in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57
0
分享到:
没有账号? 忘记密码?