1

なんらかの理由で、メイン プレーヤーの物理ボディがシーンで実際に機能していません。シーンでは、プレーヤーを初期化します

-(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 を同一視することはできませんか?

4

0 に答える 0