我正在尝试在我的场景中创建一个播放器节点。但是图像“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];
}
答案 0 :(得分:2)
锚点也是你物理身体的中心。 你的点0.5,0.0表示中心x和零y。 因此,物理实体的中心位于精灵节点的底部边缘。 可能是图像的底部中心。 但物理机构从那里向下延伸。 这是因为您用于创建物理主体的方法。
锚点令人困惑。 他们有时扮演双重角色。 它们包含许多记录不良的隐式行为。
除非你依赖于锚点的逻辑,否则最好不要改变它们。 对于物理学体,重要的是身体在物理世界中的位置。 保持精灵的模型尽可能简单。 不断完善最简单的模型以完成工作。它将简化您的游戏逻辑。