每当我尝试绘制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多了。 由于游戏是横向的,所以地面被假设填满了屏幕高度的近三分之一,但它比正常低。
为什么地面被拉到错误的位置,但炸弹被拉到正确的位置?
答案 0 :(得分:3)
这听起来像我开始使用SpriteKit时遇到的问题一样。如果您的游戏使用.sks文件来显示它的主场景(默认情况下),则此场景使用.sks文件中定义的任意维值。
尝试动态设置场景的尺寸以查看是否是这种情况。
在didMoveToView
函数中,在函数顶部添加类似的内容:
self.size = view.bounds.size
这样,.sks文件中的维度值将被实际的屏幕尺寸覆盖。
希望这有帮助!
答案 1 :(得分:2)
在地面图像上设置anchorPoint。
ground.anchorPoint = CGPointZero // same as CGPointMake(0, 0)
ground.position = CGPointZero
默认的anchorPoint是(0.5,0.5),即图像的中心。因此,如果没有设置,地面图像的中心将绘制在屏幕的左下角(0,0)。
由于同样的原因,你的炸弹会在你想象的地方绘制,中心位于你指定的位置。