Autore Topic: Spostare un oggetto sulla SurfaceView  (Letto 891 volte)

Offline Vincenzoz

  • Utente junior
  • **
  • Post: 122
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Moto G
  • Play Store ID:
    Vincenzo Cimino
  • Sistema operativo:
    Windows 7
Spostare un oggetto sulla SurfaceView
« il: 18 Marzo 2014, 18:31:46 CET »
0
Salve, volevo creare una semplice superficie dove far muovere un oggetto progressivamente fino a farlo arrivare dove viene toccato lo schermo. Ma sono riuscito solamente a fare che va sempre nella stessa direzione e si sposta di un determinato numero di pixel ad ogni tocco, questa è una parte di codice che fa' tutto ciò:

Codice (Java): [Seleziona]
@Override
         public boolean onTouchEvent(MotionEvent event) {
                 if (event.getAction() == MotionEvent.ACTION_DOWN) {
                    // deleghiamo la gestione degli eventi al droide
                    droid.handleActionDown((int)event.getX(), (int)event.getY());
                    droid.update();
                   
                    // Verifichiamo se il tocco avviene nella
                    // parte bassa dello schermo per uscire
                    if (event.getY() > getHeight() - 50) {
                      thread.setRunning(false);
                      ((MainActivity)getContext()).finish();
                    } else {
                     Log.d(TAG, "Coords: x=" + event.getX() + ",y=" + event.getY());
                    }
                 }

                 if (event.getAction() == MotionEvent.ACTION_MOVE) {
                    if (droid.isTouched()) {
                      // il droide viene trascinato
                      droid.setX((int)event.getX());
                      droid.setY((int)event.getY());
                    }
                 }

                 if (event.getAction() == MotionEvent.ACTION_UP) {
                    // tocco rilasciato
                    if (droid.isTouched()) {
                      droid.setTouched(false);
                    }
                 }
                 return true;
         }

Ma come posso fare che finché un punto dello schermo è premuto l'oggetto deve continuare ad aggiornare il suo stato e muoversi fino ad arrivare a quel punto?
Grazie mille in anticipo  :D
Vincenzo Cimino @ Google Play Store


Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Spostare un oggetto sulla SurfaceView
« Risposta #1 il: 18 Marzo 2014, 19:14:17 CET »
0
Se ho ben capito, quello che ti serve è l'animazione del movimento dal punto iniziale a quello di arrivo. E un modo un po' grezzo ma semplice di gestirla è nel thread in cui disegni continuamente la surfaceview.

Diciamo che tu conservi in due variabili la posizione corrente dell'oggetto, siano PX,PY. Al momento in cui tocchi lo schermo, estrai le coordinate di destinazione, sano QX,QY. Dentro al thread con loop infinito in cui disegni la SurfaceView, prima di far ripartire il disegno dello schermo, incrementa opportunamente PX,PY per avvicinarti alla posizione finale QX,QY. In un certo numero di frame arriverai a destinazione, generando quindi l'animazione del movimento. Quanto incrementare QX,QY dipende dall'effetto che vuoi ottenere, puoi stabilire di raggiungere linearmente il punto finale in 10 frame e quindi dividerai per dieci le distanze lungo X e Y e incrementerai di quel valore. Oppure usi leggi più sofisticate che abbiano accelerazione e decelerazione.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store