Skocz do zawartości

[GMS] Wróg chodzi w jedna strone i nie obraca sie


Cygnus

Rekomendowane odpowiedzi

Cześć wszystkim mam problem z wrogiem w mojej grze.

Otóż idzie on tylko w jednym kierunku,nie obraca się i ucieka za plansze:/

Nie wiem,co robię nie tak:/

Proszę pomóżcie,bo ręce mi już opadają.

Chciałbym,żeby wróg chodził w lewo i w prawo i zatrzymywał się na krawędzi,i obracał się

no taki inteligentny jego ruch;)

Acha i jak utworzyć pasek energi i życie

 

 

O to kod wroga;)

 

CREATE

 

image_speed = 0;

image_index = 0;

 

 

wrog_dead = 0;

zabicie_wroga = 0;

randomowy_ruch_wroga = choose(1,2);

 

if randomowy_ruch_wroga = 1 hspeed = 4;

if randomowy_ruch_wroga = 2 hspeed = -4;

 

 

///initialize Variables

 

dir = -1;

movespeed = 1;

grav = 0.2;

hsp = 0;

vsp = 0;

 

 

STEP

 

 

 

 

 

hsp = dir * movespeed;

vsp += grav;

 

 

///Horizontal Collision

if (place_meeting(x+hsp,y,obj_Collision))

{

 

while (!place_meeting(x+sign(hsp),y,obj_Collision))

{

x+= sign(hsp);

}

hsp = 0;

dir *= -1;

 

}

 

x += hsp;

 

 

///Vertical Collision

if (place_meeting(x,y+vsp,obj_Collision))

{

 

while (!place_meeting(x,y+sign(vsp),obj_Collision))

{

y += sign(vsp);

}

vsp = 0;

}

y += vsp;

 

///Enemy Collision

if (place_meeting(x,y,obj_player))

{

if (obj_player.y < y-16)

{

with (obj_player) vsp =-jumping;

instance_destroy();

}

else

{

 

game_restart();

}

 

}

Odnośnik do komentarza
Udostępnij na innych stronach

Tutaj masz jedynie odbicie od ścian zrobione a nie odbicie od krawędzi.

 

Przeciwnik chodzi w jedną stronę przez to:

GML
randomowy_ruch_wroga = choose(1,2);

 

if randomowy_ruch_wroga = 1 hspeed = 4;

if randomowy_ruch_wroga = 2 hspeed = -4;

 

To jest błędne, chciałeś zrobić by losowo się wybierał kierunek startowy ale u ciebie zmienna, która o tym decyduje nazywa się "dir"

 

Więc zamiast tego powinno być:

GML
dir = choose(-1, 1);
Odnośnik do komentarza
Udostępnij na innych stronach

Tak przy okazji, istnieje funkcja move_outside_solid(dir,maxdist), ktora jest w stanie zastapic Twoja petle while.

GML
if (place_meeting(x+hsp,y,obj_Collision))

{

move_outside_solid((1+sign(hsp))*90,abs(hsp)) //(1+sign(hsp))*90 oznacza, ze jesli hsp jest wieksze od 0, dir bedzie rowne 0, hsp < 0 -> dir = 180

hsp = 0;

dir *= -1; //to nie to dir co wyzej, mozesz zostawic jak jest

}

Jezeli obj_Collision nie ma zaznaczone solid, to albo zaznacz, albo zamien move_outside_solid na move_outside_all (w tym przypadku Twoj obiekt bedzie unikal wszystkich obiektow)

 

Tak samo mozesz usunac petle w Vertical Collision i Enemy Collision, ale bedziesz musial uzyc innych argumentow w funkcji, jezeli nie jestes gotowy na takie wyzwanie, mozesz zostac przy swoich petlach

Odnośnik do komentarza
Udostępnij na innych stronach

Dzięki Chłopaki,walczę z tym,ale dalej mam problem,pozmieniałem,tak jak opisaliście to.I teraz,to tak wróg stoi w miejscu,jak na niego skacze ok to znika,jak do niego podejdę,to ja gnie ok.Ale Mam problem dalej z tym żeby wróg chodził na wyznaczonym odcinku i się obracał,a nie w jednym kierunku chodził.No teraz obecnie stoi wróg.

