Skocz do zawartości

Jak zrobić przełączane postaci?


Rekomendowane odpowiedzi

Co znaczy "przełączyć między postaciami"?

Chcesz, żeby po wciśnięciu spacji dało się sterować tą drugą?

Jeśli tak, to wystarczy sobie stworzyć obiekt kontrolujący która postać ma być pod naszą kontrolą i np. to dzięki niemu sterować postacią.

Np.

GML
// Zdarzenie Create

target = standardowy_obiekt;

 

//Zdarzenie Step

/*

Poruszanie się postaci przy pomocy target

np.: if( keyboard_check(...) ) target.x += predkosc;

...

*/

Ten sposób może Ci nie wystarczać.

 

Drugim sposobem (prostszym) jest stworzenie zmiennej globalnej, na podstawie której sprawdzamy który z obiektów ma się teraz poruszać.

GML
/* 1.W jakims obiekcie tworzymy zmienna global.character_index ktora bedzie miala wartosc np. 0

2.Następnie w każdym obiekcie ktorym bedzie mozna sterowac tworzymy zmienna myIndex = jakiejs tam liczbie

3.W zdarzeniu step na samym poczatku sprawdzasz czy global.character_index != myIndex, jesli tak to exit;

jesli nie to ten instrukcja tego if'a zostanie pominieta i kod ponizej sie wykona.

4.Ostatnim krokiem bedzie to, zeby w jakims obiekcie, kiedy wcisniesz spacje zmieniala sie wartosc global.character_index

na ustalona rzecz jasna. Przykladowo, jesli masz dwie postacie o myIndex = 0 i myIndex = 1, to przy wcisnieciu spacji z 0 zmieniasz na 1

a z 1 na 0 itp.

*/

Odnośnik do komentarza
Udostępnij na innych stronach

Nie jestem zbyt dobry w pisaniu gier, ale ja bym to zrobił tak.

Zrobił dwie postacie. W create tej pierwszej dał global.postac = 1. W stepie pierwszej postaci sprawdzałbym, czy global.postac = 1, jeśli tak to możemy nią kierować, chociaż wtedy chyba wszystkie kody pierwsze sprawdzały czy global.postac = 1. Np.

GML
if (global.postac == 1)

{

//chodzenie, strzelanie itd.

}

A w drugiej postaci polegałoby to na tym samym, tyle, że zamiast global.postac = 1, było by 0. Proszę, nie bić, to tylko moja propozycja ;)

EDIT:

Czy w Studio, nie ma teraz tak, że jeśli damy exit, to nie wykonuje całego, kodu, a nie danego bloku kodu? Jeśli tak, to mój sposób nie jest taki głupi ;P

P.S. Myślę, że wiesz jak zrobić zmianę zmiennych, czy zmianę view.

Odnośnik do komentarza
Udostępnij na innych stronach

Zmienna lokalna to zmienna, ktora inicjujesz w evencie Create danego obiektu. Bezposredni dostep masz do niej tylko w tym obiekcie, inne obiekty musza korzystac z referencji. Przyklady:

GML
//Obiekt1, event Create

hp = 100 //inicjacja zmiennej

//Obiekt1, event Step

if(hp < 100) hp += 1 //mozna operowac w dowolny sposob na tej zmiennej

//Obiekt2, event Collision with Obiekt1

other.hp -= 50 //other to specjalna referencja dostepna w evencie Collision, oznacza ona Obiekt1, z ktorym zderza sie Obiekt2

//Obiekt2, Keyboard Press: Space

Obiekt1.hp -= 50 //Obiekt1 jest tutaj referencja, jednakze tylko jednemu Obiekt1 na mapie zmieni sie hp*

with(Obiekt1) hp -= 20 //w tym przypadku hp zmieni sie w kazdym Obiekt1

//*Obiekt1 z najnizszym ID (stworzony najwczesniej)</span>

