russoandrea96 (Normal User)
Newbie
Messaggi: 19
Iscritto: 20/08/2010
|
Ciao a tutti sono nuovo del forum e questa è la mia prima discussione
Sto facendo un giochino a scorrimento orrizzontale e il mio problema è che non so come far saltare lo sprite! dovrei gestire la fisica ma come!
Vi prego aiutatemi!
|
|
D@vide (Member)
Expert
Messaggi: 450
Iscritto: 30/06/2010
|
|
|
giuseppe93 (Ex-Member)
Pro
Messaggi: 166
Iscritto: 02/08/2009
|
se lo sprite resta fermo sul luogo mentre è lo sfondo che scorre verso sx o dx allora quando lo disegni con draw_sprite basta che cambi la y, con 2 cicli for consecutivi per esempio
Codice sorgente - presumibilmente C/C++ |
BITMAP *sprite;
int x=0,y;
for(y=0;y<50;y++) draw_sprite(screen,sprite,x,y);
for(;y>=0;y--) draw_sprite(screen,sprite,x,y);
|
si avrà l'impressione che lo sprite salti.
Se invece lo sfondo resta fermo e lo sprite si muove per tutto lo schermo, allora una soluzione potrebbe essere quella di usare l'equazione della parabola!
y=ax^2+bx;
|
|
russoandrea96 (Normal User)
Newbie
Messaggi: 19
Iscritto: 20/08/2010
|
Postato originariamente da giuseppe93:
se lo sprite resta fermo sul luogo mentre è lo sfondo che scorre verso sx o dx allora quando lo disegni con draw_sprite basta che cambi la y, con 2 cicli for consecutivi per esempio
Codice sorgente - presumibilmente C/C++ |
BITMAP *sprite;
int x=0,y;
for(y=0;y<50;y++) draw_sprite(screen,sprite,x,y);
for(;y>=0;y--) draw_sprite(screen,sprite,x,y);
|
si avrà l'impressione che lo sprite salti.
Se invece lo sfondo resta fermo e lo sprite si muove per tutto lo schermo, allora una soluzione potrebbe essere quella di usare l'equazione della parabola!
y=ax^2+bx; |
ci ho provato ma non funziona! va troppo veloce e non si vede l'effetto non c'è nulla che possa fare? ma come cavolo fanno a farli saltare nei giochi!! Ultima modifica effettuata da russoandrea96 il 21/08/2010 alle 1:23 |
|
HeDo (Founder Member)
Guru^2
Messaggi: 2765
Iscritto: 21/09/2007
|
Postato originariamente da russoandrea96:
ci ho provato ma non funziona! va troppo veloce e non si vede l'effetto non c'è nulla che possa fare? ma come cavolo fanno a farli saltare nei giochi!! |
probabilmente loro glie lo chiedono con garbo. |
|
russoandrea96 (Normal User)
Newbie
Messaggi: 19
Iscritto: 20/08/2010
|
Postato originariamente da HeDo:
Postato originariamente da russoandrea96:
ci ho provato ma non funziona! va troppo veloce e non si vede l'effetto non c'è nulla che possa fare? ma come cavolo fanno a farli saltare nei giochi!! |
probabilmente loro glie lo chiedono con garbo. |
XD...Sul serio,come posso fare? |
|
giuseppe93 (Ex-Member)
Pro
Messaggi: 166
Iscritto: 02/08/2009
|
devi usare la funzione rest(int m); dove m sono i millisecondi. la funzione fa attendere m millesecondi prima di far continuare il programma con le funzioni successive, così il nostro occhio ha il tempo di vedere lo sprite prima che venga cancellato e disegnato da un'altra parte
|
|
russoandrea96 (Normal User)
Newbie
Messaggi: 19
Iscritto: 20/08/2010
|
Postato originariamente da giuseppe93:
devi usare la funzione rest(int m); dove m sono i millisecondi. la funzione fa attendere m millesecondi prima di far continuare il programma con le funzioni successive, così il nostro occhio ha il tempo di vedere lo sprite prima che venga cancellato e disegnato da un'altra parte |
Non funziona! ecco il codice:
Codice sorgente - presumibilmente C/C++ |
if (key[KEY_SPACE]){
for(a=0;a<34;a++){
y=y-1;
draw_sprite(screen,sprite,x,y);
}
rest(200);
for(b=0;b<34;b++){
y=y+1;
draw_sprite(screen,sprite,x,y);
}
}
|
il tutto funziona bene,ma il problema è che rimane lo sprite di prima,così si vede lo sprite di sotto e quello di sopra!!Mi puoi dare una mano? magari se hai qualche sorgente di un gioco (in cui si salta ) |
|
giuseppe93 (Ex-Member)
Pro
Messaggi: 166
Iscritto: 02/08/2009
|
si vede che non hai mai letto uno guida riguardo ALLEGRO! perchè la prima cosa che ti insegnano è evitare questo problema! in poche parole devi dichiarare un altro BITMAP che funziona da buffer cioè la zona dello schermo dove disegnerai lo sprite verrà "preparata" per essere riempita con un'immagine. in termini di codice devi fare questo;
Codice sorgente - presumibilmente C/C++ |
BITMAP *buffer=create_bitmap(x,y);
clear(buffer);
void doppiobuffering(){
vsync();
blit(buffer, screen,0,0,0,0,x,y);
clear(buffer);}
|
dove x e y sono la larghezza e lunghezza della tua finestra. Devi chiamare questa funzione prima di eseguire ogni draw_sprite(). In ogni caso ti consiglio caldamente di imparare l'uso di blit() perchè come te l'ho scritto io non è il migliore dei modi.
Ultima modifica effettuata da giuseppe93 il 21/08/2010 alle 21:14 |
|