2012-10-13 61 views
0

需要幫助,我打算爲我的學校製作一款安卓遊戲作爲項目。 我嘗試使用ontouchListener爲了碰撞痣。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。

回答

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); 
+0

謝謝,很棒:) – cfircoo

1

onTouchListener應該在AllViews類中實現,因爲如果你在其他視圖中實現它,你會得到相對於特定視圖左/頂的位置。

在AllViews的的onDraw

,你可以畫其餘的對象

1

在其中查看你想的onTouchListener是給你的,而是onTouchListener是需要實現的接口。實施時,您需要正確的方法,在這種情況下,我相信它是onTouch()。看看documentation