2012-02-16 2 views
0

저는 Android 플랫폼에서 새로 개발되었지만 일반적으로 프로그래밍이 아니기 때문에 매우 간단한 게임을 만듭니다. 어쨌든, 에뮬레이터를 통해 또는 때로는 실제 장치를 통해 앱을 실행하면 화면에 공을 포함하여 그려지는 두 개의 패들과 화면을 터치하거나 마우스로 감동하여 시뮬레이션하는 것이 보입니다. 이벤트 onTouch는 해고되지 않습니다. 내가 왜 올바른 방향으로 나를 가리킬 수 있는지, 나는 안드로이드 장치를 개발하는 것에 익숙하지 않다.내 첫 번째 안드로이드 게임이 터치 입력에 응답하지 않습니다.

코드 :

package main.game; 
import android.content.Context; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Paint; 
import android.view.*; 
public class DrawingArea extends SurfaceView 
{ 
    private Ball ball = null; 
    private Paddle player = null; 
    private Paddle computer = null; 
    private Vector2 playerPos = Vector2.Zero; 
    private boolean startGame = false; 
    private boolean initiated = false; 
    private Paint paint; 
    public DrawingArea(Context context, Paint paint) { 
     super(context); 
     setOnTouchListener(new Touch()); 
     setWillNotDraw(false); 
     this.paint = paint; 


    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     canvas.drawColor(Color.BLUE); 
     if (initiated == false) 
     { 
      ball = new Ball(getWidth()/2.0f, getHeight()/2.0f, 32, paint); 
      player = new Paddle(playerPos.getX(), playerPos.getY(), 32, 128, paint); 
      Paint p = new Paint(); 
      p.set(paint); 
      p.setColor(Color.GREEN); 
      computer = new Paddle(getWidth() - 32, 0, 32, 128, p); 
      GameLoop gloop = new GameLoop(this); 
      gloop.start(); 
      UpdateLoop uloop = new UpdateLoop(this); 
      uloop.start(); 
      initiated = true; 
     } 
     ball.draw(canvas); 
     player.draw(canvas); 
     computer.draw(canvas); 

    } 
    class GameLoop extends Thread 
    { 
     private DrawingArea area; 
     private boolean running = true; 
     public GameLoop(DrawingArea area) 
     { 
      this.area = area; 
     } 
     @Override 
     public void run() { 
      int frame = 0; 
      while(running) 
      { 

       this.area.invalidate(); 
       if(frame == Integer.MAX_VALUE) { frame = 0;} 
       frame++; 
      } 


     } 
     public void closeThread() 
     { 
      running = false; 
     } 

    } 
    class Touch implements View.OnTouchListener 
    { 

     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      startGame = true; 
      playerPos = new Vector2(0, event.getY()); 
      if (playerPos.getY() < (player.getY() + 256)) 
      { 
       player.translateY(-0.5f); 
      } 
      else if (playerPos.getY() > (player.getY() + 256)) 
      { 
       player.translateY(0.5f); 
      } 
      return true; 
     } 

    } 
    class UpdateLoop extends Thread 
    { 
     private DrawingArea area; 
     private boolean running = true; 
     private boolean forward = true; 
     public UpdateLoop(DrawingArea area) 
     { 
      this.area = area; 
     } 
     @Override 
     public void run() { 
      int frame = 0; 
      while(running) 
      { 


       if (startGame == true) 
       ball.translate(0.5f, 0.5f, 45.0f, forward); 
       if (ball.getX() < 0 || ball.getY() < 0 || ball.getX() > area.getWidth()|| ball.getY() > area.getHeight()|| ball.Intersects(computer) || ball.Intersects(player)) 
       { 
        if(forward == true) 
        forward = false; 
        else 
        forward = true; 
       } 
       if(frame == Integer.MAX_VALUE) { frame = 0;} 
       frame++; 
      } 
     } 
    } 

} 

업데이트 :

   DrawingArea area = new DrawingArea(this, paint); 
      setContentView(R.layout.main); 
      LinearLayout main = (LinearLayout)findViewById(R.id.main); 
      main.addView(area, LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT); 
      main.setOnTouchListener(this); 
+0

모바일 응용 프로그램을 사용해 보셨습니까? 앱이 터치에 응답하고 있습니까? –

+0

휴대 전화로 무엇을 의미합니까? 실제 장치에서 시험 해보려는 뜻이라면 시도해 보았지만 여전히 반응하지 않습니다. –

답변

0

대신에 리스너를 등록하는

setOnTouchListener(new Touch()); 

뷰의 레이아웃에 수신기를 부착하십시오 서피스 뷰 SurfaceView하기 에스 이같은 내용이 없습니다

@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.yourlayout); 

    //the whole screen becomes sensitive to touch 
    mLinearLayoutMain = (LinearLayout) findViewById(R.id.layout_main); 
    mLinearLayoutMain.setOnTouchListener(this); 
} 
+0

나는 당신이 한 일을했고 그 사건은 여전히 ​​발화하지 않습니다. –

+0

당신이 한 일을 게시 할 수 있습니까? –

+0

변경 사항을 게시했습니다. –

관련 문제