1

ボタンを押して離す機能を実装しようとしていますが、理由がわからないという結果が得られません。

public class Button
{
    public TouchLocation oldTouch, currentTouch;

    public virtual void Update(GameTime gameTime)
    {
        TouchCollection touchCollection = TouchPanel.GetState ();

        if (touchCollection.Count > 0) {
            currentTouch = touchCollection [0];

            if (currentTouch.Position.X > position.X && currentTouch.Position.X < position.X + width &&
               currentTouch.Position.Y > position.Y && currentTouch.Position.Y < position.Y + height) {

                if (currentTouch.State == TouchLocationState.Released && oldTouch.State == TouchLocationState.Pressed) {
                    buttonEvent.Invoke (this, new EventArgs ());
                }
            }
        }

        oldTouch = currentTouch;

    }
}

まず、以下のオブジェクトを割り当てます。

currentTouch = touchCollection [0];

私は得る

「型または引数の数が正しくありません」

ローカル デバッグ ウィンドウの値として赤色で表示されます (エラーはなく、赤色のテキスト値のみ)。
ただし、位置チェック IF ステートメントは正しく通過しますが、Pressed/ ReleaseIF ステートメントは通過しません。に置き換えるcurrentTouchtouchCollection[0]、すべてが期待どおりに機能します。
オブジェクトの使用/割り当てがTouchLocation間違っていますか?
それとも、簡単な間違いを見落としているのでしょうか?

4

1 に答える 1

2

私は常にtouchCollection.Last()orのようなものを使用してtouchCollection.First()、 のコンポーネントを 1 つだけ取得しますTouchCollection。とにかく、あなたがそこでしていることにエラーは見られません。

あなたの問題については、あなただけではできないと思います

oldTouch.State == TouchLocationState.Pressed

ただし、次を確認する必要があります。

oldTouch.State == TouchLocationState.Pressed || oldTouch.State == TouchLocationState.Moved

最後のタッチが XNA によってどのように検出されたかがわからないためです。

Rectangle提案として、ボタンのコライダーに s を使用しないのはなぜですか? このようにして、次のように簡単に呼び出すことができます。

Rectangle.Contains(new Point(int)currentTouch.Position.X, (int)currentTouch.Position.Y))

ifそのステートメントを行う代わりに。

于 2013-10-27T19:19:41.400 に答える