NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
Avatar
Max Muller
Člen
Avatar
Max Muller:24.7.2017 12:23

potreboval bych aby reagoval s více objekty (aby se nima nedalo procházet).
ale nevim jak to udelat pls poradte

/// platform physics

var rkey = keyboard_chec­k(vk_right);
var lkey = keyboard_chec­k(vk_left);
var jkey = keyboard_chec­k(vk_up);

// Check for the grond
if (place_meeting(x, y+1, obj_Solid)) {
vspd = 0;
// Jumping
if (jkey) {
vspd = -jspd;
}
} else {
// Gravity
if (vspd < 10) {
vspd += grav;
}

if (keyboard_chec­k_released(vk_up) && vspd < -4) {
vspd = -4;
}
}

// Moving Right
if (rkey) {
if (hspd < spd) {
hspd += fric;
} else {
hspd = spd;
}
}

// Moving left
if (lkey) {
if (hspd > -spd) {
hspd -= fric;
} else {
hspd = -spd;
}
}

// Check for not moving
if ((!rkey && !lkey) || (rkey && lkey)) {
if (hspd != 0) {
if (hspd < 0) {
hspd += fric;
} else {
hspd -= fric;
}
}
}

//Horizontal collisions
if (place_meetin­g(x+hspd, y, obj_Solid)) {
while (!place_meetin­g(x+sign(hspd), y, obj_Solid)) {
x+= sign(hspd);
}
hspd = 0;
}

// Move horizontally
x += hspd;

//Vertical collisions
if (place_meeting(x, y+vspd, obj_Solid)) {
while (!place_meeting(x, y+sign(vspd), obj_Solid)) {
y+= sign(vspd);
}
vspd = 0;
}

// Move vertically
y += vspd;

// Control sprites
if (yprevious != y) {
sprite_index = spr_Player_Jump;
image_speed = 0;
image_index = yprevious;
} else {
if (xprevious != x) {
sprite_index = spr_Player_Walk;
image_speed = .3
} else {
sprite_index = spr_Player_Stand
}
}

// Control the direction the player is facing
if (xprevious < x) {
image_xscale = 1;
} else if (xprevious > x) {
image_xscale = -1;
}

Predem dekuji za opoved :)

 
Odpovědět
24.7.2017 12:23
Avatar
TomBen
Tvůrce
Avatar
Odpovídá na Max Muller
TomBen:24.7.2017 18:46

Kód delší než pár řádků, který nemá komentáře a velmi přehlednou strukturu, nemá téměř smysl vkládat.

Více objektů nejlépe vyřešíš tak, že vytvoříš jeden prázdný objekt ( bez kódu a eventů ), který všem ostatním nastavíš jako Parent. Například objekty Platform_leftside a Platform_rightside budou mít nastaven Parent objekt pojmenovaný třeba All_Platforms. Pak testuješ kolizi s All_Platforms a bude reagovat na Platform_leftside i Platform_rightside.

Nahoru Odpovědět
24.7.2017 18:46
Za posledních 200 miliónů let se nic zvláštního nestalo, akorát dinosauři vymřeli a opice se naučily programovat.
Avatar
David Šercl
Člen
Avatar
Odpovídá na Max Muller
David Šercl:25.7.2017 14:36

Ahoj, není mi přesně jasný o co ti přesně jde. Záleží jaký typ pohybu používáš, pokud používáš vektory, tak musíš přesně nadefinovat kolizi, tady máš přiklad, pro pohyb nahoru:

if place_free(x,y-16) and keyboard_check(vk_up){//klavesy jsou na tobě
        //zjišťuje jestli se na souřadnicích x,y-16 nenachází žádná instance označená jako SOLID
        y-=1;
}
Editováno 25.7.2017 14:37
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
25.7.2017 14:36
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.