A i sprawa jak stworzyć wskaźnik energii,i życia.

I np jak podejdę do wroga,to mi zabierze trochę energii,

I jeszcze taka sprawa.Mam obiekt kolce i chciałbym,że jak na nie spadnę,to zginę i odejmie mi jedno życie.

Solid mam zaznaczone u wroga;)

 

 

Mój kod teraz wroga tak wygląda:)

 

CREATE

 

image_speed = 0;

image_index = 0;

 

 

wrog_dead = 0;

zabicie_wroga = 0;

dir = choose(-1, 1);

 

 

if dir= 1 hspeed = 4;

if dir = 2 hspeed = -4;

 

 

 

 

 

///initialize Variables

 

dir = -1;

movespeed = 1;

grav = 0.2;

hsp = 0;

vsp = 0;

 

 

 

STEP

 

hsp = dir * movespeed;

vsp += grav;

 

 

///Horizontal Collision

if (place_meeting(x+hsp,y,obj_Collision))

{

 

 

move_outside_all((1+sign(hsp))*90,abs(hsp))

{

x+= sign(hsp);

}

hsp = 0;

dir *= -1;

 

}

 

x += hsp;

 

 

///Vertical Collision

if (place_meeting(x,y+vsp,obj_Collision))

{

 

move_outside_all((1+sign(hsp))*90,abs(hsp))

{

y += sign(vsp);

}

vsp = 0;

}

y += vsp;

 

///Enemy Collision

if (place_meeting(x,y,obj_player))

{

if (obj_player.y < y-16)

{

with (obj_player) vsp =-jumping;

instance_destroy();

}

else

{

 

game_restart();

}

 

}

Odnośnik do komentarza
Udostępnij na innych stronach

Nie no ale po co ty znowu te swoje:

if dir= 1 hspeed = 4;

if dir = 2 hspeed = -4;

 

Tutaj tych zmiennych nie używaj bo ci popsują fizykę. hspeed u ciebie to hsp, vspeed to vsp

 

GML (create)
image_speed = 0;

image_index = 0;

wrog_dead = 0;

zabicie_wroga = 0;

 

///initialize Variables

dir = choose(-1, 1);

movespeed = 1; // jak chcesz zmienic predkosc na 4 to tutaj

grav = 0.2;

hsp = 0;

vsp = 0;

Odnośnik do komentarza
Udostępnij na innych stronach

No Dobra zrobiłem tak,i nadal wróg stoi:/ Nie mam już pomysłów:/

Solid nic nie daje,zaznaczam i to samo jak nie zaznaczony:/

 

kod tak wygląda wroga

 

CREATE

 

 

image_speed = 0;

image_index = 0;

 

 

wrog_dead = 0;

zabicie_wroga = 0;

 

 

 

//initialize Variables

 

dir = choose(-1, 1);

movespeed = 1;

grav = 0.2;

hsp = 0;

vsp = 0;

 

 

 

STEP

 

 

 

 

 

hsp = dir * movespeed;

vsp += grav;

 

 

///Horizontal Collision

if (place_meeting(x+hsp,y,obj_Collision))

{

 

 

move_outside_all((1+sign(hsp))*90,abs(hsp))

{

x+= sign(hsp);

}

hsp = 0;

dir *= -1;

 

}

 

x += hsp;

 

 

///Vertical Collision

if (place_meeting(x,y+vsp,obj_Collision))

{

 

move_outside_all((1+sign(hsp))*90,abs(hsp))

{

y += sign(vsp);

}

vsp = 0;

}

y += vsp;

 

///Enemy Collision

if (place_meeting(x,y,obj_player))

{

if (obj_player.y < y-16)

{

with (obj_player) vsp =-jumping;

instance_destroy();

}

else

{

 

game_restart();

}

 

}

Odnośnik do komentarza
Udostępnij na innych stronach

No to wobec tego co mam wpisać w te miejsce żeby było dobrze? tak żeby ten wróg wreszcie działał jak należy:)

Chodził grzecznie nie koniecznie krokiem tanecznym;) np idzie sobie po platformie i zatrzymuje się po czym obraca i znowu zatrzymuje sie przy krawędzi i obraca,o takie coś mi chodzi.

