IF制御構造を使用する前に、さらにネストされたIFで遭遇したことがない状況に遭遇しました。通常、ネストされたIFは私が細かい細かいディテールでチェックしているものを分解しますが、この例では実際には外側の条件と矛盾します - マウスのクリックを確認しています。ここで条件付き実行の場合
はコードです -
if (mouseState.LeftButton == ButtonState.Pressed)
{
if (mouseState.LeftButton == ButtonState.Released)
{
//move sprite to clicked position
spritePos.X = mouseState.X;
spritePos.Y = mouseState.Y;
}
}
私は質問のカップルを持っています。私は、条件付き引数が1回だけチェックされ、trueと評価された場合、次のステートメントが実行されることを教えられました。 これは本当にですか、ブロック内のすべてのステートメントを実行する前に実際にチェックされていますか? - 後者は明らかに私の入れ子のifと衝突するでしょう。
これが当てはまる場合、なぜ私のボタンクリック方法は機能しませんか? Spriteは、マウスのリリースが決して実行されないかのように動きません。 両方の条件のチェックを実行する間に遅延が小さいので、その時間内に物理的にボタンを放すことができないためですか?私はこれについてちょっとハックすることができますは、時間遅延でそれを克服することができます入れ子条件をチェックするまでにマウスボタンのリリースを許可するために十分な大きさかもしれない?
私が見たマウスクリックアクションのメソッドは、前のフレームからマウスのプロパティを使用し、新しいフレームと比較してマウスクリックを確認します。しかし、この方法では、アクションを実際に処理するために、少なくとも1つのフレームの遅延を導入する必要があります。これはフレームレートの高いものでは目立たないかもしれませんが、議論のために私はゲームを20fpsでレンダリングしました。 UpdateInput()はフレームをレンダリングする前に呼び出され、位置は更新され、フレームは最後にレンダリングされます。
完全なマウスクリック操作が1/20秒未満で実行できる場合は、最初のプレスで変数を保存するのではなく、すぐにアクションを処理し、次のフレーム?これは確かに入力の遅延を導入するよりも良いでしょう。
これは他の人にも考慮されているはずです。実際にコードの実行を一時停止する時間遅延操作については正しく考えていないと思います。 時間遅れは、コードのプロセッサ実行を一時停止することができますか、またはレンダリングや入力を受け付けるなどの実行の結果だけを一時停止できますか?それらは私が使用経験があるものではなく、遅延がどのように働くのか混乱するかもしれません。
ありがとう、 Andrew。
どの言語をプログラミングしていますか、どのAPIを使用していますか。これは実際にmouseState.LeftButtonの評価がmouseStateの状態を変更できる(または更新されるまで待つ)副作用を持つかどうかによって異なります。 –
あなたの質問は技術的な質問よりもエッセイに似ています。焦点が合わずに答えにくいです。それをたくさん下げてください。コードスニペットはあなたのものか、どこかで見つけましたか?それは動作しますか?それがうまくいかない場合、実際には何が起こりますか?何が起こると思いますか?ここにある問題(もしあれば)はif文の評価ではありません。 –
申し訳ありませんが、私はそれが十分に短いと思った。私は、私が考えていたことについて言及しようとしましたが、それは効果があるかもしれません。コードスニペットは私のものです - ちょうどその下に述べたようには機能しません。その結果、任意にアニメーション化されたスプライトが、クリックした場所に表示されるのではなく、動き続けます。それはちょうど入門を学ぶための入門です。言語はXNA 3.1を使用するC#です。 –