Skocz do zawartości

Płynne przechodzenie sterowania między roomami


odex

Rekomendowane odpowiedzi

Po pierwsze witam.

Po drugie zapewne gdzieś już na forum istnieje rozwiązanie tego problemu ale nie mogłem tego znaleźć wpisując różne kombinacje słów więc z góry przepraszam w razie czego.

Po trzecie do rzeczy:

Od jakiegoś czasu robię grę, głównie dla siebie na rozgrzanie własnych komórek, bo proces od pomysłu do wykonania nie wiedząc nic o programowaniu jest naprawdę ciekawe. W każdym razie tej kwestii nie potrafię rozgryźć od dłuższego czasu. Moja gra skupia się na bardzo dużej ilości roomów i przechodzenia między nimi. Problem jest taki, że jeśli trzymam np PRAWO i wpadam w obiekt przenoszący mnie do innego roomu chciałbym by moja postać dalej kontynuowała ruch w prawo w nowym roomie bez konieczności puszczania przycisku PRAWO. Kombinowałem już w najróżniejszymi metodami, z wszystkimi praktycznie kodami z działu keyboard i nic. Jakby ktoś mógł podrzucić rozwiązanie to byłbym wielce wdzięczny. Z góry dzięki za pomoc!

Odnośnik do komentarza
Udostępnij na innych stronach

keyboard_check() lub keyboard_check_direct() w stepie gracza.

Odnośnik do komentarza
Udostępnij na innych stronach

radzę omijać wszelkie persistent - został on źle zdizajnowany i powoduje wiele komplikacji. nie ma co psuc sobie nerwow do tak prostego problemu.

Odnośnik do komentarza
Udostępnij na innych stronach

Zakładam, że Twój ruch odbywa się na zasadzie "Key Press [button]"/"Key Release [button]" + "Step". Jeżeli tak jest, to prawdopodobnie masz tam pewną zmienną sterującą, od której zależy, czy Twoja postać się porusza. Np. "moving = 1", "if(moving == 1) speed = 4" itp.

Taki problem jest do rozwiązania, należy każde "moving" zamienić na "global.moving", zaś w zakładce "Creation code" pierwszego rooma (czyli tego, z którego zaczynasz grę) wpisać linijkę:

GML
if(variable_global_exists("moving") == false) global.moving = 0

Sprawi ona, iż gra zarejestruje zmienną globalną do pamięci, czyli będzie dostępna zawsze, dla każdego obiektu, do końca gry. W tym przypadku interesuje nas tylko, aby była dostępna dla głównej postaci, ale w każdym roomie, co właśnie osiągnęliśmy.

Jeżeli ruch tej postaci napisałeś w inny sposób niż podejrzewam, to można się tym kodem co najwyżej podetrzeć : (

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli nie masz odpowiedzi to się udzielę.

 

Create:

 

GML
prawo = false;

lewo = false;

 

 

Kliknięcie w prawo:

 

GML
prawo = true;

 

Kliknięcie w lewo:

 

GML
lewo = true;

 

Puszczenie w prawo:

 

GML
prawo = false;

 

Puszczenie w lewo:

 

GML
lewo = false;

 

Step:

 

GML
if prawo == true

{alarm[1] = 1;

prawo = false;}

 

else

 

{alarm[3] = 1}

 

if lewo == true

{alarm[2] = 1;

lewo = false'}

 

else

 

{alarm[3] = 1}</span></span>

 

Alarm 1:

Bloczek Move Fixed = Prawa strzałka i prędkość

 

Alarm 2:

Bloczek Move Fixed = Lewa strzałka i prędkość

 

Alarm 3:

Bloczek Move Fixed = Bloczek między wszystkimi strzałkami, czyli stop

 

 

 

Ok odpowiedź na górze jest extra! Lepsza od tej.

@up Ej to nie fair! Ciągle mnie uprzedzasz w odpowiedziach :D

Odnośnik do komentarza
Udostępnij na innych stronach

[...]

 

Step:

 

GML
if prawo == true

{alarm[1] = 1;

prawo = false;}

 

else

 

{alarm[3] = 1}

 

if lewo == true

{alarm[2] = 1;

lewo = false'}

 

else

 

{alarm[3] = 1}</span></span></span></span>

[...]

 

Błagam ciebie, nie stosuj tego wraz z resztą jego kodu :|

 

GML
kLeft = vk_left; // lewa strzałka

kRight = vk_right; // prawa strzałka

movementActive = false; // czy gracz się porusza

if keyboard_check(kLeft) {

// tutaj twoj kod poruszania w lewo, przykladowy:

hspeed = -4;

movementActive = true; // linijka potrzebna

}

if keyboard_check(kRight) {

// tutaj twoj kod poruszania w prawo, przykladowy:

hspeed = 4;

movementActive = true; // linijka potrzebna

}

if movementActive == false {

hspeed = 0; // neguje predkosc w wypadku braku nacisnietych klawiszy

}

 

Walnij to w stepie, i pamiętaj aby pozamieniać twój ruch w prawo/lewo na własny :)

Odnośnik do komentarza
Udostępnij na innych stronach

Dzięki wszystkim za pomoc :)

Funkcja keyboard_check() niestety nie działa, jednak już keyboard_check_direct() działa bez problemu, co jest ironią bo to jedyna komenda chyba, której wcześniej nie próbowałem. Generalnie wiedziałem jak to zakodować, tylko nie wiedziałem, którą funkcje dokładnie użyć by działało płynnie z przejścia room-room. Dzięki jeszcze raz, jak coś się jeszcze pojawi to na pewno się przypomnę :)

Odnośnik do komentarza
Udostępnij na innych stronach

Błagam ciebie, nie stosuj tego wraz z resztą jego kodu :|

 

GML
kLeft = vk_left; // lewa strzałka

kRight = vk_right; // prawa strzałka

movementActive = false; // czy gracz się porusza

if keyboard_check(kLeft) {

// tutaj twoj kod poruszania w lewo, przykladowy:

hspeed = -4;

movementActive = true; // linijka potrzebna

}

if keyboard_check(kRight) {

// tutaj twoj kod poruszania w prawo, przykladowy:

hspeed = 4;

movementActive = true; // linijka potrzebna

}

if movementActive == false {

hspeed = 0; // neguje predkosc w wypadku braku nacisnietych klawiszy

}

 

Walnij to w stepie, i pamiętaj aby pozamieniać twój ruch w prawo/lewo na własny :)

Widzę, że już użytkownik sobie poradził, to nie ma co zmieniać.

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