Ktoś mógłby mi to napisać w całości?

Odnośnik do komentarza
Udostępnij na innych stronach

Tak jak miałeś poprzednio while (!place_meeting(x+sign(hsp),y,obj_Collision)) oraz while (!place_meeting(x,y+sign(vsp),obj_Collision))

 

Tylko to będzie ci go odbijać od ścian, więc jak chcesz to możesz nad krawędziami zrobić niewidzialny obiekt obj_Collision i od niego by się odbijał.

Odnośnik do komentarza
Udostępnij na innych stronach

No dobrze wróciłem do poprzednich ustawień,zrobiłem tak jak napisałeś,fakt teraz chodzi wróg,tylko odbija się od obj_Collision.Postawiłem na krawędziach stworzony nowy obj_niewidzialny.I nic:/ Przechodzi przez ten obiekt:/Kurcze wpisywałem nawet w kodzie tutaj dodatkową ścieżkę

 

w horizontal collision i w vertical collision

GML
if (place_meeting(x+hsp,y,obj_niewidzialny))

 

while (!place_meeting(x+sign(hsp),y,obj_niewidzialny

i w vertical collision tez tak wpisalem,to teraz spada objekt z platformy:/

Aha i jeszcze jak zrobić wróg był animowany tak jak mój bohater,wróg też ma ruchome obrazki

GML
hsp = dir * movespeed;

vsp += grav;

 

 

///Horizontal Collision

if (place_meeting(x+hsp,y,obj_Collision))

{

 

while (!place_meeting(x+sign(hsp),y,obj_Collision))

{

x+= sign(hsp);

}

hsp = 0;

dir *= -1;

 

}

 

x += hsp;

 

 

///Vertical Collision

if (place_meeting(x,y+vsp,obj_Collision))

{

 

while (!place_meeting(x,y+sign(vsp),obj_Collision))

{

y += sign(vsp);

}

vsp = 0;

}

y += vsp;

 

///Enemy Collision

if (place_meeting(x,y,obj_player))

{

if (obj_player.y < y-16)

{

with (obj_player) vsp =-jumping;

instance_destroy();

}

else

{

 

game_restart();

}

 

}

Odnośnik do komentarza
Udostępnij na innych stronach

Zrobiłem tak,Wróg się odbija,z parowałem obj_niewidzialny z obj_Collision,ale problem pozostaje z obracaniem wroga:/ fakt odbija się od niewidocznych obiektów,ale nie obraca się:/ i jeszcze za szybko przebiera nogami:/

A i sprawa niewidzialnego obiektu,fakt odznaczyłem obj//-niewidzialny,ale jak bohater idzie,to go wyczuwa:/ a nie da się,żeby tylko obj_enemy go wyczuwał,a dla bohatera byłby obiektem neutralnym i jak koło niego by przechodził,to nie kolidowałby z nim.

 

No i kwestia tak jak wspomniałem żyć,chcę np stworzyć życie np 5 żyć jak to zrobić?

i że jak spadne na kolce i na wroga to mi odejmie życie

 

 

 

 

 

 

 

STEP

 

hsp = dir * movespeed;

vsp += grav;

image_speed = 1;

 

///Horizontal Collision

if (place_meeting(x+hsp,y,obj_Collision))

{

 

while (!place_meeting(x+sign(hsp),y,obj_Collision))

{

x+= sign(hsp);

}

hsp = 0;

dir *= -1;

 

}

 

x += hsp;

 

 

///Vertical Collision

if (place_meeting(x,y+vsp,obj_Collision))

{

 

while (!place_meeting(x,y+sign(vsp),obj_Collision))

{

y += sign(vsp);

}

vsp = 0;

}

y += vsp;

 

///Enemy Collision

if (place_meeting(x,y,obj_player))

{

if (obj_player.y < y-16)

{

with (obj_player) vsp =-jumping;

instance_destroy();

}

else

{

 

game_restart();

}

 

}

 

 

 

 

CREATE

 

 

wrog_dead = 0;

zabicie_wroga = 0;

dir = choose(-1, 1);

 

 

 

 

 

 

///initialize Variables

 

dir = -1;

movespeed = 1;

grav = 0.2;

hsp = 0;

vsp = 0;

Odnośnik do komentarza
Udostępnij na innych stronach

Dobra to zrób inaczej, cofnij tego parenta. Tak jak wcześniej było i teraz zmodyfikuj kod tak:

GML
///Horizontal Collision

if (place_meeting(x+hsp,y,obj_Collision) || place_meeting(x+hsp,y,obj_niewidzialny))

{

while (!place_meeting(x+sign(hsp),y,obj_Collision))

{

x+= sign(hsp);

}

hsp = 0;

dir *= -1;

}

 

A prędkość:

GML
image_speed = movespeed*modyfikator;

image_speed działa tak że wartość 1 to normalna prędkość animacji czyli jedna klatka na jeden step. Jak chcesz spowolnić to zmniejsz tą wartość.

 

Obracanie zrobisz tak:

GML (step)
if (hsp != 0) image_xscale = sign(hsp);

image_xscale scaluje ci obrazek. Normalna wartość to 1. Wartość -1 spowoduje że obrazek się odbije w drugą stronę.

sign() zwraca:

1 gdy hsp > 0,

-1 gdy hsp < 0,

0 gdy hsp = 0 stąd ten warunek if (hsp != 0) by nigdy nie było zera bo wtedy postać zniknie

Odnośnik do komentarza
Udostępnij na innych stronach

Animacja już chodzi dobrze...ale dalej problem z obracaniem tego wroga:/ chodzi w jednym kierunku,no i dałem obiekt niewidzialny na krawędziach i się nie odbija od niego.Nie wiem jak to mam zrobić:/ Wiem,że mi to tłumaczysz,ale nie wiem jak to zrobić żeby to działało normalnie.Animacja wroga już jest w porządku idzie sobie normalnie w moją stronę,ale nie reaguje na obj_niewidzialny,który postawiłem na krawędziach i w pobliżu wroga:/No i nie obraca się ten wróg:/ jeden kierunek obrał sobie i tyle:/

Proszę może napisz mi konkretnie co,gdzie mam wpisać:/ Widzę,że ogarnięty jesteś w programowaniu.Ja jestem typowym sieciowcem,a programowanie zajmuje się hobbystycznie,bo chce stworzyć swoją grę.

 

 

o to kod wroga:

 

CREATE

 

 

 

wrog_dead = 0;

zabicie_wroga = 0;

dir = choose(-1, 1);

 

 

 

 

 

 

///initialize Variables

 

dir = -1;

movespeed = 0.5;

grav = 0.2;

hsp = 0;

vsp = 0;

 

 

 

STEP

 

hsp = dir * movespeed;

vsp += grav;

image_speed = 0.03;

if (hsp != 0) image_xscale = sign(hsp);

image_xscale = -1;

image_xscale = 1;

 

///Horizontal Collision

if (place_meeting(x+hsp,y,obj_Collision) || place_meeting(x+hsp,y,obj_niewidzialny))

{

while (!place_meeting(x+sign(hsp),y,obj_Collision))

{

x+= sign(hsp);

}

hsp = 0;

dir *= -1;

}

 

x += hsp;

 

 

///Vertical Collision

if (place_meeting(x,y+vsp,obj_Collision))

{

 

while (!place_meeting(x,y+sign(vsp),obj_Collision))

{

y += sign(vsp);

}

vsp = 0;

}

y += vsp;

 

///Enemy Collision

if (place_meeting(x,y,obj_player))

{

if (obj_player.y < y-16)

{

with (obj_player) vsp =-jumping;

instance_destroy();

}

else

{

 

game_restart();

}

 

}

 

 

 

 

 

 

 

Odnośnik do komentarza
Udostępnij na innych stronach

Myśl nad tym co wpisujesz, patrz co w create zrobiłeś, pogrubię ci:

 

Widzisz błąd?

wrog_dead = 0;

zabicie_wroga = 0;

dir = choose(-1, 1);

 

///initialize Variables

dir = -1;

movespeed = 0.5;

grav = 0.2;

hsp = 0;

vsp = 0;

 

Oczywiście to nie rozwiązuje problemu z odbijaniem :/

I czy na obj_niewidzialnym postać się zatrzymuje czy zupełnie nic?

 

EDIT:

Zaraz, co? xDDDD

GML
if (hsp != 0) image_xscale = sign(hsp);

image_xscale = -1;

image_xscale = 1;

Ty chyba nie znasz absolutnych podstaw. Proponuję Wejść w help > Reference > GML Overview przeczytać i zrozumieć na spokojnie ten dział.

Odnośnik do komentarza
Udostępnij na innych stronach

Myśl nad tym co wpisujesz, patrz co w create zrobiłeś, pogrubię ci:

 

Widzisz błąd?

 

 

Oczywiście to nie rozwiązuje problemu z odbijaniem :/

I czy na obj_niewidzialnym postać się zatrzymuje czy zupełnie nic?

 

EDIT:

Zaraz, co? xDDDDGMLif (hsp != 0) image_xscale = sign(hsp);

image_xscale = -1;

image_xscale = 1;

Ty chyba nie znasz absolutnych podstaw. Proponuję Wejść w help > Reference > GML Overview przeczytać i zrozumieć na spokojnie ten dział.

 

No właśnie panie Lordzie postać wroga nie zatrzymuje się na obj_niewidzialny:) Idzie sobie dalej jakby niby nic;) ot ucieka mi;) i nie chce się obrócić;)

