Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Far saltare lo sprite con allegro.h!!
Forum - C/C++ - Far saltare lo sprite con allegro.h!!

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
russoandrea96 (Normal User)
Newbie


Messaggi: 19
Iscritto: 20/08/2010

Segnala al moderatore
Postato alle 0:11
Venerdì, 20/08/2010
Ciao a tutti sono nuovo del forum e questa è la mia prima discussione :D
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!:_doubt:
Vi prego aiutatemi!:hail:

PM Quote
Avatar
D@vide (Member)
Expert


Messaggi: 450
Iscritto: 30/06/2010

Segnala al moderatore
Postato alle 1:18
Venerdì, 20/08/2010
Testo quotato

Postato originariamente da russoandrea96:

Ciao a tutti sono nuovo del forum e questa è la mia prima discussione :D
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!:_doubt:
Vi prego aiutatemi!:hail:



Emmmm studiando la fisica?:-|

PM Quote
Avatar
giuseppe93 (Ex-Member)
Pro


Messaggi: 166
Iscritto: 02/08/2009

Segnala al moderatore
Postato alle 20:58
Venerdì, 20/08/2010
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++

  1. BITMAP *sprite;
  2. int x=0,y;
  3. for(y=0;y<50;y++) draw_sprite(screen,sprite,x,y);
  4. 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;

PM Quote
Avatar
russoandrea96 (Normal User)
Newbie


Messaggi: 19
Iscritto: 20/08/2010

Segnala al moderatore
Postato alle 1:22
Sabato, 21/08/2010
Testo quotato

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++

  1. BITMAP *sprite;
  2. int x=0,y;
  3. for(y=0;y<50;y++) draw_sprite(screen,sprite,x,y);
  4. 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!!:-o

Ultima modifica effettuata da russoandrea96 il 21/08/2010 alle 1:23
PM Quote
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 10:30
Sabato, 21/08/2010
Testo quotato

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!!:-o  



probabilmente loro glie lo chiedono con garbo.

PM Quote
Avatar
russoandrea96 (Normal User)
Newbie


Messaggi: 19
Iscritto: 20/08/2010

Segnala al moderatore
Postato alle 11:12
Sabato, 21/08/2010
Testo quotato

Postato originariamente da HeDo:

Testo quotato

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!!:-o  



probabilmente loro glie lo chiedono con garbo.


XD...Sul serio,come posso fare?

PM Quote
Avatar
giuseppe93 (Ex-Member)
Pro


Messaggi: 166
Iscritto: 02/08/2009

Segnala al moderatore
Postato alle 14:19
Sabato, 21/08/2010
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

PM Quote
Avatar
russoandrea96 (Normal User)
Newbie


Messaggi: 19
Iscritto: 20/08/2010

Segnala al moderatore
Postato alle 20:19
Sabato, 21/08/2010
Testo quotato

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++

  1. if (key[KEY_SPACE]){
  2.       for(a=0;a<34;a++){
  3.         y=y-1;
  4.         draw_sprite(screen,sprite,x,y);
  5.       }
  6.       rest(200);
  7.       for(b=0;b<34;b++){
  8.         y=y+1;
  9.         draw_sprite(screen,sprite,x,y);
  10.       }
  11.     }



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 :D)

PM Quote
Avatar
giuseppe93 (Ex-Member)
Pro


Messaggi: 166
Iscritto: 02/08/2009

Segnala al moderatore
Postato alle 21:12
Sabato, 21/08/2010
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++

  1. BITMAP *buffer=create_bitmap(x,y);
  2. clear(buffer);
  3. void doppiobuffering(){
  4. vsync();
  5. blit(buffer, screen,0,0,0,0,x,y);
  6. 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
PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo