Palle che si bloccano nei muri.

Hai una curiosità o un problema con Game Maker? Domanda e ti sarà risposto!
Avatar utente
tola22
Membro
Messaggi: 185
Iscritto il: 11/03/2011, 0:00
Specialità: Drag and Drop
Uso: GM:Studio 1.4 Pro
Località: Svizzera
Contatta:

Palle che si bloccano nei muri.

Messaggio da tola22 »

Ciao ragazzi, ho un piccolo grande problema. ho delle palline che rimbalzano nel mio gioco. queste palline le ho settate con set gravity 270° e con bounce su oggetti solidi.. ora: il gioco va benissimo eccetto alcuni casi di palline che a volte si incastrano nei muri e non so il motivo... sapete aiutarmi?
se non ci sono sistemi per evitare questa cosa, conoscete un modo per fare un controllo delle palline bloccate e di conseguenza l'auto eliminazione dal livello? grazie
(Preferisco se non si bloccano ovviamente xD)
grazie ragazziiii

Solid Snake
GMI Advanced
Messaggi: 2093
Iscritto il: 19/12/2010, 16:17
Specialità: Programmazione
Uso: GM:Studio 1.4 Standard
Contatta:

Re: Palle che si bloccano nei muri.

Messaggio da Solid Snake »

Il problema è che quando collidono con i muri le palle si incastrano al loro interno per la troppa velocità.
Per evitare questo possiamo usare la funzione move_contact_* che muove l'oggetto in una direzione finchè non collide con un altro oggetto. Praticamente lo posiziona perfettamente contro il primo oggetto che incontra. Esistono due funzioni move_contact_all(...) e move_contact_solid(...) che funzionano rispettivamente per tutti gli oggetti (sia essi solidi e non), e per gli oggetti solidi. Come argomenti prendono la direzione in cui spostare l'oggetto e la distanza massima a cui spostarli. Se come distanza viene passato -1 la distanza è infinita.

Codice: Seleziona tutto

if (!place_free(x+hspeed, y+hspeed))//Se la posizione in cui stiamo andando non è libera
{
   move_contact_solid(direction, -1)//Posiziona l'oggetto perfettamente contro il muro.
   //Se il muro non l'hai settato solid, usa invece move_contact_all
}
♥♥♥♥♥♥
Immagine
♥♥♥♥♥♥
Spoiler
Immagine

Avatar utente
gameplay_extreme
GMI VIP
Messaggi: 3824
Iscritto il: 13/11/2010, 16:23
Uso: GM:Studio 2
Contatta:

Re: Palle che si bloccano nei muri.

Messaggio da gameplay_extreme »

per il discorso eliminazione istanza bloccate nel muro:
basta controllare se la posizione precedente e quella attuale coincidono o no, se la risposta e farai un semplice instance_destroy()

in pratica il check va fatto su alcune variabili bulit-in:
posizione attuale: (x,y)
posizione nell' istante appena prima: (xprevious, yprevious)

volendo potresti anche fare che si distruggono se rimangono immobili per 5/6 step (anziché uno solo)
Immagine
clicca sul logo qui sopra per info e download riguardo ai miei software o per sapere come si crea un videogioco!

iscriviti qui gratuitamente a GMI !
Spoiler
- Una curiosità: come mai quell' ordine ?
- Perché formava una scaletta molto carina da vedere.


"ah ah...grazie alla annotazione scientifica ti ho fregato!"
(come disse la calcolatrice al display)

Avatar utente
tola22
Membro
Messaggi: 185
Iscritto il: 11/03/2011, 0:00
Specialità: Drag and Drop
Uso: GM:Studio 1.4 Pro
Località: Svizzera
Contatta:

Re: Palle che si bloccano nei muri.

Messaggio da tola22 »

ora proveró a fare in modo che non si blocchino, ma se non dovessi riuscire, ripiegheró sul sistema di eliminazione automatica... anche se avrei bisogno di qualche dritta in piu per il fatto che vorrei appunto fare piu controlli su piu step.
per evitare palline che scompaiono senza motivo.
grazie ragazzi delle drittee :)