Przecież napisałem,że hobbystycznie się tym zajmuje;) programowanie dla mnie jest magią;) dlatego od wielu lat siedzę w sieciach zawodowo;)

Domyślam się,że mam błąd,no i nie wiem jak go rozwiązać ten wróg jest nie możliwy;)

 

Dobra,a powiedz mi,co mam zrobić,że np idę sobie postacią dochodzę do końca pokoju,i chce płynnie przejść do drugiego?co mam zrobić wpisać co gdzie;)?

Odnośnik do komentarza
Udostępnij na innych stronach

Wszyscy się tutaj hobbistycznie tym zajmują.

A powiedz jeszcze jak zrobiłeś niewidzialny obiekt. Ustawiłeś sprit taki jak mają te obj_collision tylko odznaczyłeś visible?

Czy nie ustawiłeś w ogóle żadnego spritu.

 

Możesz nacisnąć "show information" i wkleić tutaj.

Odnośnik do komentarza
Udostępnij na innych stronach

Tylko odznaczyłem Visible:)

 

 

Information about object: obj_enemy Sprite: spr_enemy

Solid: false

Visible: true

Depth: 0

Persistent: false

Parent:

Mask:

No Physics Object Create Event:

execute code: wrog_dead = 0; zabicie_wroga = 0; dir = choose(-1, 1); ///initialize Variables dir = -1; movespeed = 0.5; grav = 0.2; hsp = 0; vsp = 0; Step Event:

