2011-12-24 14 views
0

ゲームのプラットフォームタイプを作っています。 Rectangleクラスとプラットフォームを使用して、私の主人公を長方形にしました。プラットホームは画面上で常に上向きに動いていて、キャラクターがプラットホームの上に衝突すると、彼はプラットホームと同じ速度で着陸し、動かさなければなりません。私は落ちる部分を除いてすべてを働かせました。私が落下を止めれば、それはプラットフォーム上にとどまることはありませんが、転倒するとうまくいきます。基本的にキャラクターは、プラットフォーム上に着地しない限り、全時間落ちていると仮定し、そのy方向/速度はプラットフォームの速度に変えなければなりません。xnaの落下と衝突

ここにコードの一部がありますが、プラットフォームと衝突しないときに文字を落とさせる方法についてのヘルプは素晴らしいでしょう。私が知りたいと思うよりよい方法があれば、私がしていることがこれを行う最も効果的な方法ではないかもしれないことは分かっています。私は、XNAに新しいんだけど、私は、java/C#の

  Rectangle playerRec = new Rectangle((int)player.position.X, (int)player.position.Y,player.width, player.height); 
     foreach (Platforms platform in platforms) 
     { 
      Rectangle platformRec = new Rectangle((int)platform.position.X, (int)platform.position.Y, platform.width, platform.height); 
      if ((playerRec.Intersects(platformRec) && (playerRec.Y + playerRec.Height) - platformSpeed < platformRec.Y) && 
       (playerRec.X < platformRec.X + platformRec.Width && playerRec.X + playerRec.Width > platformRec.X)) 
      { 
       gravity = 0; 
       player.position.Y -= platformSpeed; 

      } 
      else if(player.position.Y != platform.position.Y) 
      { 
       gravity = 5; 
       //player.position.Y += gravity; 
      } 

答えて

3

あなたの問題は、あなたが交差点を打ったときにループを抜け出していない可能性が最も高いことを知っています。あなたは毎回すべてのプラットフォームをループしていますので、交差すると重力は0になりますが、次のものをチェックして重力が再び5になることを推測します。

あなたはループを再構築する必要があると思いますか、あなたはあなたのためにこのようなものの大部分を処理するために、この2D物理エンジンをチェックアウトすることができます:

http://farseerphysics.codeplex.com/

+0

ありがとうございます!私はそれを逃したとは信じられません。私はループを修復し、すべてを修正しました。私は物理エンジンを使うつもりでしたが、これは非常に単純なゲームであり、実際にはもっと実用的です。 – user566417

0

Microsoftがで落下し、コリソンたPlatformer sampleを持っています。これは学ぶべき素晴らしいサンプルであり、あなたのためにこれを行うためにサードパーティの物理エンジンは必要ありません。