Avatar utente
tola22
Membro
Messaggi: 185
Iscritto il: 11/03/2011, 0:00
Specialità: Drag and Drop
Uso: GM:Studio 1.4 Pro
Località: Svizzera
Contatta:

Re: Palle che si bloccano nei muri.

Messaggio da tola22 »

Codice: Seleziona tutto

if (!place_free(x+hspeed, y+hspeed))//Se la posizione in cui stiamo andando non è libera
{
   move_contact_solid(direction, -1)//Posiziona l'oggetto perfettamente contro il muro.
   //Se il muro non l'hai settato solid, usa invece move_contact_all
}
[/quote]

Ho provato a mettere il codice di Solid Snake nello Step Event delle palline ma si bloccano ancora... sbaglio io ? sicuramente si XD

Solid Snake
GMI Advanced
Messaggi: 2093
Iscritto il: 19/12/2010, 16:17
Specialità: Programmazione
Uso: GM:Studio 1.4 Standard
Contatta:

Re: Palle che si bloccano nei muri.

Messaggio da Solid Snake »

Ho fatto un errore di battitura:

Codice: Seleziona tutto

if (!place_free(x+hspeed, y+vspeed))//Se la posizione in cui stiamo andando non è libera
{
   move_contact_solid(direction, -1)//Posiziona l'oggetto perfettamente contro il muro.
   //Se il muro non l'hai settato solid, usa invece move_contact_all
}
♥♥♥♥♥♥
Immagine
♥♥♥♥♥♥
Spoiler
Immagine

Avatar utente
tola22
Membro
Messaggi: 185
Iscritto il: 11/03/2011, 0:00
Specialità: Drag and Drop
Uso: GM:Studio 1.4 Pro
Località: Svizzera
Contatta:

Re: Palle che si bloccano nei muri.

Messaggio da tola22 »

ho messo il tuo codice nuovo, ma purtroppo le palline si bloccano ancora... :/ uffi

Avatar utente
Wolfrost
Membro super
Messaggi: 692
Iscritto il: 03/08/2014, 13:08
Specialità: Programmazione
Uso: GM:Studio 1.4 Pro
Località: Una galassia lontana lontana...
Contatta:

Re: Palle che si bloccano nei muri.

Messaggio da Wolfrost »

tola22 ha scritto:ho messo il tuo codice nuovo, ma purtroppo le palline si bloccano ancora... :/ uffi
Mi sa che sei costretto ad implementare un sistema di collisioni pixel perfect, invece di affidarti al move_contact_solid
Immagine

Immagine

Solid Snake
GMI Advanced
Messaggi: 2093
Iscritto il: 19/12/2010, 16:17
Specialità: Programmazione
Uso: GM:Studio 1.4 Standard
Contatta:

Re: Palle che si bloccano nei muri.

Messaggio da Solid Snake »

Hai provato a cambiare la funzione move_contact_solid con la sua controparte move_contact_all? Se hai già provato allora posta il codice della palle così vediamo cosa c'è che non va.
♥♥♥♥♥♥
Immagine
♥♥♥♥♥♥
Spoiler
Immagine

Avatar utente
tola22
Membro
Messaggi: 185
Iscritto il: 11/03/2011, 0:00
Specialità: Drag and Drop
Uso: GM:Studio 1.4 Pro
Località: Svizzera
Contatta:

Re: Palle che si bloccano nei muri.

Messaggio da tola22 »

purtroppo non posso usare move_contact_all perché andrebbe a collidere con oggetti con la quale non dovrebbe collidere.
per quanto riguarda il codice che mi chiedi, in se stesso non ce codice perché ho usato il semplice drag & drop di GMS...
ma nel dettaglio: Create Event - set the gravity (270,0.5)
- set the horizontal speed (3)
Step Event - esegui pezzo di codice speed = clamp (speed,0,23)

é tutto qui, nulla di piu nulla di meno...

Per rispondere a Wolfrost invece, sarei felice se mi volessi spiegare gentilmente di cosa si tratta il pixel perfect e magari anche di come funziona. (sempre se con il move contact non si riesce a risolvere)

Grazie ragazzi per la vostra pazienzaaa :O