execute code: hsp = dir * movespeed; vsp += grav; image_speed = 0.03; if (hsp != 0) image_xscale = sign(hsp); ///Horizontal Collision if (place_meeting(x+hsp,y,obj_Collision) || place_meeting(x+hsp,y,obj_niewidzialny)) { while (!place_meeting(x+sign(hsp),y,obj_Collision)) { x+= sign(hsp); } hsp = 0; dir *= -1; } x += hsp; ///Vertical Collision if (place_meeting(x,y+vsp,obj_Collision)) { while (!place_meeting(x,y+sign(vsp),obj_Collision)) { y += sign(vsp); } vsp = 0; } y += vsp; ///Enemy Collision if (place_meeting(x,y,obj_player)) { if (obj_player.y < y-16) { with (obj_player) vsp =-jumping; instance_destroy(); } else { game_restart(); } }

Odnośnik do komentarza
Udostępnij na innych stronach

Tylko odznaczyłem Visible:)

 

Obj_enemy

 

CREATE

 

 

 

 

wrog_dead = 0;

zabicie_wroga = 0;

dir = choose(-1, 1);

 

 

 

 

 

 

///initialize Variables

 

dir = -1;

movespeed = 0.5;

grav = 0.2;

hsp = 0;

vsp = 0;

 

STEP

 

hsp = dir * movespeed;

vsp += grav;

image_speed = 0.03;

