1

Apple のスプライト キット フレームワークを使用して基本的なゲームを作成しようとしています。これまでのところ、SKPhysicsBody を使用して、船が画面の周りを飛んでいます。船が画面から飛び出さないようにしたいので、更新メソッドを編集して船の速度をゼロにしました。これはほとんどの場合機能しますが、時々、船が画面から飛び出します。

これが私の更新方法です。

// const int X_MIN = 60;
// const int X_MAX = 853;
// const int Y_MAX = 660;
// const int Y_MIN = 60;
// const float SHIP_SPEED = 50.0;

- (void)update:(CFTimeInterval)currentTime {
    if (self.keysPressed & DOWN_ARROW_PRESSED) {
        if (self.ship.position.y > Y_MIN) {
            [self.ship.physicsBody applyForce:CGVectorMake(0, -SHIP_SPEED)];
        } else {
            self.ship.physicsBody.velocity = CGVectorMake(self.ship.physicsBody.velocity.dx, 0);
        }
    }

    if (self.keysPressed & UP_ARROW_PRESSED) {
        if (self.ship.position.y < Y_MAX) {
            [self.ship.physicsBody applyForce:CGVectorMake(0, SHIP_SPEED)];
        } else {
            self.ship.physicsBody.velocity = CGVectorMake(self.ship.physicsBody.velocity.dx, 0);
        }
    }

    if (self.keysPressed & RIGHT_ARROW_PRESSED) {
        if (self.ship.position.x < X_MAX) {
            [self.ship.physicsBody applyForce:CGVectorMake(SHIP_SPEED, 0)];
        } else {
            self.ship.physicsBody.velocity = CGVectorMake(0, self.ship.physicsBody.velocity.dy);
        }
    }

    if (self.keysPressed & LEFT_ARROW_PRESSED) {
        if (self.ship.position.x > X_MIN) {
            [self.ship.physicsBody applyForce:CGVectorMake(-SHIP_SPEED, 0)];
        } else {
            self.ship.physicsBody.velocity = CGVectorMake(0, self.ship.physicsBody.velocity.dy);
        }
    }
}

最初は、船を押し戻すのに使っていapplyImpulseました。didBeginContactこれにより船が跳ね返りましたが、船が跳ね返りたくありません。端っこで止めてほしい。

船が端に着いたら船を止める正しい方法は何ですか? 上記のコードはほとんどの場合機能しますが、時々、船が画面から飛び出します。これは iOS ではなく OS X 用です。

4

4 に答える 4

1

このリンクをチェックしてください... iOS7 SKScene スプライトを画面の端から跳ね返す方法は?

[self setPhysicsBody:[SKPhysicsBody bodyWithEdgeLoopFromRect:self.frame]];  //Physics body of Scene

これにより、シーンの端にバリアが設定されます。

編集: Apple のこのサンプル プロジェクトも役立つかもしれません https://developer.apple.com/library/mac/samplecode/SpriteKit_Physics_Collisions/Introduction/Intro.html

于 2014-04-07T00:39:35.617 に答える