Riot Opublikowano 10 Listopada 2010 Udostępnij Opublikowano 10 Listopada 2010 Chciałem zrobić tak, że jeśli kliknie się LPM na danej instancji to podświetla się ona na zielono. Potem, jeśli znów się na nią kliknie to się odświetla. A jeśli jest podświetlone i kliknie się gdzieś poza instancją, to ta się przenosi tam gdzie się kliknie. Kod: GML { var inst; inst=(100003); if (mouse_check_button_pressed(mb_left)) { //================================================================================ =========================== if ( ( mouse_x < inst.x ) || ( mouse_x > inst.x+32 ) || ( mouse_y < inst.y ) || ( mouse_y > inst.y+64 ) ) { if ( inst.stan == 1 ) { inst.x=mouse_x-16; inst.y=mouse_y-32; inst.image_blend=c_white; inst.stan=0; }; }; //================================================================================ =========================== //================================================================================ =========================== if ( (mouse_x > inst.x) && (mouse_x < inst.x+32) && (mouse_y > inst.y) && (mouse_y < inst.y+64) ) { if ( inst.stan == 1 ) { inst.image_blend=c_white; inst.stan=0; }; if ( inst.stan == 0 ) { inst.image_blend=c_green; inst.stan=1; }; }; //================================================================================ =========================== }; } Problemy: -po pierwszym kliknięciu na instancję wszystko jest ok jednak gdy kliknę drugi raz nie odświetla się ani zmienna stan nie zmienia wartości -po podświetleniu i kliknięciu gdzieś na wolnym miejscu instancja się przenosi ale nie odświetla się a zmienna stan nie zmienia wartości Dodatkowo mam kilka pytań: -Czy zamiast podświetlania da się po prostu zmienić grafikę danej instancji? -W moim kodzie warunki na sprawdzenie czy mysz jest nad obiektem są dobre dla prostokąta, czy dałoby się coś zrobić dla obiektów mniej regularnych, o mniej przewidywalnych kształtach (gwiazdki, wielokąty itp) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 10 Listopada 2010 Udostępnij Opublikowano 10 Listopada 2010 po pierwszym kliknięciu na instancję wszystko jest ok jednak gdy kliknę drugi raz nie odświetla się ani zmienna stan nie zmienia wartości GML if ( inst.stan == 1 ) { inst.image_blend=c_white; inst.stan=0; } else if ( inst.stan == 0 ) { inst.image_blend=c_green; inst.stan=1; } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Mentoss Opublikowano 10 Listopada 2010 Udostępnij Opublikowano 10 Listopada 2010 Czemu ustawiasz id na instancję ?? GML if mouse_check_pressed(mb_left) { if inst and not collision_point(mouse_x,mouse_y,inst,1,1) { inst.x=mouse_x; inst.y=mouse_y; inst.image_blend=c_white; inst=-1; } else if collision_point(mouse_x,mouse_y,obj,1,1) { inst=collision_point(mouse_x,mouse_y,obj,1,1); inst.image_blend=c_green; } } Teraz nie potrzebna jest zmienna stan, a przechowywanie ID w zmiennej pozwoli ci na operowanie danym typem instancji. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PoxiPol Opublikowano 10 Listopada 2010 Udostępnij Opublikowano 10 Listopada 2010 Macie na mysli objekty? Bo troche sie pogubilem. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Mentoss Opublikowano 10 Listopada 2010 Udostępnij Opublikowano 10 Listopada 2010 nie obIekty, tylko instancje. Reprezentują one obiekty podczas gry. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Riot Opublikowano 10 Listopada 2010 Autor Udostępnij Opublikowano 10 Listopada 2010 Dzięki za pomoc. Łącząc wasze odpowiedzi i dodają trochę od siebie stworzyłem takie coś: GML { if (mouse_check_button_pressed(mb_left)) { //================================================================================ =========================== if ( global.inst and not collision_point(mouse_x,mouse_y,global.inst,1,1) ) { if ( global.inst.image_blend == c_green ) { global.inst.x=mouse_x-16; global.inst.y=mouse_y-32; global.inst.image_blend=c_white; global.inst=0; } } //================================================================================ =========================== else //================================================================================ =========================== if ( collision_point(mouse_x,mouse_y,global.inst,1,1) ) { if ( global.inst and global.inst.image_blend == c_green ) { global.inst.image_blend=c_white; global.inst=0; } else if ( instance_position(mouse_x,mouse_y,object0).image_blend == c_white ) { global.inst=instance_position(mouse_x,mouse_y,object0) global.inst.image_blend=c_green; } } //================================================================================ =========================== } } I wygląda na to, że spełnia moje wymagania. Jeszcze raz dzięki. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Mentoss Opublikowano 10 Listopada 2010 Udostępnij Opublikowano 10 Listopada 2010 może ci wywalać errory. W linijce z else if masz wcześniej warunek z global.inst Jeżeli global.inst będzie = 0, to else zadzaiała, a tam masz sprawdzanie wartości zawartej w global.inst ... W tym momencie BOOM! Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Riot Opublikowano 10 Listopada 2010 Autor Udostępnij Opublikowano 10 Listopada 2010 może ci wywalać errory. W linijce z else if masz wcześniej warunek z global.inst Jeżeli global.inst będzie = 0, to else zadzaiała, a tam masz sprawdzanie wartości zawartej w global.inst ... W tym momencie BOOM! Chodzi ci o: GML if ( collision_point(mouse_x,mouse_y,global.inst,1,1) ) Czy o: GML if ( global.inst and global.inst.image_blend == c_green ) ? W każdym razie, mam na mapie obiekt który po utworzeniu ustawia global.inst na 0 właśnie. Czy to wystarczy? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Mentoss Opublikowano 10 Listopada 2010 Udostępnij Opublikowano 10 Listopada 2010 niet. masz: GML if ( global.inst and not collision_point(mouse_x,mouse_y,global.inst,1,1) ) Po czym: GML else if ( collision_point(mouse_x,mouse_y,global.inst,1,1) ) z tego wynika, że jeśli będzie kolizja myszki z ową instancją, bądź zmienna global.inst będzie mniejsza równa zeru, to sprawdzi kolizję myszy z instancją, której ID jest zapisane global.inst. W wypadku gdy wychodzi ta pierwsza opcja, to sprawdzi kolizję z instancją, dla której ID=0. Jak wiemy, ID instancji zaczynają się od 10000 (albo 100000, nie pamiętam). Czy istnieje instancja z ID=0 ? NIE! I tutaj wywala errora. MOJA RADA: GML else if ( collision_point(mouse_x,mouse_y,global.inst,1,1) ) // ZAMIEŃ NA else if (global.inst and collision_point(mouse_x,mouse_y,global.inst,1,1)) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Muuuuczek567 Opublikowano 10 Listopada 2010 Udostępnij Opublikowano 10 Listopada 2010 @Mentoss - źle. GML else if (global.inst and collision_point(mouse_x,mouse_y,global.inst,1,1)) też może wywalić errora, gdyż w przeciwieństwie do większości języków programowania, GML sprawdza każdy warunek, nawet jeśli już wykluczona została możliwość inicjowania kodu. Tak naprawdę powinno być: GML else if(global.inst) if(collision_point(mouse_x,mouse_y,global.inst,1,1)) { kod } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Mentoss Opublikowano 10 Listopada 2010 Udostępnij Opublikowano 10 Listopada 2010 THX za info na przyszłość... Przyda się. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Riot Opublikowano 10 Listopada 2010 Autor Udostępnij Opublikowano 10 Listopada 2010 Hmmm, wyszło mi coś takiego: GML { //================================================================================ =========================== if (mouse_check_button_pressed(mb_left)) { //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++ if ( global.inst ) { if ( not collision_point(mouse_x,mouse_y,global.inst,1,1) and global.inst.image_blend == c_green ) { global.inst.x=mouse_x-16; global.inst.y=mouse_y-32; global.inst.image_blend=c_white; global.inst=0; } if ( global.inst.image_blend == c_green and collision_point(mouse_x,mouse_y,global.inst,1,1) ) { global.inst.image_blend=c_white; global.inst=0; } } else if ( collision_point(mouse_x,mouse_y,instance_position(mouse_x,mouse_y,object0),1,1) ) { if ( instance_position(mouse_x,mouse_y,object0).image_blend == c_white ) { global.inst=instance_position(mouse_x,mouse_y,object0); global.inst.image_blend=c_green; } } //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++ } //================================================================================ =========================== } Może być? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Muuuuczek567 Opublikowano 10 Listopada 2010 Udostępnij Opublikowano 10 Listopada 2010 Wygląda na to, że tak. Najlepiej sam sprawdź. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PoxiPol Opublikowano 11 Listopada 2010 Udostępnij Opublikowano 11 Listopada 2010 @Mentoss - Zauwaz ze instancja nie jest polskim slowem do angielskiego slowa instance, i dlatego prosze nie przyzwyczajaj sie do niego. Mozliwe ze kiedys bedziesz chcial tlumaczyc jakies tutoriale czy cos i bedziesz wszedzie pisal instancja. Ciezko to zrozumiec. Z tego co wiem instancja nawet oznacza po polsku cos kompletnie innego. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Smo Opublikowano 11 Listopada 2010 Udostępnij Opublikowano 11 Listopada 2010 instancja [łac.], każdy z kolejnych stopni w systemie organów sądowych, adm., organizacji społecznych. Znalezione w internetowym Słowniku Języka Polskiego :P Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Muuuuczek567 Opublikowano 11 Listopada 2010 Udostępnij Opublikowano 11 Listopada 2010 Skoro już przy tym jesteśmy... Google Tłumacz: instance rzeczownik 1. przykład 2. instancja 3. przypadek 4. wypadek Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PoxiPol Opublikowano 11 Listopada 2010 Udostępnij Opublikowano 11 Listopada 2010 Tak, sluchaj sie google tlumacza, bo tam w ogole nikt poza polonistami nie moze nic tlumaczyc. Ja tam moge wpisac Krowa a google zaakceptuje, dopoki ktos im tam powie ze to jest zle. 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ę