Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Xna far saltare un personaggio
Forum - C# / VB.NET - Xna far saltare un personaggio

Avatar
Premoli (Normal User)
Pro


Messaggi: 108
Iscritto: 25/06/2009

Segnala al moderatore
Postato alle 21:17
Giovedì, 28/07/2011
Ciao a tutti!!!

Da poco mi sono messo a studiare XNA per esercitarmi stavo provando a creare qualcosa...

Ora sono riuscito a far saltare il mio sprite questa è la funzione che ho scritto:

Codice sorgente - presumibilmente C++

  1. public void Salta(int altezza)
  2.         {
  3.             if (posizione.Y < altezza - grandezzaFrame.Y)
  4.             {
  5.                 gravita = 0.5f;
  6.                 incrementoY += gravita;
  7.                 posizione.Y += incrementoY;
  8.             }
  9.             else
  10.             {
  11.                 gravita = 0;
  12.                 incrementoY = 0;
  13.             }
  14.         }



il personaggio principale è una palla che faccio rimbalzare di continuo quindi non ho bisogno di verificare se il giocatore preme un qualche tipo di tasto per "avviare il salto" quindi nel metodo update per far saltare la palla faccio una cosa del genere
Codice sorgente - presumibilmente Plain Text

  1. ...
  2. posizione.Y-=10;
  3. Salta(grandezzaSchermo.Y);
  4. ...



in questo modo riesco ad ottenere il risultato desiderato, tuttavia ora vorrei capire come fare ad individuare quando la palla è nella fase ascendente del salto e quando è nella fase discendente, questo mi serve perché voglio aggiungere delle piattaforme su cui la palla dovrà saltare però se lasco il codice che vi ho mostrato se ci sono due piattaforme troppo vicine succede che la palla compie il secondo salto senza completare il primo...

Grazie a tutti anticipatamente e spero di essermi spiegato ;)

Ultima modifica effettuata da Premoli il 28/07/2011 alle 21:18
PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 10:22
Venerdì, 29/07/2011
Il tuo codice è fisicamente sbagliato, poiché incrementi la posizione (px) di un'accelerazione (px/s^2), che non è una grandezza omogenea. E' più corretto usare:
Codice sorgente - presumibilmente Plain Text

  1. position += velocity * gameTime.ElapsedGameTime.TotalSeconds
  2. velocity += acceleration * gameTime.ElapsedGameTime.TotalSeconds


dove position, velocity e acceleration sono dei Vector2. In questo modo puoi permetterti di cambiare la direzione della gravità, oltre alla sua magnitudine.
In più, se usi la variabile velocità puoi facilmente determinare se la pallina sta andando in su o in giù semplicemente controllandone la componente Y, o ancora meglio, puoi controllare se la velocità è concorde o discorde con l'accelerazione usando un prodotto scalare (Vector2.Dot).
Codice sorgente - presumibilmente C# / VB.NET

  1. if (Vector2.Dot(player.Velocity, player.Acceleration) > 0)
  2.    // la palla sta "scendendo"



@arack: no, non mi sono dimenticato l'accelerazione. Tuttavia quello che ho scritto è corretto e non è altro che la discretizzazione approssimata su un delta di tempo finito degli integrali della velocità e dello spostamento.

Ultima modifica effettuata da Il Totem il 02/08/2011 alle 21:07


"Infelici sono quelli che hanno tanto cervello da vedere la loro stupidità."
(Fligende Blatter)

"Dubitare di se stessi è il primo segno d'intelligenza."
(Ugo Ojetti)
PM Quote