なんらかの理由で、メイン プレーヤーの物理ボディがシーンで実際に機能していません。シーンでは、プレーヤーを初期化します
-(id)initWithSize:(CGSize)size {
if (self = [super initWithSize:size]) {
Eskimo *runner = [[Eskimo alloc]init];
runner.position = CGPointMake(100, 300);
[self addChild:runner];
self.physicsWorld.gravity = CGVectorMake(0, -3); // 0, -2
self.physicsWorld.contactDelegate = self;
[runner performRun];
}
return self;
}
私のエスキモークラスの初期化は次のとおりです。
-(id)init {
if (self = [super init]) {
self.name = @"runner";
self.physicsBody = ((Eskimo*)[[Physics alloc]initPhys:self.name :CGSizeMake(60, 60)]).physicsBody;
}
return self;
}
これが私の物理クラスの初期化の一部です。
-(instancetype)initPhys:(NSString*)string :(CGSize)size{
if (self = [super init]) {
self.type = string;
if ([self.type isEqualToString:@"runner"]) {
self.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:size];
self.physicsBody.restitution = 0.3;
self.physicsBody.mass = 1;
self.physicsBody.categoryBitMask = runnerCategory;
self.physicsBody.contactTestBitMask = monsterCategory;
self.physicsBody.collisionBitMask = groundCategory|monsterCategory;
}
}
return self;
}
物理ボディが存在するかどうかを確認するためだけに、シーン クラスでランナーの復元を出力し、適切に出力されました。ただし、重力ベクトルを設定しても、ランナーはその影響を受けず、適用する力もありません。Physics クラスがなくても、Eskimo クラス自体にphysicsBody があったときは以前は機能していたので、理由はわかりません。私がここに欠けているものはありますか?私がエスキモーのクラスでやったように、physicsBodies を同一視することはできませんか?