Solid Snake
GMI Advanced
Messaggi: 2093
Iscritto il: 19/12/2010, 16:17
Specialità: Programmazione
Uso: GM:Studio 1.4 Standard
Contatta:

Re: Palle che si bloccano nei muri.

Messaggio da Solid Snake »

Esiste anche la funzione che fa l'opposto move_outside_* che muove l'oggetto "fuori" dagli altri. Controlla se la palla è bloccata, se si usa la funzione move_outside_solid(...) (guarda nel manuale se non sai come funziona).
♥♥♥♥♥♥
Immagine
♥♥♥♥♥♥
Spoiler
Immagine

Avatar utente
tola22
Membro
Messaggi: 185
Iscritto il: 11/03/2011, 0:00
Specialità: Drag and Drop
Uso: GM:Studio 1.4 Pro
Località: Svizzera
Contatta:

Re: Palle che si bloccano nei muri.

Messaggio da tola22 »

ma usando tale funzione non andrei incontro al problema che per uscire dal muro la pallina faccia la strada sbagliata forse? magari una pallina che per esempio si incastra a bordo schermo invece di tornare nella room se ne va a spasso dall'altra parte del muro?

Avatar utente
tola22
Membro
Messaggi: 185
Iscritto il: 11/03/2011, 0:00
Specialità: Drag and Drop
Uso: GM:Studio 1.4 Pro
Località: Svizzera
Contatta:

Re: Palle che si bloccano nei muri.

Messaggio da tola22 »

ho anche provato la seconda soluzione (quella del auto eliminazione) ma non capisco come mai la pallina se riconosce di essere bloccata , si elimina si... ma si eliminano tutte quelle dello stesso tipo anche se il destroy l'ho messo nel evento alarm1 della pallina, mi sfugge qualcosa.. non ha molto senso, se ad un oggetto dai il comando destroy self non dovrebbero eliminarsi anche gli altri...

Avatar utente
boxbuilder
Membro
Messaggi: 158
Iscritto il: 25/06/2015, 10:37
Specialità: programmatore
Uso: GM:Studio 1.4 HTML5
Contatta:

Re: Palle che si bloccano nei muri.

Messaggio da boxbuilder »

se l'hai messo all'interno di un with le palline si elimineranno tutte, comunque tieni conto che "object_index" è diverso da "id".

personalmente ti consiglio questo tutorial:

http://gamemakertutorials.com/?p=383

mi sembra una buona implementazione di un pixel perfect collision checking, praticamente se si verifica una collisione, l'oggetto viene riposizionato (a ritroso) finchè non raggiunge la prima posizione libera, che è proprio quello che serve a te.

Solid Snake
GMI Advanced
Messaggi: 2093
Iscritto il: 19/12/2010, 16:17
Specialità: Programmazione
Uso: GM:Studio 1.4 Standard
Contatta:

Re: Palle che si bloccano nei muri.

Messaggio da Solid Snake »

tola22 ha scritto:ho anche provato la seconda soluzione (quella del auto eliminazione) ma non capisco come mai la pallina se riconosce di essere bloccata , si elimina si... ma si eliminano tutte quelle dello stesso tipo anche se il destroy l'ho messo nel evento alarm1 della pallina, mi sfugge qualcosa.. non ha molto senso, se ad un oggetto dai il comando destroy self non dovrebbero eliminarsi anche gli altri...
Posta il codice! Molto probabilmente hai usato "with(obj_palla)" e quindi distrugge tutte le istanze!
tola22 ha scritto:ma usando tale funzione non andrei incontro al problema che per uscire dal muro la pallina faccia la strada sbagliata forse? magari una pallina che per esempio si incastra a bordo schermo invece di tornare nella room se ne va a spasso dall'altra parte del muro?
Basta cambiare il parametro "direction" in base alla direzione che vuoi farle prendere. Io direi che la direzione verso la posizione precedente sia l'ideale:

Codice: Seleziona tutto

dir=arctan(y-yprevious, x-xprevious)
move_outside_solid(dir, -1)
Non lo testato e non so se funziona, in più non ricordo se la direzione si calcolava in questo modo :asd:

EDIT: Mi sono ricordato della funzione point_direction(...) :asd:

