1

私は単純なゲームを行う方法を学んでおり、onTouchListener を実装する MainActivity クラスがあり、次に SurfaceView を拡張して Runnable を実装する GameLoop クラスがあります。GameLoop クラスは、移動するスプライトのマネージャー クラスのような残りのクラスも処理します。キャンバスへの描画は GameLoop クラス内で行われます。

私がする必要があるのは、指先で線を描くことですが、線を描くために onTouchListeners からの値をどのように処理すればよいかわかりません。MainActivity 内に onTouchListener があるとうまくいかないと思います!? そして、Runnable を既に実装しているので、GameLoop クラスには実装できないと思います!?

すでに何か他のものを実装している場合、onTouchListener を GameLoop クラスに実装するにはどうすればよいですか? 複数のインターフェースを実装することはできないと思いますか? 試してみると、Eclipse でエラーが発生します。

4

2 に答える 2

1

Java クラスは1 つのクラスしか拡張できませんが、任意の数のインターフェースを実装できます。クラス宣言で実装するインターフェイス名をコンマで区切るだけです。

public MyClass extends BaseClass implements OnClickListener, OnTouchListener, FooListener

匿名リスナーを使用することもできます。

someView.setOnTouchListener(new OnTouchListener() {

    @Override
    boolean onTouch(View v, MotionEvent event) {
        // do something
    }
});

もう 1 つのオプションは、Activity でonTouchEvent()をオーバーライドし、タッチ イベントを処理するクラスにモーション イベントを渡すことです。

于 2013-04-28T06:47:43.923 に答える
0

指が描画しているビューにリスナーを実装setOnTouchListener()し、リスナー クラスを使用して渡します。MotionEvent渡されたオブジェクトがあることがわかっているので、onTouch()と を使用してそのオブジェクトを利用し、ポインタ (この場合は指) が画面上のどこにあるかを判断する必要がありevent.getX()ますevent.getY()。その機能が必要な場合は、意図的にマルチタッチを処理する必要があることに注意してください。これらはすべてここに文書化されています。

アクティビティにリスナーをアタッチすると、そのMotionEventオブジェクトをビューに渡して有用な情報を抽出し、ビュー オブジェクト内で定義した描画メソッドを呼び出すことができますinvalidate()。これは、すべての描画メソッドをそのビュー クラスに集中させることを前提としています。

または、新しいビューやその他のものを入れて、アクティビティに直接描画することもできます。オブジェクトがある限りMotionEvent、ポインター (指) の座標がわかり、その情報を使用して描画できます。

必要setOnTouchListener()なアクティビティは、そのビューへの比較的永続的な参照を持つか、setContentView().

Java では、同じクラスに複数のインターフェースを実装することはできません。これは Eclipse または ADT の問題ではありません。ただし、それを行いたい場合は、インターフェイスを拡張して新しいものを追加してください。継承を使用すると、文字通り複数のインターフェイスを一緒に追加できます。

于 2013-04-28T20:21:46.240 に答える