Ho scritto una semplice applicazione java che ti permette di trascinare il mouse e in base alla lunghezza del trascinamento del mouse che hai fatto, sparerà una palla in quella direzione, rimbalzando contro i muri.Come applico la gravità alla mia applicazione di palla rimbalzante?
ecco un breve screenshot:
alt text http://img222.imageshack.us/img222/3179/ballbouncemf9.png
Ognuno dei cerchi sullo schermo è un oggetto Ball. Il movimento delle palle è suddiviso in un vettore xey;
public class Ball {
public int xPos;
public int yPos;
public int xVector;
public int yVector;
public Ball(int xPos, int yPos, int xVector, int yVector) {
this.xPos = xPos;
this.yPos = yPos;
this.xVector = xVector;
this.yVector = yVector;
}
public void step()
{
posX += xVector;
posY += yVector;
checkCollisions();
}
public void checkCollisions()
{
// Check if we have collided with a wall
// If we have, take the negative of the appropriate vector
// Depending on which wall you hit
}
public void draw()
{
// draw our circle at it's position
}
}
Questo funziona benissimo. Tutte le palle rimbalzano intorno e intorno da una parete all'altra.
Tuttavia, ho deciso che voglio essere in grado di includere gli effetti della gravità. So che gli oggetti accelera verso terra a 9,8 m/s, ma non so direttamente come questo dovrebbe tradursi in codice. Mi rendo conto che yVector sarà interessato, ma la mia sperimentazione non ha avuto l'effetto desiderato che volevo.
Idealmente, Vorrei poter aggiungere un po 'di effetto di gravità a questo programma e anche consentire alle sfere di rimbalzare un paio di volte prima di stabilirsi nel "terreno".
Come è possibile creare questo effetto elastico di gravità rimbalzante? Come devo manipolare i vettori di velocità della palla su ogni passo? Cosa deve essere fatto quando colpisce il "terreno" in modo che possa permettergli di rimbalzare di nuovo, ma in qualche modo più breve rispetto alla volta precedente?
Qualsiasi aiuto è apprezzato nel indicarmi la giusta direzione.
Grazie per i commenti a tutti! Sta già funzionando alla grande!
nel mio passo() sto aggiungendo un peso costante per il mio yVector come le persone suggerite e questo è il mio checkCollision():
public void checkCollision()
{
if (posX - radius < 0) // Left Wall?
{
posX = radius; // Place ball against edge
xVector = -(xVector * friction);
}
else if (posX + radius > rightBound) // Right Wall?
{
posX = rightBound - radius; // Place ball against edge
xVector = -(xVector * friction);
}
// Same for posY and yVector here.
}
Tuttavia, le palle continueranno a scivolare/rotolo sul pavimento . Presumo questo perché sto semplicemente prendendo una percentuale (90%) dei loro vettori ogni rimbalzo e non è mai veramente zero. Dovrei aggiungere un controllo che se xVector diventa un certo valore assoluto, dovrei semplicemente cambiarlo a zero?
Cosa succede se si capovolge il monitor? – BenAlabaster
Commento molto valido in questi giorni con l'iPhone e tutto ... –
Potresti postare il tuo codice di fine come FYI per favore? – JamesSugrue