2013-03-19 3 views
0

Я пытался найти лучший способ просто переместить прямоугольник вниз от верхней части экрана в android, потому что я пытаюсь сделать клон tetris, но я не могу понять, почему андроид не любит таймеры. Итак, если вы, ребята, могли бы помочь мне разобраться, как лучше всего переместить этот прямоугольник сверху вниз, это было бы ужасноПеремещение фигуры в Android

В этом коде я создал экран игры, где появляется прямоугольник, но когда я пытаюсь переместить его с помощью таймера он не работает

package 
com.example.coloroblind; 

import java.util.Timer; 

import android.app.Activity; 
import android.content.Context; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Paint; 
import android.graphics.RectF; 
import android.net.wifi.p2p.WifiP2pManager.ActionListener; 
import android.os.Bundle; 
import android.view.View; 

public class GameView extends Activity { 

    int x=20,y=20,changeX=2,changeY=2; 
    boolean reverseX=false,reverseY=false; 

    @Override public void onCreate(Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); 
     //setContentView(R.layout.game); 
     setContentView(new DrawView(this)); 
    } 

    public class DrawView extends View{ 

     public DrawView(Context context){ 
      super(context); 


     } 
     Timer timer = new Timer(10,new TimerListener()); 
     timer.start(); 


    @Override public void onDraw(Canvas canvas){ 
     super.onDraw(canvas); 

     //fill the screen with white 
     Paint paint = new Paint(); 
     paint.setAntiAlias(true); 
     canvas.drawColor(Color.WHITE); 

     //draw a rect 
     paint.setColor(Color.GREEN); 

     RectF rect = new RectF(x,y,50,50); 

     canvas.drawRoundRect(rect, 6, 6, paint); 

     int start = ((int)Math.random())*4; 



     x+=changeX; 
     y+=changeY; 
     if(y>getHeight()){ 
     changeY=-1*changeY; 
     reverseY=true; 
     } 
     if((reverseY==true)&&(y<0)){ 
     reverseY=false; 
     changeY=-1*changeY; 
     } 
     if(x>getWidth()){ 
     changeX=-1*(changeX); 
     reverseX=true; 
     } 
     if((reverseX==true)&&(x<0)){ 
     changeX=-1*(changeX); 
     reverseX=false; 
     } 

    } 
     class TimerListener implements ActionListener{ 
      public void actionPerformed(ActionEvent e){ 
      repaint(); 

      } 

     @Override 
     public void onFailure(int arg0) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void onSuccess() { 
      // TODO Auto-generated method stub 

     } 

     } 

} 
} 
+0

изменения х и у вашего таймера и вызвать Invalidate() после внесения изменений. – Raghunandan

ответ

0

То, как вы используете Таймер, не применимо для Android. Там нет такой конструктор, как Timer(10,new TimerListener())

Самый быстрый способ использования таймера в следующей сниппета:

Timer t = new Timer(); 
t.schedule(new TimerTask() { 
    @Override 
    public void run() { 

    } 
}, _delay, _period); 
+0

, так как я могу реализовать это, потому что я попытался ввести это право после супер (контекста) в DrawView и им не видя моего квадратного перемещения, и я не знаю, что я делаю неправильно. – user1917755

+0

Вы должны поместить код таймера внутри конструктора. Таймер должен менять координаты со временем. В вашем onDraw() вы рисуете объекты с координатами, установленными в таймере. – Krypton

+0

В моем таймере у меня он установлен как Таймер t = новый таймер(); \t \t \t \t t.schedule (новый TimerTask() { \t \t @Override \t \t общественного недействительными запуска() { \t \t \t \t \t } \t \t}, 10,3); это в конструкторе GameView и im рисовать прямоугольник, поэтому у меня есть RetF rect = new RectF (20,20,50,50); так что вы говорите, что я должен изменить прямоугольник как RectF rect = new RectF (10,3,50,50), подобный этому ??? – user1917755

Смежные вопросы