Codice: Seleziona tutto

dir=point_direction(x, y, xprevious, yprevious)
move_outside_solid(dir, -1)
♥♥♥♥♥♥
Immagine
♥♥♥♥♥♥
Spoiler
Immagine

Avatar utente
tola22
Membro
Messaggi: 185
Iscritto il: 11/03/2011, 0:00
Specialità: Drag and Drop
Uso: GM:Studio 1.4 Pro
Località: Svizzera
Contatta:

Re: Palle che si bloccano nei muri.

Messaggio da tola22 »

ho messo queste 2 righe e onestamente non so proprio xD ora le palline si eliminano tutte subito in qualsiasi caso.. perche non mi ricordo come avevo fatto il codice ieri :/

Step Event:

if xprevious=x{
if yprevious=y{
instance_destroy()
}
}

Solid Snake
GMI Advanced
Messaggi: 2093
Iscritto il: 19/12/2010, 16:17
Specialità: Programmazione
Uso: GM:Studio 1.4 Standard
Contatta:

Re: Palle che si bloccano nei muri.

Messaggio da Solid Snake »

Forse per qualche frame alla partenza le palle sono ferme... Prova col mio codice, e vedi come va!
♥♥♥♥♥♥
Immagine
♥♥♥♥♥♥
Spoiler
Immagine

Avatar utente
tola22
Membro
Messaggi: 185
Iscritto il: 11/03/2011, 0:00
Specialità: Drag and Drop
Uso: GM:Studio 1.4 Pro
Località: Svizzera
Contatta:

Re: Palle che si bloccano nei muri.

Messaggio da tola22 »

ho aggiunto il tuo codice e purtroppo non riesce a sbloccarle.. secondo me é dovuto al fatto che la palla forse mantiene la velocita e la direzione precedente.. é possibile? quindi andrebbe forse fermata e poi retrocessa...
detto questo, ho adottato questo script che mi ha aiutato lievemente ad evitare che si blocchino le palline... almeno in parte anche se non ho testato molto per accertarmene...

speed = clamp(speed,-15,15);
hspeed = clamp(hspeed,-15,15);
vspeed = clamp(vspeed,-15,15);

diciamo che ora se non le metto troppo in crisi con mura troppo vicine non sembrano bloccarsi.. ma comunque ci sono palle che si bloccano e in ogni caso io devo poter agire su quelle che si bloccano...
dunque il problema non é da considerarsi risolto xD
cmq mi confermi la mia teoria della quale forse non torna indietro perché mantiene il vecchio moto?

Solid Snake
GMI Advanced
Messaggi: 2093
Iscritto il: 19/12/2010, 16:17
Specialità: Programmazione
Uso: GM:Studio 1.4 Standard
Contatta:

Re: Palle che si bloccano nei muri.

Messaggio da Solid Snake »

Per esserne sicuri basta che metti nel draw della palla:

Codice: Seleziona tutto

draw_text(speed, x, y-10)
♥♥♥♥♥♥
Immagine
♥♥♥♥♥♥
Spoiler
Immagine

Avatar utente
tola22
Membro
Messaggi: 185
Iscritto il: 11/03/2011, 0:00
Specialità: Drag and Drop
Uso: GM:Studio 1.4 Pro
Località: Svizzera
Contatta:

Re: Palle che si bloccano nei muri.

Messaggio da tola22 »

si é come pensavo le palline tengono il moto di speed 15 nella direzione in cui si incastrano. dunque serve un codice che prima gli dica di stare calma.. e poi che gli dica di ritornare sui suoi passi.

Ho provato a buttar giu questa cosa ma non va ovviamente.

//Setta Velocita Massime e Minime per la palla
speed = clamp(speed,-15,15);
hspeed = clamp(hspeed,-15,15);
vspeed = clamp(vspeed,-15,15);

//Sblocca palle incastrate
if hspeed>0{
if xprevious=x{
if yprevious=y{
speed=0;
}}}

dir=point_direction(x, y, xprevious, yprevious)
move_outside_solid(dir, -1){
}

Rispondi

Chi c’è in linea

Visitano il forum: Bing [Bot] e 42 ospiti