图像不适合SKSpriteNode帧

时间:2014-07-08 01:55:35

标签: ios sprite-kit

我正在尝试在我的场景中创建一个播放器节点。但是图像“player.png”并不适合物理机构。它们都是分开的。

PhysicsBody在地面,图像漂浮在空中。我的代码出了什么问题?我如何将它们组合在一起?

#import "Player.h"

@implementation Player
- (instancetype)init {
    self = [super initWithImageNamed:@"player.png"];
    self.name = @"player";
    self.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:CGSizeMake(50, 50)];
    self.physicsBody.dynamic = YES;
    self.physicsBody.allowsRotation = NO;
    self.physicsBody.affectedByGravity = YES;

    self.zPosition = 100;
    self.anchorPoint = CGPointMake(0.5, 0);

    return self;
}

@end
// myScene.h
-(void)createSceneContents {
    self.currentBackground = [Background generateBackground];
    [self addChild: self.currentBackground];
    self.physicsWorld.gravity = CGVectorMake(0, _gravity);
    self.physicsWorld.contactDelegate = self;

    Player *player = [[Player alloc]init];
    player.position = CGPointMake([UIScreen mainScreen].applicationFrame.size.width/2, 50);
    [self addChild:player];
}

1 个答案:

答案 0 :(得分:2)

锚点也是你物理身体的中心。 你的点0.5,0.0表示中心x和零y。 因此,物理实体的中心位于精灵节点的底部边缘。 可能是图像的底部中心。 但物理机构从那里向下延伸。 这是因为您用于创建物理主体的方法。

锚点令人困惑。 他们有时扮演双重角色。 它们包含许多记录不良的隐式行为。

除非你依赖于锚点的逻辑,否则最好不要改变它们。 对于物理学体,重要的是身体在物理世界中的位置。 保持精灵的模型尽可能简单。 不断完善最简单的模型以完成工作。它将简化您的游戏逻辑。