Palle che si bloccano nei muri.
- 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.
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
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
-
- 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.
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.
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
}
♥♥♥♥♥♥

♥♥♥♥♥♥

♥♥♥♥♥♥
Spoiler
- 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.
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)
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)

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
- 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.
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
per evitare palline che scompaiono senza motivo.
grazie ragazzi delle drittee

- 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.
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
}
Ho provato a mettere il codice di Solid Snake nello Step Event delle palline ma si bloccano ancora... sbaglio io ? sicuramente si XD
-
- 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.
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
}
♥♥♥♥♥♥

♥♥♥♥♥♥

♥♥♥♥♥♥
Spoiler
- 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.
ho messo il tuo codice nuovo, ma purtroppo le palline si bloccano ancora... :/ uffi
- 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.
Mi sa che sei costretto ad implementare un sistema di collisioni pixel perfect, invece di affidarti al move_contact_solidtola22 ha scritto:ho messo il tuo codice nuovo, ma purtroppo le palline si bloccano ancora... :/ uffi
-
- 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.
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.
♥♥♥♥♥♥

♥♥♥♥♥♥

♥♥♥♥♥♥
Spoiler
- 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.
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
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
-
- 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.
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).
♥♥♥♥♥♥

♥♥♥♥♥♥

♥♥♥♥♥♥
Spoiler
- 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.
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?
- 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.
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...
- 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.
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.
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.
-
- 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.
Posta il codice! Molto probabilmente hai usato "with(obj_palla)" e quindi distrugge tutte le istanze!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...
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: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?
Codice: Seleziona tutto
dir=arctan(y-yprevious, x-xprevious)
move_outside_solid(dir, -1)

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

Codice: Seleziona tutto
dir=point_direction(x, y, xprevious, yprevious)
move_outside_solid(dir, -1)
♥♥♥♥♥♥

♥♥♥♥♥♥

♥♥♥♥♥♥
Spoiler
- 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.
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()
}
}
Step Event:
if xprevious=x{
if yprevious=y{
instance_destroy()
}
}
-
- 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.
Forse per qualche frame alla partenza le palle sono ferme... Prova col mio codice, e vedi come va!
♥♥♥♥♥♥

♥♥♥♥♥♥

♥♥♥♥♥♥
Spoiler
- 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.
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?
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?
-
- 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.
Per esserne sicuri basta che metti nel draw della palla:
Codice: Seleziona tutto
draw_text(speed, x, y-10)
♥♥♥♥♥♥

♥♥♥♥♥♥

♥♥♥♥♥♥
Spoiler
- 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.
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){
}
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){
}
Chi c’è in linea
Visitano il forum: Nessuno e 20 ospiti