if (hsp != 0) image_xscale = sign(hsp);

 

 

 

 

 

 

 

///Horizontal Collision

if (place_meeting(x+hsp,y,obj_Collision) || place_meeting(x+hsp,y,obj_niewidzialny))

{

while (!place_meeting(x+sign(hsp),y,obj_Collision))

{

x+= sign(hsp);

}

hsp = 0;

dir *= -1;

}

 

x += hsp;

 

 

///Vertical Collision

if (place_meeting(x,y+vsp,obj_Collision))

{

 

while (!place_meeting(x,y+sign(vsp),obj_Collision))

{

y += sign(vsp);

}

vsp = 0;

}

y += vsp;

 

///Enemy Collision

if (place_meeting(x,y,obj_player))

{

if (obj_player.y < y-16)

{

with (obj_player) vsp =-jumping;

instance_destroy();

}

else

{

 

game_restart();

}

 

}

Odnośnik do komentarza
Udostępnij na innych stronach

zapisz sobie kopie tego projektu. W kopii projektu zamien

GML
///Horizontal Collision

if (place_meeting(x+hsp,y,obj_Collision) || place_meeting(x+hsp,y,obj_niewidzialny))

{

while (!place_meeting(x+sign(hsp),y,obj_Collision))

{

x+= sign(hsp);

}

hsp = 0;

dir *= -1;

}

na

GML
///Horizontal Collision

if (place_meeting(x+hsp,y,obj_Collision) || place_meeting(x+hsp,y,obj_niewidzialny))

{

hsp = 0;

dir *= -1;

}

Jezeli to nie zadziala, sprawdz, czy masz ustawiona maske we wrogu i w obj_Collision, jezeli nie, ustaw na <same as the sprite>. Funkcja place_meeting() nie dziala, jezeli obiekty biorace udzial we sprawdzaniu kolizji nie maja ustawionej maski

Odnośnik do komentarza
Udostępnij na innych stronach

Zadziałało,dałem maskę w obj_collision i obj_enemy.Wrog sie obraca odbija od niewidzialnego obiektu obj_niewidzialny.

Ale teraz mam problem z bohaterem,co prawda chodzi prawidlowo lewo w prawo,ale teraz mi skok nie dziala bohatera jak tak zrobilem:/

 

Kod bohatera

obj_Player

 

 

CREATE

 

start_x = x;

start_y = y;

 

phy_fixed_rotation = true;

 

move_speed = 200;

max_xspeed = 2;

jumping = false;

jump_force = -110;

 

 

 

 

STEP

 

phy_speed_x = max(min(phy_speed_x, max_xspeed) , -max_xspeed);

 

if(phy_speed_x > 0.1 || phy_speed_x < -0.1) {

sprite_index = spr_Player_Running;

 

} else{

sprite_index = sprPlayer;

 

}

if (phy_speed_y > 1.2) {

sprite_index = spr_Player_Falling;

}

 

 

image_speed = phy_speed_x / 10;

 

background_x[0] = -phy_position_x / 5;

background_x[0] = -phy_position_y / 5;

 

 

background_x[1] = -phy_position_x / 5;

background_x[1] = -phy_position_y / 5;

 

 

press(up)

 

first jump

 

///First Jump

if (place_meeting(x,y+1, obj_Collision))

 

{

jumping = true;

alarm [0] = 1;

physics_apply_impulse(x,y,0, jump_force);

show_debug_message("First Jump")

}

 

 

Secound Jump

 

/// Secound Jump

if(jumping && alarm[0] < 0){

 

 

 

physics_apply_impulse(x,y,0, jump_force);

jumping = false;

show_debug_message("Double Jump")

}

 

 

 

 

 

Odnośnik do komentarza
Udostępnij na innych stronach

W edytorze nie ma informacji debug_messag.

Ale pokombinwałem z maską i ustawiłem u obj_player maske z obj_collision czyli spr_wall i teraz skacze bohater mój.

Tylko,że pewnie tylko wyłącznie będzie skakał na tym obiekcie czyli obj_collision (spr_wall) a na reszte obiektach nie będę mógł wykonać skoku.

 

