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 用です。