2016-06-30 10 views
1

私は現在ゲームを試しています。 Doodle JumpやMarioのようなゲームのような浮動小数点型の「フロア」や「プラットフォーム」を作りたいと思っています。私は現在、線画像を持つSKSpriteNodesをテクスチャとして持っています。私は最初にSKPhysicsBodyを四角形に設定しましたが、衝突するとラインやフロアがメインスプライトの動きを乱してしまいます。私は "フロア"にあなたがそれらの上に着陸できるプロパティを持っていることを望みます。また、フロアの下にいる場合は、それを飛び越えてその上に着陸できるようにしたいと思います。Swift:ゲームにフロアを追加するには?

func addLines(){ 

    var lineTexture = SKTexture (imageNamed: "redline.png"); 
    var lineMovement = SKAction.moveByX(-self.frame.size.width * 2, y: 0, duration: Double(self.frame.size.width/100)); 
    line = SKSpriteNode (texture: lineTexture); 


    line.position = CGPointMake (CGRectGetMidX (self.frame) + self.frame.size.width/3, CGFloat(random()) % (self.frame.size.height - 30)); 

    //line.physicsBody = SKPhysicsBody (rectangleOfSize: CGSizeMake (lineTexture.size().width, lineTexture.size().height)); 
    //line.physicsBody!.dynamic = false; 

    line.runAction (lineMovement); 
    self.addChild (line); 

} 

答えて

-1

可能な方法の1つは、ゲーム中のプレーヤーの位置を検出することです。プレーヤーの位置がフローティングフロアの下にある場合は、 "ダミー"フロア(イメージスプライトのみですが、物理ボディはありません)があります。プレーヤーの位置が床の上になると、床にはすぐに物理的なボディがあります。

詳細な実装は異なる場合があります。たとえば、boolを格納して、床に物理的なボディがあるかどうかを判断できます。

0

スプライトの状態に応じて、collissionBitMaskを動的に変更する必要があります。これを行う最善の方法は、お使いのプラットフォームに特化したcontactBitMaskフラグを設定することです。

あなたのスプライトがあなたのプラットフォームに接触すると、そのプラットフォームがスプライトの下にあるかどうかを評価します。プラットフォームがスプライトの下にある場合は、プラットフォームにcollissionBitMaskフラグを有効にしてください。それ以外の場合はフラグを削除してください。

プラットフォーム上でこれを行うことができるはずです。プラットフォームはスプライトの位置に応じてスプライトによるコリジョンを有効/無効にする必要がありますが、スプライト上でコリジョンビットマスクを使用するべきではありません。スプライト上で有効にすると2つのプラットフォームを縦に並べる。

関連する問題