Ryuk Opublikowano 11 Lutego 2012 Udostępnij Opublikowano 11 Lutego 2012 Po stworzeniu na obiekcie1, obiekt2 wpisuje w nim przy evencie kolizji z obiektem1 następujący kod: GML if mouse_check_button_pressed(mb_left) { if other.sprite_index=spr_glass1 { other.sprite_index=spr_glass2 other.mask_index=spr_glass2 } else if other.sprite_index=spr_glass2 { other.sprite_index=spr_glass3 other.mask_index=spr_glass3 } else if other.sprite_index=spr_glass3 { other.sprite_index=spr_glass4 other.mask_index=spr_glass4 } else if other.sprite_index=spr_glass4 { other.sprite_index=spr_glass1 other.mask_index=spr_glass1} } Jak w kodzie sprite i maska się zmienia, ale gdy w danym roomie mam więcej niż jedną taką grupkę obiektów, gdy kliknę na jeden z obiektów2 to działa to na wszystkich "grupkach". Co w takim razie robię źle? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Tymon Opublikowano 12 Lutego 2012 Udostępnij Opublikowano 12 Lutego 2012 mouse_check_button_pressed sprawdza czy przycisk myszy został kliknięty, ale w całym oknie gry, a nie tylko na obiekcie. By dotyczyło to tylko tego obiektu, który jest pod myszą musisz użyć instance_position. GML if( mouse_check_button_pressed( mb_left ) && instance_position( mouse_x, mouse_y, id ) == id ) { ... Ewentualnie występuje wiele kolizji z obiekt2. Gdybyś wyjaśnił co chcesz osiągnąć byłoby łatwiej. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
taxi_driver Opublikowano 12 Lutego 2012 Udostępnij Opublikowano 12 Lutego 2012 (...)gdy kliknę na jeden z obiektów2 to działa to na wszystkich "grupkach". 1. nie powinno sie uzywac instrukcji przypisania przy instrukcjach warunkowych. tzn zamiast = powinienies w if dawac == 2. jak juz wiesz ze other.sprite to np:spr_glass1 to naturalne w nastepnej linij byloby odnosic sie juz do spr_glass1 a nie kontynuowac other.sprite. Tak byloby chyba przejrzysciej 3 w obiektach do poruszania uzywasz samo x i y czy raczej spr_glass1.x spr_glass1.y? (jesli to drugie to po prostu zmien na x i y) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Tymon Opublikowano 12 Lutego 2012 Udostępnij Opublikowano 12 Lutego 2012 1. nie powinno sie uzywac instrukcji przypisania przy instrukcjach warunkowych. tzn zamiast = powinienies w if dawac == Głupoty gadasz. GML akurat miesza składnie kilku języków, więc to co on napisał jest poprawne. W warunkach = oznacza dokładnie to samo co == w C. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
taxi_driver Opublikowano 12 Lutego 2012 Udostępnij Opublikowano 12 Lutego 2012 Głupoty gadasz. GML akurat miesza składnie kilku języków, więc to co on napisał jest poprawne. W warunkach = oznacza dokładnie to samo co == w C. Nie chce wchodzic w bezuzyteczna sprzeczke, ale to ty gadasz głupoty. uzywanie przypisania = i porównywanie == to kwestia logiki. Logiczne jest tez ze nie napisalem ze NIE MOZNA tak pisac, tylko nie powinno sie, a to sa dwie rozne kwestie. Nie mozna vs Nie powinno. Tak samo mozna napisac caly program w jednej linii bo to bedzie poprawne... tylko czy to bedzie czytelne? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Tymon Opublikowano 12 Lutego 2012 Udostępnij Opublikowano 12 Lutego 2012 Logiczne jest tez ze nie napisalem ze NIE MOZNA tak pisac, tylko nie powinno sie, a to sa dwie rozne kwestie. Nie mozna vs Nie powinno.Powiedziałeś właśnie, że nie powinno się używać = w warunkach, w GML, który czerpie ze składni Pascala tak samo jak i z C. GML w warunkach tak samo traktuje == jak i =, dodatkowo dokumentacja nie precyzuje, który z zapisów jest poprawny i powinien być wykorzystywany - pewnie dlatego, że oba są poprawne i nie ma tutaj konkretnych wymagań. Tak samo mozna napisac caly program w jednej linii bo to bedzie poprawne... tylko czy to bedzie czytelne?Brak związku logicznego z dyskusją. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
taxi_driver Opublikowano 12 Lutego 2012 Udostępnij Opublikowano 12 Lutego 2012 (...) Brak zwiazku logicznego z dyskusją :jezor: ps: i przy okazji moze dla ciebie jako stalego wyjadacza w gml to juz nie ma roznicy, ale dla mnie ktory jestem tu od niedawna jak i dla autora z tematu (z 1 postem na koncie) lepiej jest uczyc sie poprawniejszej formy pisania programow i logiczniejszej ;) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Tymon Opublikowano 12 Lutego 2012 Udostępnij Opublikowano 12 Lutego 2012 i przy okazji moze dla ciebie jako stalego wyjadacza w gml to juz nie ma roznicy, ale dla mnie ktory jestem tu od niedawna jak i dla autora z tematu (z 1 postem na koncie) lepiej jest uczyc sie poprawniejszej formy pisania programow i logiczniejszej ;)Człowieku, nie piszesz w C, nie piszesz w Pascalu tylko w GMLu. Jemu to obojętne. I uwierz, nie tylko dla mnie. Dla większości początkujących to bez różnicy i to nawet lepiej. Dla Ciebie ta korzyść, że będzie Ci łatwiej uczyć się C czy PHP czy innego C like, a minus, że przy Pascalu będziesz szukał błędów przy warunkach. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 12 Lutego 2012 Administratorzy Udostępnij Opublikowano 12 Lutego 2012 mouse_check_button_pressed sprawdza czy przycisk myszy został kliknięty, ale w całym oknie gry, a nie tylko na obiekcie. By dotyczyło to tylko tego obiektu, który jest pod myszą musisz użyć instance_position.GML if( mouse_check_button_pressed( mb_left ) && instance_position( mouse_x, mouse_y, id ) == id ) { ... Ewentualnie występuje wiele kolizji z obiekt2. Gdybyś wyjaśnił co chcesz osiągnąć byłoby łatwiej. Wydaje mi się, że można też zrobić tak: GML if( mouse_check_button_pressed( mb_left ) && position_meeting( mouse_x, mouse_y, self ) ) { ... Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Tymon Opublikowano 12 Lutego 2012 Udostępnij Opublikowano 12 Lutego 2012 Wydaje mi się, że można też zrobić tak:GML if( mouse_check_button_pressed( mb_left ) && position_meeting( mouse_x, mouse_y, self ) ) { ... Dokładnie! I wiesz co, z ciekawości sprawdziłem obie metody wydajnościowo. Zgadnij, która była szybsza. Twoja. O 0,6%, GM jest śmieszny. :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 12 Lutego 2012 Administratorzy Udostępnij Opublikowano 12 Lutego 2012 dopisz za moją == true i sprawdź, moze wcale nie jest szybsza ;) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Tymon Opublikowano 12 Lutego 2012 Udostępnij Opublikowano 12 Lutego 2012 Tam nigdy nie zwróci true tylko id obiektu, jak już != noone, ale też szybciej. :D Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Ryuk Opublikowano 12 Lutego 2012 Autor Udostępnij Opublikowano 12 Lutego 2012 Dziękuję bardzo! Pomysł Tymona jak i gnyska działa dobrze i udało się osiągnąć efekt, który był oczekiwany. Co do sprawy taxi_driver'a nie będę się zagłębiał, ponieważ jestem jeszcze bardzo zielony w tych sprawach (chociaż już troszkę mam styczności z programowaniem). Jeszcze raz wielkie dzięki :D Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 12 Lutego 2012 Udostępnij Opublikowano 12 Lutego 2012 Wiecie co jest jeszcze śmieszniejsze że korzystanie z stałych jest wolniejsze niż z globalnych tymczasówek var var jest szybsze o jakieś 3,4% w GM8.1 w poniższym teście tak jak podzieliłem time_diff/ time_diff2 to wyszło 3,4% GML time = current_time; repeat 100000000 //------------------------------------------------------------------------------------------------------------------ var _x; _x = 2323; jakis_wzorek = _x +_x *_x - _x; //------------------------------------------------------------------------------------------------------------------ time_diff = current_time - time; time2 = current_time; repeat 100000000 //------------------------------------------------------------------------------------------------------------------ jakis_wzorek = c_stala +c_stala *c_stala - c_stala; //------------------------------------------------------------------------------------------------------------------ time_diff2 = current_time - time2; c_stala = 2323 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Tymon Opublikowano 12 Lutego 2012 Udostępnij Opublikowano 12 Lutego 2012 GML time = current_time; repeat 100000000 //------------------------------------------------------------------------------------------------------------------ var _x; _x = 2323; jakis_wzorek = _x +_x *_x - _x; //------------------------------------------------------------------------------------------------------------------ time_diff = current_time - time; time2 = current_time; repeat 100000000 //------------------------------------------------------------------------------------------------------------------ var _jakas_kompletnie_niepotrzebna_tymczasowa; jakis_wzorek = c_stala +c_stala *c_stala - c_stala; //------------------------------------------------------------------------------------------------------------------ time_diff2 = current_time - time2; Taaa... :gnysek: :borek: :ranmus: :psichix: Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 12 Lutego 2012 Udostępnij Opublikowano 12 Lutego 2012 Teraz czasy są równe ale dlaczego tak się stało? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Tymon Opublikowano 12 Lutego 2012 Udostępnij Opublikowano 12 Lutego 2012 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Platyna Opublikowano 12 Lutego 2012 Udostępnij Opublikowano 12 Lutego 2012 Teraz czasy są równe ale dlaczego tak się stało? Zastanawiające, prawda? :D EDIT: Coraz więcej cwaniaków ogląda temat i się głowi. :P Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 12 Lutego 2012 Administratorzy Udostępnij Opublikowano 12 Lutego 2012 To ja podpowiem: (ofc nie zapomnijcie dodać stałej) GML time = current_time; repeat 100000000 //------------------------------------------------------------------------------------------------------------------ var _x; _x = 2323; jakis_wzorek = _x +_x *_x - _x; show_message(string(jakis_wzorek)); //------------------------------------------------------------------------------------------------------------------ time_diff = current_time - time; time2 = current_time; repeat 100000000 //------------------------------------------------------------------------------------------------------------------ jakis_wzorek = c_stala +c_stala *c_stala - c_stala; show_message(string(jakis_wzorek)); //------------------------------------------------------------------------------------------------------------------ time_diff2 = current_time - time2; Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Platyna Opublikowano 12 Lutego 2012 Udostępnij Opublikowano 12 Lutego 2012 gnysek, zepsułeś. A mieliby zagwozdkę. To był za duży hint. : ( Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 12 Lutego 2012 Administratorzy Udostępnij Opublikowano 12 Lutego 2012 Ja myślę, że do jutra by zlali. Wciąż jednak nikt nie podał odpowiedzi ;) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 12 Lutego 2012 Udostępnij Opublikowano 12 Lutego 2012 No co wynik jest taki sam, nie rozumiem teraz o co wam chodzi. edit: Jedyna różnica jest taka że na 1 show_message czekam sekundę a to drugie show_message zamula 14 sekund. Wzór jest przecież taki sam. Ja się zdziwiłem gdy Tymon dodał zupełnie bezcelowe var ( które teoretycznie nic nie powinno robić ) to te 14 sekund skróciło się do 1. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 12 Lutego 2012 Administratorzy Udostępnij Opublikowano 12 Lutego 2012 Widzisz Platyna, mówiłem... Naprawdę dałem tak dużą podpowiedź, ze już większej się nie da, wystarczy odpalić mój kod i od razu widać, co jest źle. Edit: no dobra, GML repeat 10000000 { var _x; } _x = 2323; jakis_wzorek = _x +_x *_x - _x; Teraz widzisz, co źle napisałeś ? :P Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 12 Lutego 2012 Udostępnij Opublikowano 12 Lutego 2012 :D Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Tymon Opublikowano 12 Lutego 2012 Udostępnij Opublikowano 12 Lutego 2012 Chciałbym teraz zobaczyć Twoją minę. :D Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
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ę