Zmienna globalna to zmienna, ktora inicjujesz w evencie Create dowolnego obiektu (a takze w Creation Code rooma). Nie ma do niegj bezposredniego dostepu, mozna to zrobic tylko korzystajac z referencji global. Przyklady:

GML
//Obiekt1, event Create

global.hp = 100 //inicjacja zmiennej

//Obiekt1, event Step

if(global.hp < 100) global.hp += 1 //mozna operowac w dowolny sposob na tej zmiennej

//Obiekt2, event Collision with Obiekt1

global.hp -= 50 //teraz nie ma referencji other, gdyz zmienna jest globalna i nie nalezy do zadnego obiektu

//Obiekt2, Keyboard Press: Space

global.hp -= 50 //podobnie jak wyzej

with(Obiekt1) global.hp -= 20 //ten kod sprawi, ze kazdy Obiekt1 na mapie osobno odejmie wartosc zmiennej globalnej (np. 3 obiekty odejma 3*20 = 60)</span>

Odnośnik do komentarza
Udostępnij na innych stronach

Już tłumaczę łopatologicznie. (do osób bardziej zaawansowanych niż ja - przepraszam za błędy)

Tworzysz obiekt i nazywasz go np. o_player_1. Ustawiasz jego sprite. W evencie create, dodajesz klocek, w którym następnie wpisujesz kod. A wygląda on tak:

GML
global.postac = 0
.

Nie wiem czy twoja gra jest top-down, czy 2D z grawitacją. Najlepiej żebyś grę robił w kodzie, nie na klockach (moim zdaniem to trochę bez sensu i tylko utrudnianie sobie, a nie ułatwianie). Przyjmijmy, że w evencie step, masz kod na chodzenie (jeśli chcesz, jest parę przykładów, w FAQ).

GML
if (global.postac == 0)

{

//kod na chodzenie

if (keyboard_check_pressed(vk_space)) // jeśli naciśniesz spacje, zmienia Ci zmienną, która następnie zmieni postać

global.postac = 1

}

Następnie robisz postać 2, która np. nazywasz o_player_2 (myślę, że takie robienie sobie nawyków, jest dobre). I tam w evencie step, czyli tam gdzie powinieneś mieć dużą ilość kodów (przynajmniej tak myślę), postępujesz tak jak w postaci 1 czyli:

GML
if (global.postac == 1)

{

//chodzenie

if (keyboard_check_pressed(vk_space)) // jeśli naciśniesz spacje, zmienia Ci zmienną, która następnie zmieni postać

global.postac = 0

}

Wziąłem pod uwagę, że masz np. dwóch bohaterów w roomie i kiedy ruszasz jednym, to drugi stoi w miejscu. Przynajmniej tak to zrozumiałem

Edit: Robię Ci już przykład. Link!

Odnośnik do komentarza
Udostępnij na innych stronach

A masz moze do platfowmówki :D próbuje wpisać kod na chodzenie ;/

 

 

GML
if (global.postac == 0)

{

//przyklad z GMCLAN FAQ

if place_free(x,y+1)

{gravity = 0.5;}

else

{gravity = 0;}

//zmiana

if (keyboard_check_pressed(vk_shift)) // jeśli naciśniesz shift, zmienia Ci zmienną, która następnie zmieni postać

global.postac = 1

view_object[0] = o_player_1

}

 

 

mam jeszcze (left)

if(place_free(x-4,y))

{

x -= 4;

}

 

 

(right)

if(place_free(x+4,y))

{

x += 4;

}

 

(up)

if (!place_free(x,y+1))

{

vspeed -= 8;

}

Odnośnik do komentarza
Udostępnij na innych stronach

Proszę bardzo, już zrobiłem. Tylko jeśli chodzi o zmienianie sprite, zrobiłem to źle. Ale nie chciałem Ci więcej rzeczy do ogarnięcia dawać. Oto Nowy Link!. Jak coś to pisz, jeśli będę potrafił to pomogę. Zamiast right, up itd, pisze się

GML
if keyboard_check(vk_right)

{

//kod

}

Zobacz w tym co wysłałem.

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ę...