Problema con collisioni top down

Hai una curiosità o un problema con Game Maker? Domanda e ti sarà risposto!
Rispondi
Avatar utente
Kimera_V2
Membro
Messaggi: 118
Iscritto il: 27/06/2013, 14:11
Uso: GM:Studio 1.4 Pro
Località: CPU
Contatta:

Problema con collisioni top down

Messaggio da Kimera_V2 »

Salve raga ho un problema nel creare le collisioni in un gioco top down, ho provato di tutto ma con scarsi risultati.
Per muovere il player uso questo codice in step event:

Codice: Seleziona tutto

image_angle=direction
image_speed=0.1
if keyboard_check(vk_right){direction-=4}
if keyboard_check(vk_left){direction+=4}
if keyboard_check(vk_up){speed=vel_camminata}
if keyboard_check(vk_down){speed=-vel_camminata}
if keyboard_check(vk_nokey){speed=0}
Il player ha una mask tonda per le collisioni di 24x24 con x e y centrati.
Ora come posso fare a gestire le collisioni?

Avatar utente
SP Games
Membro
Messaggi: 241
Iscritto il: 27/06/2014, 11:21
Specialità: Programmer
Uso: GM:Studio 1.4 Pro
Contatta:

Re: Problema con collisioni top down

Messaggio da SP Games »

Io, giusto per iniziare, mi riporterei ad una mask rettangolare, che semplifica un casino tutto.
A quel punto devi solo scomporre il movimento in velocità verticale e orizzontale e fare 2 check separati delle collisioni, in pratica usi un qualsiasi codice per platform ma senza l'uso della gravità, che nel tuo caso è zero.
Il codice di Shaun Spalding con poche modifiche dovrebbe già andare benone ad esempio

Avatar utente
Kimera_V2
Membro
Messaggi: 118
Iscritto il: 27/06/2013, 14:11
Uso: GM:Studio 1.4 Pro
Località: CPU
Contatta:

Re: Problema con collisioni top down

Messaggio da Kimera_V2 »

Grazie per il tuo aiuto, in rete ho trovato questo esempio e credo che faccia al caso mio.
Esempio:
https://www.youtube.com/watch?v=J1cM7kKFoCg
Spero possa servire.
Ho prova l'esempio e funziona solo che il player non cammina all indietro, come posso fare a farlo?

Codice: Seleziona tutto

Create Event:
//Declaring vars
angle = 0
cspeed = 0
 
Draw Event:
draw_sprite_ext(spr_char,0,x,y,1,1,angle,-1,1)
 
Step Event:
if keyboard_check(vk_left){
    angle += 10
}
 
if keyboard_check(vk_right){
    angle -= 10
}
 
if keyboard_check(vk_up){
    if cspeed < 8{
        cspeed += 0.5
    }
}
 
if keyboard_check(vk_down){
    if cspeed > 0{
        cspeed -= 0.5
    }
}
 
i = 0
while(i < cspeed){
    i+=1
    if place_free(x,y + lengthdir_y(1,angle)){
        y = y + lengthdir_y(1,angle)
    }
   
    if place_free(x + lengthdir_x(1,angle),y){
        x = x + lengthdir_x(1,angle)
    }
}
Questo è il codice che ho usato.

Rispondi

Chi c’è in linea

Visitano il forum: Nessuno e 33 ospiti