2017-11-04 5 views
1

私はハウススプライトとキャラクタースプライトを持っています。私は私のキャラクターが家スプライトとすべての将来の家スプライトを "通過"しないようにします。では、ハウススプライトをリストに追加してhouse_sprites内のすべてのハウスに対して、文字スプライトが通過できないようにするにはどうすればよいですか?あるいは、私のキャラクターが1で1の衝突をプログラミングせずに複数のスプライトを「通過」しないようにする他の方法がある場合は、私はxcodeでC++とsfmlを使用しています。私は、ゲーム内のすべての「ソリッド」スプライトに以下のコードを書いてはいけません。だから、もし私がそれを「ソリッド」にしたいのであれば、スプライトをリストに追加するにはどうすればいいですか? SFMLは自動的に衝突を扱うdoesntの `sfmlスプライトのリストを作成し、forループを使用してそれらを「ソリッド」にする方法

if(sprite.getGlobalBounds().intersects(EnterHouse.getGlobalBounds())) 
    { 

     if (GoingLeft == true) 
     { 
      x_pos = x_pos + speed; 
      x = x + speed; 
     } 
     if(GoingDown == true) 
     { 
      y_pos = y_pos - speed; 
      y = y - speed; 
     } 
     if(GoingRight == true) 
     { 

      x_pos = x_pos - speed; 
      x = x - speed; 
     } 
     if(GoingUp == true and y > 2530) 
     { 
      y_pos = y_pos + speed; 
      y = y + speed; 
     } 
     if(GoingUp == true and x_pos < 20230) 
     { 
      x_pos = x_pos - speed; 
      x = x - speed; 
     } 
     if(GoingUp == true and x_pos > 20230) 
     { 
      x_pos = x_pos + speed; 
      x = x + speed; 
     } 
     if(GoingDown == true and x_pos < 20230) 
     { 
      x_pos = x_pos - speed; 
      x = x - speed; 
     } 
     if(GoingDown == true and x_pos > 20230) 
     { 
      x_pos = x_pos + speed; 
      x = x + speed; 
     }` 
+0

あなたの質問は、リストに追加することとは関係ありません。それが解決策に関するあなたの前提でした。実際の問題に焦点を当ててください。私はそれが簡単なことではないことを知っています。特にあなたが他のところであなたの考えを持っているときは特にそうですが、本当に - あなたが質問を書いた後に戻ってタイトルを再考するのに一瞬を費やすなら、 "複数のスプライトを通過する"はコアであり、 "リストに追加する"ではありません:) – quetzalcoatl

+0

私の答えがあなたに明確になったと思うなら、それを受け入れてください。 –

答えて

3

、それはシンプルかつ高速なマルチメディアライブラリです。自分で衝突を実装するか、Box2Dなどの別のライブラリを使用する必要があります。 canGoUpcanGoDowncanGoLeftcanGoRight: は4 bools、各方向に1つを持っている:まあ、あなたの編集を考慮し

0

、次の操作を行うことができます。

デフォルトではfalseに設定します。 は今、あなたはあなたが衝突をチェックしたいスプライトのリストを反復処理するループを作り、そしてあなたの衝突チェックを行います。あなただけのスプライトの動きを確認する必要があり、(擬似C++)

for (every collidableSprite) 
if(sprite.getGlobalBounds().intersects(collidableSprite.getGlobalBounds())) { 
(...) // Set the direction bools to true or false, depending on the direction of the house relative to the sprite 
} 

をその後、何かこの行に沿って:

if (wantsToGoLeft && canGoLeft) { 
// Move sprite to the left 
} 
else if (...) 

あなたは行っています。今すぐリストに必要な別の家を追加したい場合は、手順1で繰り返します。

+0

しかし、私はどのようにそのリストを作るのですか? – DapperDaniel

+0

どのようにリストを作成しますか?あなたはスプライトの 'std :: list'を持つことができます。スプライトを追加するには' push_back'を使い、スプライトを削除するには 'remove'を使います。 –

+0

私たちがあなたのためにすべての仕事をするとは思わないでください。 –

関連する問題