0

助けが必要です。学校のプロジェクトとして Android ゲームを作成しようとしています。ほくろをぶつけるために ontouchListener を使ってみます。

主な活動

public class First_Stage extends Activity implements OnTouchListener{

private AllViews allViews;
private MoleView moleView;
private PointsView pointsView;
private TimerView timerView;
private StageView stageView;
private Mole mole; 
private MoveMole moleMove;
private int points=0;
private StagePoints stagePoints;
private PointsSingelton poin;
private float x,y;


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);

    mole=new Mole();
    stageView=new StageView(this);
    moleView=new MoleView(this,mole,x,y);
    pointsView=new PointsView(this);
    timerView=new TimerView(this, "3:33");

    allViews=new AllViews(this);
    allViews.setViews(stageView, moleView, pointsView, timerView);

    setContentView(allViews);
    allViews.setOnTouchListener((View.OnTouchListener)this);

}

@Override
public boolean onTouch(View v, MotionEvent event) {
    x=event.getX();
    y=event.getY();

    return true;
}

すべてのビュー クラス

public class AllViews extends SurfaceView implements SurfaceHolder.Callback, Runnable{

private MoleView moleView;
private PointsView pointsView;
private TimerView timerView;
private StageView mainView;
private float x,y;
private Paint test;
private First_Stage first;
Thread drawThread = new Thread(this);
SurfaceHolder holder;


public AllViews(Context context) {
    super(context);
    test=new Paint();
    first=new First_Stage();
    holder= getHolder();
    holder.addCallback(this);
}


public void setViews(StageView mainView, MoleView moleView, PointsView pointsView,TimerView timerView)

{
    this.mainView = mainView;
    this.moleView = moleView;
    this.pointsView = pointsView;
    this.timerView = timerView;

}
@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    mainView.onDraw(canvas);    
    moleView.onDraw(canvas);
    pointsView.onDraw(canvas);
    timerView.onDraw(canvas);
    test.setColor(Color.BLUE);
    canvas.drawCircle(first.getX(), first.getY(), 40, test);

}



@Override
public void run() {
     Canvas c;
        while (true) {
            c = null;

            try {
                c = holder.lockCanvas(null);

                synchronized (holder) {
                    onDraw(c);

                }
            } finally {

                if (c != null) {
                    holder.unlockCanvasAndPost(c);
                }

            }
        }                   
}


@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
        int height) {
    // TODO Auto-generated method stub

}


@Override
public void surfaceCreated(SurfaceHolder holder) {
    drawThread.start();     

}

ほくろ、ポイント、時間、ステージ画面にもクラスがあります。しかし、どのビューで ontouchlistener を作成すればよいかわかりません。試しに、青い円を作成し、リスナーイベントからの新しい位置で場所を変更しようとしましたが、不足はありませんでした。

どんな助けでも素晴らしいでしょう。ありがとう、

cfir。

4

3 に答える 3

1

onTouchListener は AllViews クラスに実装する必要があります。これを他のビューに実装すると、特定のビューの左/上に対する位置が取得されるためです。

AllViews の onDraw で、残りのオブジェクトを描画できます

于 2012-10-13T22:08:25.563 に答える
1

AllViewsタッチから情報を受け取ったことを知らせる必要があるようです。

でいくつかのプロパティを作成できますAllViews

private int touchX;
private int touchY;

public void setTouchX(int x) { this.touchX = x; }

public void setTouchY(int y) { this.touchY = y; }

次に、メソッドでステートメントonTouchの前に次の行を追加します。return

AllViews.setTouchX(x);
AllViews.setTouchY(y);

そして最後に、あなたのonDraw方法で、変更します

canvas.drawCircle(first.getX(), first.getY(), 40, test);

canvas.drawCircle(this.touchX, this.touchY, 40, test);
于 2012-10-13T22:22:12.800 に答える
1

どのビューを作成するかonTouchListenerはあなた次第ですが、それonTouchListenerは実装する必要があるインターフェースです。そして、実装すると、適切なメソッドが必要になります。この場合はonTouch(). ドキュメントを見てみましょう

于 2012-10-13T22:09:47.103 に答える