Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [c++] allegro.h: collisione contro i muri (pacman)?

    Salve, è da un bel po' che smanetto con allegro.h e devo dire che mi sta davvero appassionando. Quindi ho deciso di verificare le mie conoscenze "programmando" una semplice versione di pacman. Per adesso sono riuscito a controllare il movimento dei fantasmi e di pacman, sono riuscito (dopo una settimana di ricerca) a capire come creare collisioni tra pacman e le sferette, ma adesso sussiste un problema che ho ritardato, ma che ora resta l'ultima cosa da fare: i muri. Ora, ho pensato di caricare con draw_sprite l'immagine dei muri
    (copiata da google immagini e adattata con paint) nel display e poi fare per ogni singolo pezzo una routine di collisione per poi non far andare pacman oltre il muro.
    La mia domanda è: come posso far sì che pacman non possa attraversare i muri senza creare una routine di collisione con il pezzo del muro ogni volta?
    tutto si può fare, bisogna solo volerlo
    http://italybrain.altervista.org/

  2. #2
    Utente di HTML.it L'avatar di minomic
    Registrato dal
    Nov 2010
    Messaggi
    635
    Ciao, non ho mai usato allegro ma butto lì un'idea. Il tuo campo di gioco avrà un sistema di coordinate, giusto? Allora controlli l'ascissa e l'ordinata di pacman e imponi che sia sempre compresa tra le ascisse/ordinate dei vari muri.


  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    455

    Re: [c++] allegro.h: collisione contro i muri (pacman)?

    Originariamente inviato da g.b99pm10
    Salve, è da un bel po' che smanetto con allegro.h e devo dire che mi sta davvero appassionando. Quindi ho deciso di verificare le mie conoscenze "programmando" una semplice versione di pacman. Per adesso sono riuscito a controllare il movimento dei fantasmi e di pacman, sono riuscito (dopo una settimana di ricerca) a capire come creare collisioni tra pacman e le sferette, ma adesso sussiste un problema che ho ritardato, ma che ora resta l'ultima cosa da fare: i muri. Ora, ho pensato di caricare con draw_sprite l'immagine dei muri
    (copiata da google immagini e adattata con paint) nel display e poi fare per ogni singolo pezzo una routine di collisione per poi non far andare pacman oltre il muro.
    La mia domanda è: come posso far sì che pacman non possa attraversare i muri senza creare una routine di collisione con il pezzo del muro ogni volta?
    Ciao,
    è la stessa cosa dell'altra discussione, cambia solamente che lo dovrai fare per ogni sprite che magari sia definito come 'muro' in modo che nel tuo ciclo for non si metta ad eseguire la funzione su sprite che non centrano a niente con il muro.

    Un ciclo-for usato in questo modo però farebbe perdere molti FPS per cui bisognerebbe studiare un modo per eseguire la collisione solo in un certo momento.

    Un idea sarebbe quella di effettuare la ricerca di collisioni solo se all'interno di un certo raggio del personaggio è presente qualcosa, in questo modo la ricerca delle collisioni si limiterà ad essere nel raggio definito.

    Oppure pre calcolare le collisioni con un sistema di tile

    Purtroppo le collisioni sono una rottura di scatole, per fare il mio piccolo motore grafico in DirectX ci ho dovuto sclerare non poco

    devi stare attento a verificare ogni tipo di condizione necessaria...basta un piccolo errore di qualsiasi tipo e ti ritrovi la collisione sfasata

  4. #4
    grazie, ho risolto. Creando una matrice di char ho creato la mappa del pacman
    faccio un piccolo esempio di due righe
    codice:
    char campo[2][1]
    {
    "xx",
    "  ",
    "xx",
    
    };
    in questo modo ho creato il campo, poi ho fatto un doppio ciclo for che scansiona la matrice e, usando l'if dico che, dove c'è la x disegna un muretto con le coordinate ugali ai contatori del ciclo in scala 30:1 facendo coordinata * 30. Poi quando creo le istruzioni per muovere pacman gli dico "se nella casella dove andrà il pacman nn c'è una x (il muro) allora fai il movimento, altrimenti no". Tutto ha funzionato, adesso devo solo fare un bel campo ed il gioco è fatto (letteralmente) <----- è una battuta, lo so, è misera.
    grazie, il doppio ciclo for mi ha aperto gli occhi. Per quanto riguarda lo spreco di memoria ci devo pensare...
    tutto si può fare, bisogna solo volerlo
    http://italybrain.altervista.org/

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.