Fare muovere due immagini a velocità diverse in Java?

3

Sto creando un gioco di base di invasori spaziali. Sto usando una discussione per animare il gioco e mi stavo chiedendo, come faccio ad ottenere che gli alieni aumentino la velocità andando a destra e sinistra senza cambiare la velocità della nave che controlli sotto di loro?

Qual è il metodo più semplice? Sono abbastanza nuovo in Java 2d e ho creato solo altri due giochi di base.

    
posta Michael Haywood 17.09.2012 - 08:52
fonte

4 risposte

5

Prima di tutto invece di usare un thread consiglio di guardare rendering attivo . Articolo di rendering attivo risorsa Oracle (Sun) sull'argomento

Active rendering (Figure 2) is just the opposite. Instead of letting someone else decide when to paint, the program constantly repaints the screen in a very tight while loop. While this sort of behavior is not recommended for regular applications, it is exactly the kind of control needed to make computer games.

La differenza principale rispetto al rendering normale è che non si aspetta che venga chiamato il paintXYZ (), ma si ridisegna intenzionalmente lo schermo il più velocemente possibile (FPS) per un'esperienza di gioco fluida.

Quindi imposti diversi spee orizzontali e verticali per i tuoi personaggi. E ogni volta che un nuovo "fotogramma" calcia nel tuo gioco, gli oggetti verranno spostati con la distanza dei pixel progettata.

    
risposta data 17.09.2012 - 09:00
fonte
0

La frequenza dei fotogrammi non dovrebbe essere legata al contenuto del fotogramma e la traiettoria di ciascun oggetto nel tempo dovrebbe essere indipendente. Quando prepari un frame che rappresenta il tempo "x", ogni oggetto in movimento ha la sua posizione.

    
risposta data 17.09.2012 - 20:41
fonte
0

L'idea di base quando si esegue questa operazione è assegnare a ciascun oggetto una proprietà Speed e quindi disporre di una variabile timer.

Per ogni frame, durante il rendering:

  • Calcola il periodo di tempo da quando hai iniziato a eseguire il rendering dell'ultimo fotogramma, in millisecondi. Chiama questo Delta .
  • Aggiorna il timer con il timestamp corrente.
  • Per ogni oggetto, usa Delta e la proprietà Speed dell'oggetto per determinare la sua nuova posizione.
  • Rendi tutti gli oggetti nella posizione corretta.

Si noti che in questo modello la velocità di movimento è legata al tempo trascorso e non al rendering stesso. In questo modo, se la frequenza dei fotogrammi aumenta o diminuisce per qualsiasi motivo, le cose continuano a muoversi a un ritmo costante.

    
risposta data 17.09.2012 - 20:49
fonte

Leggi altre domande sui tag