Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Ciao a tutti,è il mio secondo post e ho un altro problema!!Finalmente il mio sprite salta così iniziamo il gioco...Immaginatevi la scena arriva il mio sprite tutto felice di saper saltare che cammina quanto di colpo incontra un ostacolo,così gli viene l'idea di saltare e cosa succede...CI PASSA ATTRAVERSO Cosa posso fare per renderlo "solido"?
ho trovato una guida in italiano che mi spiega come attivare la collisione,ma il problema è che una volta attivata come faccio a far in modo che il mio sprite sta sopra a che so ad un muretto tipo quelli di super mario? (infatti devo fare un gioco su quello)
Mi potresti fare un esempio?
ecco la guida trovata:
Gestione delle collisioni con la tecnica del bounding box.
Dunque in questo tutorial imparerete a gestire le collisioni con la tecnica del bounding box (d'ora in poi BB). Avete presente quando create un immagine? Questa viene racchiusa da un rettangolo (i bordi). La tecnica del BB consiste nel rilevare se un punto qualsiasi del perimetro di questo rettangolo tocca con il perimetro di un altro rettangolo. Semplice no? Ordunque per realizzare ciò di che cosa abbiamo bisogno? Delle cooordinate x ed y e della lunghezza e larghezza dell'oggetto.
immagine->w = dimensione width cioè larghezza
immagine->h = dimensione height cioè altezza
Questa è la sintassi usata dalle allegro per trovare questi due valori. Potremmo benissimo usare le dimensioni senza questa dicitura ma è mooolto conveniente. Infatti non serve che controlliamo ogni immagine.
Facciamo un piccolo esempio di codice:
if ((imagex+image->w>image2x) && (imagex<image2x+image2->w) && (imagey+image->h>image2y) && (imagey<image2y+image2->h))
{
}
Bene ora se ci ragionate troverete il sopra citato pezzo di codice moooolto semplice. Infatti prendete pure un pezzo di carta e una penna. Disegnate due quadrati o rettangoli che si "scontrano" in questo modo (scusate per il disegno a dir poco schifoso):
----- ####
| | # # Prima della collisione (1° stato)
| | # #
----- ####
----####
| # # Durante la collisione (2° stato)
| # #
----####
Bene nel 1° stato non c'è alcun tipo di collisione. Nel 2° stato invece c'è una collisione o meglio alcuni pixel di figura "-" tangono i pixel di figura "#". Bene al 3° stato NON dovete MAI arrivare in quanto verrebbe a crearsi un effetto veramente spiacevole. Voi dovete fare in modo che le due immagini non si sovrappongano mai. Però in alcuni casi può rivelarsi utile far passare un immagine sopra ad un altra. Ad esempio:
L'impavido eroe dopo aver saccagnato miriadi di mostri deve prendere la chiave.
e
L'impavido eroe dopo aver preso la chiave cade in una trappola rappresentata da un tile del terreno.
Nel primo caso si può arrivare fino al 2° stato infatti la chiave poi scomparirà (salvo diverso gameplay) e non si veranno a creare spiacevoli effetti "collaterali". Nel secondo caso invece visto che la collisione riguarda un tile del terreno (in giochi con visuale dall'alto) si può benissimo fare in modo che le due immagini si "sovrappongano" durante la collisione. Ufff quanta teoriaaa!!! Ora però passiamo ad analizzare ogni frammento del codice =P
if ((imagex+image->w>image2x)
ordunque qua si va a controllare se la somma della coordinata x e la larghezza dell'immagine (width = larghezza) è maggiore alla coordinata x dell'immagine numero 2. Poi però...
&& (imagex<image2x+image2->w)
si controlla anche se la coordinata x (imagex) dell'immagine 1 è minore alla somma fra la coordinata x di immagine 2 e la sua larghezza.
Stesso discorso per il resto della condizione =) Al posto che x però è y.
Ultima modifica effettuata da russoandrea96 il 22/08/2010 alle 23:35
mi potresti spiegare meglio il codice,visto che sei molto più bravo di me?
anche se te lo spiegasssi con parole diverse non otterresti nulla, dovresti cmq scriverti il codice da solo
fidati di me, prima impara bene il linguaggio che stai usando, poi sviluppi dei giochi.
altrimenti finisci per chiedere e scopiazzare a destra e a manca pur di fare due cose in croce senza poi alla fine capire cosa stai facendo!
sviluppare giochi è solo l'ultima delle cose che si fa con un linguaggio che si impara, non la prima
Ok mi fido XD cmq. almeno mi puoi dare una mano con questo: ho fatto una giochino a scrolling orizzontale (è solo una cosa così) il problema è che il personaggio si vede male,cioè si vede e non si vede in maniera velocissima così si vede male... mi dai una mano,ecco il source:
Codice sorgente - presumibilmente C/C++
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <allegro.h>
#include <mario.h>
MIDI *musica;
BITMAP *immagine1, *immagine5, *buffer2, *sprite;
BITMAP *strato1, *strato5;
PALETTE colori;
DATAFILE *dat;
int a,x,y,b,c, sposta, sposta1, sposta2, sposta3, sposta4, sposta5,movimento;
void scrolling(){
if (key[KEY_LEFT]) { // ATTENDE LA PRESSIONE DEL TASTO CURSORE //