【问题标题】:Sprite Kit - World not in drawing sprites in correct position despite skview with right dimensionsSprite Kit - 尽管 skview 尺寸正确,但世界并未在正确的位置绘制精灵
【发布时间】:2014-07-08 13:54:21
【问题描述】:

我正在尝试为游戏画一个基本的基础,让我的精灵在上面运行。 不过好像占了屏幕高度的1/3,但是地面太短了。

我的 GameScene.sks 已更改为 568x320(横向,iPhone 5/5S)

这是我当前的代码

func initMainGround() {
    let gSize = CGSizeMake(self.size.width/4*3*2, 120);
    let ground = SKSpriteNode(color: SKColor.brownColor(), size: gSize);
    ground.name = gName; //Ground
    ground.position = CGPointMake(0, 0);

    ground.physicsBody = SKPhysicsBody(rectangleOfSize: gSize);
    ground.physicsBody.restitution = 0.0;
    ground.physicsBody.friction = 0.0;
    ground.physicsBody.angularDamping = 0.0;
    ground.physicsBody.linearDamping = 0.0;
    ground.physicsBody.allowsRotation = false;
    ground.physicsBody.usesPreciseCollisionDetection = true; //accurate collision
    ground.physicsBody.affectedByGravity = false;
    ground.physicsBody.dynamic = false;
    ground.physicsBody.categoryBitMask = gBitmask; // 0x1 << 0
    ground.physicsBody.collisionBitMask = pBitmask; //0x1 << 1        playerCategoryBitmask

    self.addChild(ground);
}

NSLog(String(self.size.height)) 返回320.0 这很好。 但是为什么SKSpriteNode画错了呢?

将地面高度设置为320 仅占屏幕的一半,尽管横向屏幕的高度为 320。

【问题讨论】:

标签: ios swift sprite-kit


【解决方案1】:

就像 Jon 所说,这是一个位置问题,而不是大小问题。任何给定节点的默认锚点都在其中心,因此您有两种选择:

1) 将 ground.position 设置为 CGPointMake(CGRectGetMidX(self.frame),CGRectGetMidY(self.frame)) (或者更好的是,将其捕获为 ivar,因为您在向屏幕添加内容时会大量引用它,并且没有真正的理由进行数十次计算)

2) 改变地面节点的锚点。这是作为 CGPoint 完成的,但被解释为相关节点大小的百分比,默认(中心)为 (0.5, 0.5)。 ground.anchorPoint = CGPointZero(这只是CGPointMake(0, 0)的快捷方式)会将节点的锚点设置为其左下角,此时将其位置设置为(0,0)将正确地将其从左下角开始您的场景(或其父节点,无论如何)。

【讨论】:

  • 使用你的第二个答案,我的精灵似乎只是跳入了地面,并站在地面内,地面从屏幕上消失后它会下降。我猜身体尺寸与屏幕上显示的实际尺寸不符?
  • 您可以使用“showsPhysics”查看实际的physicsBody。 developer.apple.com/library/ios/documentation/SpriteKit/…
  • 你在哪里设置锚点?它需要在你实例化physicsBody 之前完成,否则physicsBody 可能会在错误的位置。在这种情况下,我猜physicsBody 仍然以 (0.5, 0.5) 锚点(地面节点的中心)为中心,它的一半会在屏幕外,并解释你的玩家节点“站在里面” .
  • 在实例化地面位置之前完成
  • @Jon 使用showsPhysics 后,物理体在错误的位置,现在绘制的框已正确绘制
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-09
  • 2015-11-27
  • 2013-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多