Oppure

Loading
28/07/11 19:17
Premoli
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:

public void Salta(int altezza)
        {
            if (posizione.Y < altezza - grandezzaFrame.Y)
            {
                gravita = 0.5f;
                incrementoY += gravita;
                posizione.Y += incrementoY;
            }
            else
            {
                gravita = 0;
                incrementoY = 0;
            }
        }


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
...
posizione.Y-=10;
Salta(grandezzaSchermo.Y);
...


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 28/07/11 19:18
aaa
29/07/11 8:22
Il Totem
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:
position += velocity * gameTime.ElapsedGameTime.TotalSeconds
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).
if (Vector2.Dot(player.Velocity, player.Acceleration) > 0)
   // 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 02/08/11 19:07
aaa