A powiedz mi co mam zrobić jak mam zrobione dwa pokoje roomy no i chcę z pierwszego pokoju przejść na drugi,w takim sensie,że idę sobie po pokoju dochodzę do końca pokoju no i chcę żeby się płynnie na drugi pokój dostać,wiesz w końcu to platformówka;) a plansza czyli świat nie składa się u mnie z jednego pokoju.

 

A tak ogólnie,to dziękuję,jesteś w porządku,no i masz cierpliwość;) może będzie okazja w ramach rewanżu z czasem na piwo się wybrać;]

Odnośnik do komentarza
Udostępnij na innych stronach

Cos w stylu Mega Mana? Tu jest pewien problem, w GM od 8.1 w dol bylo to calkiem proste, tam mialo sie dostep do room transitions, czyli efektow przejscia miedzy roomami. W GM:S jest to juz niemozliwe, trzeba takie cos zrobic recznie, a to wymaga sporo czasu i wiedzy o tym, jak dzialaja 'surfaces'.

Duzo prosciej jest z efektem zaciemnienia podczas wychodzenia z rooma i rozjasniania podczas wchodzenia do rooma, po prostu rysujesz czarny prostokat na caly ekran i plynnie zmieniasz przezroczystosc tego prostokata, a w miedzyczasie zmieniasz room.

Odnośnik do komentarza
Udostępnij na innych stronach

O dokładnie coś w stylu Megamana itp;)

No dobrze;) tutaj gościu pokazał na filmiku jak to zrobić w GM Studio..ale coś mi nie wychodzi,skąd on ma spr_warp :/ Jak to zrobić..Jak widać można skoro gościowi na GM studio to działa.

 

 

 

A i jeszcze kwestia mojego wroga co prawda ładnie chodzi w jedną i w drugą stronę,tylko zastanawiam się,dlaczego on do tyłu sobie chodzi;)

Odnośnik do komentarza
Udostępnij na innych stronach

A, o takie przejscia ci chodzi. Myslalem, ze chciales sam efekt graficzny przejscia do kolejnego rooma.

Najprosciej jest stworzyc obiekt, na ktory jezeli wejdziesz, przenosi cie do danego rooma. Daj mu sprite'a i maske, ale odznacz 'visible'. Trzeba tez zrobic zmienna globalna, ktora zapamieta, w ktorym roomie byles ostatnio. Dzieki temu bedzie wiadomo, w ktorym miejscu ustawic bohatera podczas przenoszenia do innego roomu.

 

Co do obracania sie wroga, spojrz raz jeszcze na ten kod:

GML
if (hsp != 0) image_xscale = sign(hsp);

image_xscale = -1;

image_xscale = 1;

i zastanow sie, co jest nie tak.

Odnośnik do komentarza
Udostępnij na innych stronach

No właśnie się zastanawiam co tu jest nie tak:/

 

 

GMLif (hsp != 0) image_xscale = sign(hsp);

image_xscale = -1;

image_xscale = 1;

 

 

Mam teraz tak:

 

GML

hsp = dir * movespeed;

vsp += grav;

image_speed = 0.03;

if (hsp != 0) image_xscale = sign(hsp);

 

 

 

 

 

 

 

///Horizontal Collision

if (place_meeting(x+hsp,y,obj_Collision) || place_meeting(x+hsp,y,obj_niewidzialny))

{

hsp = 0;

dir *= -1;

}

 

x += hsp;

 

 

///Vertical Collision

if (place_meeting(x,y+vsp,obj_Collision))

{

 

while (!place_meeting(x,y+sign(vsp),obj_Collision))

{

y += sign(vsp);

}

vsp = 0;

}

y += vsp;

 

///Enemy Collision

if (place_meeting(x,y,obj_player))

{

if (obj_player.y < y-16)

{

with (obj_player) vsp =-jumping;

instance_destroy();

}

else

{

 

game_restart();

}

 

}

 

 

 

Ok stworze obiekt maska i sprite to mam mu dać swojego bohatera? czyli obj_player w masce i sprite?

Ta zmienna globalna dokładnie,rozumiem,że ma być w tym obiekcie co stworze do przenoszenia się do innego roomu,ale co mam tam dokładnie wpisać;)

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...