Newsgroup: it.comp.lang.delphi
Titolo: Movimento oggetto tipo AUTOMOBILE

il problema dei tasti l'ho risolto banalmente con delle variabili
boolean e un timer.
Ora devo risolvere quest'altro più tosto:
supponiamo di avere una immagine che raffigura un'auto, le frecce
servono per farla andare avanti, dietro, destra e sinistra, come
faccio a far seguire il muso della macchina alla direzione voluta?
l'immagine ha già un parametro Angle per farla ruotare ma non so come
mettere in relazione la direzione dell'auto con il movimento dei
cursori
Spero di essermi spiegato.
Qualche aiuto?
Grazie 1000

 cursori
Piu o meno è la logica delle comuni Window Procedure associate alle finestre 
che gestiscono lo smistamento dei messaggi: un loop infinito (o un timer) 
nel quale analizzi lo stato dei tasti. Tramite le varibili boolean. Se il 
tasto corrispondente alla rotazione è premuto, incrementi l'angolo di 
qualche grado e così ad ogni passaggio del ciclo. Quando il tasto  non è 
premuto, non fai niente.
Ciao,
Gianluca. 



Ciao,
se ho capito bene il problema di jack non è la rotazione, ma capire inche
direzione punta il muso dell'auto...così di botto la prima idea che mi
viene in mente è di dividere la grafica dalla logica.
mi spiego:
immagina una matrice e immagina di riempirla con codici che identificano
cosa c'è in quel punto della mappa (un ostacolo ad esempio), poi si tratta
di riportare graficamente la matrice.
Ora io l'ho semplificata molto...ti ho detto che nella matrice ci sono dei
codici...ma potrebbero esserci degli oggetti con determinati
comportamenti...insomma spero di averti dato uno spunto su cui ragionare...
buon divertimento e fammi sapere come risolvi!
ciao ciao 
-- 
Emanuele.

Secondo me è un po più complicato:
supponi di avere un'immagine di un'auto che si muove nello schermo,
andare dritto significa andare in linea retta al proprio muso, ovvero
con il tasto freccia su, se il muso è puntato a sinistra, la macchina
deve andare verso sinistra...............



e allora?
gestisci questo comportamento "logicamente" poi sarà una bazzecola gestirlo
graficamente...scindi le due parti nn legarti a cose che sono superflue...
-- 
Emanuele.

L'idea della matrice č la prima cosa che mi č venuta in mente, ma
diventa una cosa enorme rapportata al percorso che puň fare l'oggetto,
e poi che informazioni ci metto?
sono in alto mare.......... non avresti un aiuto piů concreto?

 L'idea della matrice č la prima cosa che mi č venuta in mente, ma

Se ogni oggetto (non l'automobile) si trova all'interno di un sistema di 
coordinate cartesiane (con due o tre dimensioni) ed č caratterizzato appunto 
dalla posizione in termini di X, Y, Z e da attributi che ne definiscono 
forma e dimensione, una lista di questi oggetti ti permetterebbe di definire 
lo spazio senza utilizzare un gran numero di risorse (ma forse dipende anche 
da quanti sono gli oggetti).
Nel tentativo di muovere l'automobile verso una certa coordinata, potresti 
scorrere la lista e verificare se in quel punto esiste un oggetto (tramite 
gli attributi di posizione, forma e dimensioni). Se esiste creeresti una 
collisione, se non esiste puoi spostare l'automobile in quelle coordinate.
Ciao,
Gianluca.

 sono in alto mare.......... non avresti un aiuto più concreto?
Senza scomodare matrici, in un giochino che feci anni fa con delphix usavo
il seguente sistema:
con i tasti sx e dx gestivo soltanto la rotazione, incrementando o
decrementando il valore della variabile "angolo", stando attento ad
azzerarlo quando compivo un giro di 360 gradi;
col tasto su incrementavo il valore della variabile "velocità" e provvedevo
a calcolarne la posizione:
    x := x + cos(angolo) * velocità;
    y := y + sin(angolo) * velocità;
Nel mio caso la variabile "angolo" faceva parte dello sprite engine di
delphix, che provvedeva ad effettuare la rotazione dello sprite; nel tuo
caso dovrai ruotare lo sprite by hand ad ogni ciclo del loop.
Prova così e facci sapere se funge. Se si tratta di una applicazione che
sfrutta molto la grafica, ti suggerisco di provare ad usare directx, opengl
o sdl.
Ciao!
Francesco

 sono in alto mare.......... non avresti un aiuto più concreto?
Se vuoi fare qualcosina di abbastanza semplice te l'ho detto, un'idea può
essere la matrice utilizzata esattamente come dice Gianluca Plevani, cioè
come coordinate degli oggetti, se due oggetti sono sulla stessa coordinata
c'è collisione altrimenti no...insomma facendo una buona progettazione
secondo me riesci a raggiungere un buon livello, ma ricordati sempre di
scindere la logica dalla grafica.
Se invece vuoi qualcosa di +, l'idea di Francesco Lombardi di utilizzare
directx e opengl è ottima.
tutto rigorosamente IMHO
-- 
Emanuele.

Francesco
	Ciao
	MassimoB
 
---------------------------
http://www.massimobeschi.it/

 e non nella giusta quantità a x e a y.
Si, infatti semplificavo il tutto. La cosa più giusta da fare sarebbe quella
di crearsi una lookup table contenente i valori di seno e coseno per un tot
di valori. Siccome per l'applicazione non serve una grandissima precisione,
potrebbero  bastare 360 valori (fregandocene delle frazioni di grado). A
questo punto al posto della funzione cos mettiamo il valore recuperato
dall'array della lookup table: in questo modo si risolve il problema
dell'arrotondamento e si guadagna anche in prestazioni, avendo precalcolato
i valori di seno e coseno. ^_^
Ciao!
Francesco

Io ringrazio tutti ragazzi per i consigli, ma........sono ancora in
alto mare, mi sembra buona l'idea dell'array con i valori dei 360
gradi, ma non ho ancora capito come "fisicamente" faccio a muovere
l'oggetto posto che vorrei utilizzare una semplice TImage (ho già
l'opzione con l'angolo di rotazione).
Ho perso due giorni e non sono approdato a nulla, ora se c'è qualcuno
che vorrebbe farlo per me (anche a pagamento) ne parliamo, altrimenti
per me è troppo oneroso e continuo con lo sviluppo di altre funzioni.
Grazie 1000 a tutti
Gianluca