Ios 雪碧套件-在错误位置绘制的SKSpriteNode

Ios 雪碧套件-在错误位置绘制的SKSpriteNode,ios,swift,sprite-kit,Ios,Swift,Sprite Kit,每当我试图画一个SKSpriteNode时,它会被画得比它应该画的低。 但似乎其他SKSpriteNode工作正常,没有问题 这是我当前的代码: func initMainGround() { let gSize = CGSizeMake(self.size.width/4*3, 120); ground = SKSpriteNode(color: SKColor.brownColor(), size: gSize); ground.name = gName;

每当我试图画一个SKSpriteNode时,它会被画得比它应该画的低。 但似乎其他SKSpriteNode工作正常,没有问题

这是我当前的代码:

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

    ground.position = CGPointMake(0, 0);

    ground.physicsBody = SKPhysicsBody(rectangleOfSize: ground.size);
    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;
    ground.physicsBody.collisionBitMask = pBitmask;

    self.addChild(ground);
}

func addBomb() {
    let bomb = SKSpriteNode(imageNamed: "trap");
    bomb.size = CGSizeMake(30, 30);
    bomb.position = CGPointMake(ground.position.x, actualY+10);

    bomb.physicsBody = SKPhysicsBody(circleOfRadius: bomb.size.width/2);
    bomb.physicsBody.restitution = 0.0;
    bomb.physicsBody.allowsRotation = false;
    bomb.physicsBody.usesPreciseCollisionDetection = true;
    bomb.physicsBody.affectedByGravity = false;
    bomb.physicsBody.dynamic = false;
    bomb.physicsBody.categoryBitMask = bBitmask;
    bomb.physicsBody.collisionBitMask = pBitmask;
    bomb.physicsBody.contactTestBitMask = pBitmask;

    self.addChild(bomb);
 }
虽然假设炸弹几乎在地面正上方,但似乎炸弹几乎在地面上方100+处。
由于游戏是横向的,所以地面应该占到屏幕高度的三分之一,但比正常情况要低很多


为什么地面绘制在错误的位置,而炸弹绘制在正确的位置?

这听起来像是我开始使用SpriteKit时遇到的问题。如果游戏使用.sks文件显示其主场景(默认情况下是这样),则此场景使用.sks文件中定义的任意维度值

尝试动态设置场景的尺寸,以查看是否存在这种情况。 在您的
didMoveToView
函数中,在函数顶部添加如下内容:

self.size = view.bounds.size
这样,.sks文件中的维度值将被实际屏幕维度覆盖


希望这有帮助

这听起来像是我开始使用SpriteKit时遇到的问题。如果游戏使用.sks文件显示其主场景(默认情况下是这样),则此场景使用.sks文件中定义的任意维度值

尝试动态设置场景的尺寸,以查看是否存在这种情况。 在您的
didMoveToView
函数中,在函数顶部添加如下内容:

self.size = view.bounds.size
这样,.sks文件中的维度值将被实际屏幕维度覆盖


希望这有帮助

在地面图像上设置锚点

ground.anchorPoint = CGPointZero // same as CGPointMake(0, 0)
ground.position = CGPointZero
默认的锚点是图像的中心(0.5,0.5)。因此,如果没有设置,地面图像的中心将绘制在屏幕的左下角(0,0)


你的炸弹会在你期望的地方绘制,因为同样的原因,中心被放置在你指定的位置

在地面图像上设置锚点

ground.anchorPoint = CGPointZero // same as CGPointMake(0, 0)
ground.position = CGPointZero
默认的锚点是图像的中心(0.5,0.5)。因此,如果没有设置,地面图像的中心将绘制在屏幕的左下角(0,0)


你的炸弹会在你期望的地方绘制,因为同样的原因,中心被放置在你指定的位置

我已经将.sks文件尺寸更改为所需的实际尺寸,self.size.width还返回正确的宽度。因此,
self.size=view.bounds.size
在这里没有真正的帮助这是一个非常棒的答案。我的头撞到了墙上,因为我根据职位百分比计划了整个应用程序。谢谢,我也解决了我的问题。我已经将.sks文件尺寸更改为我需要的实际尺寸,self.size.width还返回正确的宽度。因此,
self.size=view.bounds.size
在这里没有真正的帮助这是一个非常棒的答案。我的头撞到了墙上,因为我已经根据职位的百分比计划了我的整个应用程序。谢谢,也解决了我的问题