PDA

View Full Version : [C#]Xna 2d: devo riuscire a calcolare un movimento (credo basti la logica)


Mattyfog
20-07-2009, 22:19
Ciao raga,
volevo provare a fare un giochino 2d con xna 3 e il c#!
Solo che ho un problemuccio magari anche + facile di quanto sembri... In mate sono bravo ma faccio ancora prima superiore e mi dovrei scervellare un po' (cosa che comunque proverò a fare ma anche nel caso riuscissi guarderò le vostre idee)!
Allora... Ho uno sprite nel mio caso una astronave e vorrei che la sua punta fosse rivolta verso la posizione (in quanto nel gioco non si vedrà il cursore) del mouse. Non so se ci sia qualcosa di già pronto ma nel caso contrario ho il necessario per agire da me: mi serve solo un po' di logica.
Lo sprite ha 3 valori (se così posso chiamarli) che ci interessano: la posizione che fa riferimento appunto alla posizione in cui si trova, l'origine che è un punto dello sprite (stabilito dal programmatore e che nel mio caso è il centro dello sprite) al quale si riferisce la posizione: voglio dire che la posizione dello sprite indica la sua origine (se non capite guardate qua); infine la rotazione misura con quei valori strani che non mi ricordo, sono floato scritti tipo questo 0.0f
Esempio per chiarire meglio origine e posizione:
http://i.msdn.microsoft.com/Bb203919.screenspace2(en-US,XNAGameStudio.10).png
qui l'origine è quella in centro allo sprite e corrisponde a 25, 25 (pixel dello sprite mentre la posizione è 425, 225 ed indica sempre lo stesso punto dell'origine ma in riferimento all'intero schermo)

Abbiamo ancora poi le coordinate del mouse.
Come faccio a capire che valore assegnare alla rotazione dello sprite? Considerate che non so neppure quanto valgano quei valori tipo 0.0f e quindi non co neppure quanto corrisponde a 360°...
Ogni aiuto è gradito ;)

Mattyfog
20-07-2009, 23:28
mi è venuta un'idea ma per realizzarla ho bisogno di sapere una cosa... In un triangolo rettangolo si può calcolare l'ampiezza dei due angoli sull'ipotenusa conoscendo la lunghezza dei cateti?
oppure + semplicemente non c'è una funzione che faccia già al caso mio?

banryu79
21-07-2009, 09:28
Considerate che non so neppure quanto valgano quei valori tipo 0.0f e quindi non so neppure quanto corrisponde a 360°...
Ogni aiuto è gradito ;)

360° = 2 PiGreco
180° = PiGreco
90° = PiGreco/2
45° = PiGreco/4
In ogni caso le conoscenze che ti servono sono quelle della trigonometria ;)
In genere, nella libreria standard di ogni linguaggio c'è un "pacchetto matematico" di base che mette a disposizione le funzioni trigonometriche e, tra le costanti, c'è sicuramente già definita quella per PiGreco.

Inoltre, il sistema di riferimento per le coordinate del sistema grafico di solito di default è orientato, come avrai già visto, con l'origine mappata in alto a sinistra, l'asse delle X positivo cresce a destra, quello delle Y positive cresce verso il basso.
Gli angoli crescono in senso orario, partendo dall'angolo 0, coincidente con l'asse positivo delle X.
Gli angoli si misurano in radianti (e di solito le funzioni trigonometriche lavorano con i radianti; la libreria standard mette a disposizione funzioni apposite per la conversione da gradi sessagesimali a gradi radianti e viceversa).

Mattyfog
21-07-2009, 09:57
Sia il triangolo formato dai cateti a,b e alfa l'angolo formato da c e a.

tan(alfa) = b/a

la tangente è invertibile tra 0 e pigreco...

e poi naturalmente alfa + beta = pigreco/2

queste due frasi non le ho capite...
riguardo ciò che invece c'è scritto in alto mi restituisce direttamente il valore come 0.0f? (come si chiamano sti maledetti valori???)

banryu79
21-07-2009, 10:22
queste due frasi non le ho capite...
riguardo ciò che invece c'è scritto in alto mi restituisce direttamente il valore come 0.0f? (come si chiamano sti maledetti valori???)
Si chiamano valori float (da cui la 'f' posta dopo il valore letterale).
Sono dati a virgola mobile, a precisione singola, hanno dei fratelli: i double, che sono anche loro dati a virgola mobile, ma a precisione doppia.

Per curiosità, in che linguaggio programmi?

@EDIT: ah sì, C#, l'ho letto ora nel titolo del thread.

Mattyfog
21-07-2009, 10:43
ok ma io i float li conoscevo già ma non capivo il senso di sto f...
Comunque forse ho trovato pappa pronta qua http://social.msdn.microsoft.com/forums/en-US/xnagamestudioexpress/thread/c1449389-f704-4125-8ab2-dee819d78ad5 ma ti devo ringraziare soprattutto perchè mi hai spiegato i valori degli angoli :)
dopo proverò e vi farò sapere :)

Mattyfog
21-07-2009, 12:21
confermo che funziona ciò che ho trovato ;)
mi sapete però dire la necessità di questa f nell'assegnazione delle float?

banryu79
21-07-2009, 12:36
mi autoquoto per risparmiare le dita :D:

Si chiamano valori float (da cui la 'f' posta dopo il valore letterale).
Sono dati a virgola mobile, a precisione singola, hanno dei fratelli: i double, che sono anche loro dati a virgola mobile, ma a precisione doppia.

Senza quella 'f' posta subito dopo il valore letterale, quel valore sarebbe interpretato come di tipo double.

Mattyfog
21-07-2009, 18:48
mi autoquoto per risparmiare le dita :D:

Senza quella 'f' posta subito dopo il valore letterale, quel valore sarebbe interpretato come di tipo double.

grazie ;)
intanto cerco di approfondire xna...