2016-12-30 1 views
0

J'essaie de créer un jeu de balle simple en utilisant Canvas et SurfaceView. Je veux déplacer la balle autour de l'écran et pour cela j'ai implémenté onTouchEvent(). Je réussis à déplacer la balle de n'importe où sur l'écran. Mais mon problème est que chaque fois que je touche l'écran et commence à bouger, la balle commence à bouger à partir du point où j'ai touché l'écran.Comment obtenir la position actuelle de l'objet sur la toile dans android

Je veux déplacer la balle de sa position actuelle. Comment puis-je obtenir la position actuelle lorsque je commence à bouger?

Voici mon onTouchEvent()

@Override 
    public boolean onTouchEvent(MotionEvent event) { 

     int updated_x = (int) event.getX(); 

     switch (event.getAction() & MotionEvent.ACTION_MASK) { 
      case MotionEvent.ACTION_UP: 
       System.out.println("Action Up"); 
       break; 

      case MotionEvent.ACTION_DOWN: 

       break; 

      case MotionEvent.ACTION_MOVE: 

       draw(updated_x); 
       System.out.println("Action Move"); 
       break; 
     } 
     return true; 
    } 

Ma méthode draw est:

private void draw(int updatedValue) { 
     canvas = surfaceHolder.lockCanvas(); 
     canvas.drawColor(Color.RED); 
     canvas.drawBitmap(ball.getBitmap(), updatedValue, screenY - ball.getBitmap().getHeight() - 260, paint); 
     surfaceHolder.unlockCanvasAndPost(canvas); 
    } 

et voici mon Ball.java Classe:

public class Ball { 

    private int ball_x, ball_y; 
    private Bitmap bitmap; 
    private int minX, maxX; 

    public Ball(Context context, int screenX, int screenY) { 

     bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.icon_ball); 
     maxX = screenX - bitmap.getHeight(); 
     minX = 0; 

    } 
+0

Vous devez obtenir l'objet '' ball'' courant x et y ... quel est le type de votre objet '' ball''? –

+0

Quelque chose comme '' int previous_x = ballObject.getX(); '' '' previous_x = event.getX() '' –

+0

Je ne comprends pas. Voulez-vous élaborer? – AbhayBohra

Répondre

0

Le problème ici est que updatedValue est l'absolu position. Au lieu de cela, cela devrait être une valeur delta.

public boolean onTouchEvent(MotionEvent event) { 

    int updated_x = (int) event.getX(); 

    switch (event.getAction() & MotionEvent.ACTION_MASK) { 
     case MotionEvent.ACTION_UP: 
      System.out.println("Action Up"); 
      break; 

     case MotionEvent.ACTION_DOWN: 
      mInitial_x = updated_x; 
      break; 

     case MotionEvent.ACTION_MOVE: 
      final int delta_x = mInitial_x - updated_x; 
      draw(delta_x); 
      System.out.println("Action Move"); 
      break; 
    } 
    return true; 
} 

Dans le code ci-dessus, j'ai fait usage d'un champ int mInitial_x de garder une trace de la position initiale que vous avez touché. Basé sur ceci maintenant vous obtenez la valeur delta du changement dans x. Utilisez cette valeur delta dans votre méthode draw() pour modifier le ball_x puis dessiner.

La clé ici n'est pas d'utiliser la valeur ABSOLUTE mais la valeur RELATIVE. J'espère que cela t'aides.

+0

Ce ne fonctionne pas .. la balle disparaît juste .. – AbhayBohra