SpriteKit - SKSpriteNode在3,5英寸和4英寸设备上的扩展方式不同

时间:2014-06-06 10:03:41

标签: ios position sprite-kit scale skspritenode

我也是游戏开发和SpriteKit的新手,用它来处理小游戏。不幸的是,我无法在两台设备上正确显示SKSpriteNode - 3,5英寸和4英寸。

我对Cocos2d有一些经验,所有定位的东西都是在SpriteBuilder工具中制作的,非常方便。在SpriteKit中它应该以编程方式完成..问题是节点的规模在设备上有所不同,看看:

enter image description here

这里是 MyScene.m

中的定位代码
-(id)initWithSize:(CGSize)size {    
  if (self = [super initWithSize:size]) {
    _screenRect = [[UIScreen mainScreen] bounds];
    _screenHeight = _screenRect.size.height;
    _screenWidth = _screenRect.size.width;

    SKSpriteNode *background = [SKSpriteNode spriteNodeWithImageNamed:@"background"];
    [background setPosition:CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame))];
    [self addChild:background];

    _grid = [[DVGrid alloc] initGrid];
    [_grid setScale:0.65f];
    [_grid setAnchorPoint:CGPointMake(0.0f, 0.5f)];
    [_grid setPosition:CGPointMake(10.0f, _screenHeight/2)];
    [self addChild:_grid];
  }

  return self;
}

DVGrid.m 的初始化,它是SKSpriteNode的子类:

- (instancetype)initGrid {
  self = [super initWithImageNamed:@"grid"];

  if (self) {
    [self setUserInteractionEnabled:YES];
  }

  return self;
}

这里有什么问题?

1 个答案:

答案 0 :(得分:3)

一直回到你创建场景的地方。看起来您可能将场景的scaleMode设置为纵横填充,如果您正在设计3.5然后升级,则可能会导致此行为。

[scene setScaleMode:SKSceneScaleModeAspectFill];

我建议切换到不同的比例模式,例如SKSceneScaleModeResizeFill,这样可以产生预期的结果。