0

xscale を使用して SKSpriteNode のいずれかを反転しようとすると、衝突の検出が停止します。これを修正するために、アンカー ポイントを移動する、すべてのノードにコンテナ ノードをラップする、物理ボディを繰り返すなど、さまざまな方法を試しました。この 3 番目のオプションは、私が成功した唯一のオプションですが、ほとんどの状況では機能しません。すべてのアートワークを反転し、すべてのアニメーション アトラスの 2 倍を作成する以外に、これを修正する方法はありますか?

    self.player.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:CGSizeMake(30, 60)];
    self.player.position= CGPointMake(400, 200);
    self.player.zPosition = 25;
    self.player.physicsBody.dynamic = YES;
    self.player.physicsBody.usesPreciseCollisionDetection = YES;
    self.player.physicsBody.friction = 0;
    self.player.name = @"player";
    self.player.physicsBody.categoryBitMask = player;
    self.player.physicsBody.contactTestBitMask = ground;
    self.player.physicsBody.collisionBitMask = monsterCategory;
    self.player.physicsBody.allowsRotation = false;
    [self addChild:self.player];

   for (UITouch *touch in touches){
    CGPoint touchLocation = [touch locationInNode:self];
    if (touchLocation.x>self.player.position.x &&touchLocation.y>=135) {
        forward2 = YES;
        multiplierForDirection2 = 1;
    }else if (touchLocation.x<self.player.position.x && touchLocation.y>=135){
        reverse2 = YES;
        multiplierForDirection2 = -1;
    }
    if (mode2 ==1) {
        [self walkingBear];
    }else if (mode2 ==2){
        jump2 = true;
        [self fly];
    }else if (mode2 == 3){
        [self weapon];
    }
}
    self.player.xScale = fabs(self.player.xScale)*multiplierForDirection2;
4

1 に答える 1

1

残念ながら違います。このコマンドを使用するxScale = -1と、スプライトの物理ボディに大混乱が生じます。この問題に対してさまざまなアプローチを試みましたが、受け入れられる修正を思いつくことができませんでした。少なくとも今のところ、唯一の解決策はミラー イメージを作成することです。

各画像を反転するには、プレビュー アプリを使用し、[水平方向に反転] コマンドのキーボード ショートカットを作成しました。そのおかげで仕事がずっと速くなりました。

于 2014-04-17T12:56:41.310 に答える