Sernat Opublikowano 23 Sierpnia 2011 Udostępnij Opublikowano 23 Sierpnia 2011 Ponieważ funkcja exit przerywa eventa więc reszta kodu nie będzie wykonana, dla tego muszę wykonać with jeszcze raz. Edie, no po tobie takiego głupiego posta się nie spodziewałem ;) . W ogóle, czy ty nie miałeś na myśli "break", a nie "exit"? Nie mam siły ingerować w kod. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ediepl Opublikowano 23 Sierpnia 2011 Udostępnij Opublikowano 23 Sierpnia 2011 oj sernat ja po tobie też :jezor: EDIT:break przerwało by tylko jedną pętle for, a druga by działała dalej. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Sernat Opublikowano 23 Sierpnia 2011 Udostępnij Opublikowano 23 Sierpnia 2011 A exit kompletnie psuje teorię, bo aplikacja polega na ilości klatek, nie ilości kroków w pętli. Różnica między Stepem a pętlą jest znacząca. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Konrad-GM Opublikowano 23 Sierpnia 2011 Udostępnij Opublikowano 23 Sierpnia 2011 Bez sensu, po cholerę w jednym stepie ustawiasz visible na true, a następnie na false? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ediepl Opublikowano 23 Sierpnia 2011 Udostępnij Opublikowano 23 Sierpnia 2011 Bo inaczej nie dodaje przedmiotu, taki bug. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Sernat Opublikowano 23 Sierpnia 2011 Udostępnij Opublikowano 23 Sierpnia 2011 Widocznie koliduje to z wyświetlaniem sprite'ów. Rozwiązanie problemu "podwójnego breake'a": GML for ( ... ) { for( ... ) { ( ... ) nara = true; break; } if ( nara ) break; } Wiem, że to oczywistość, ale cóż. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ediepl Opublikowano 23 Sierpnia 2011 Udostępnij Opublikowano 23 Sierpnia 2011 Ok sprawdziłem i rzeczywiście sernat miał rację(niestety xP) poprawka: GML o_plecak.visible = true; with(o_plecak) { var ext; for(j=0;j<=7;j+=1) { for(i=0;i<=3;i+=1) { if inventory[i,j] = 0 { inventory[i,j].visible = true; inventory_stack[i,j] += 1; inventory[i,j] = id; inventory[i,j].visible = false; ext = true; break; } } if (ext) break; } } o_plecak.visible = false; EDIT: Tylko nie jestem pewien czy if ext powinno być przed "if inventory[i,j] = 0 {" czy po. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Młody Opublikowano 23 Sierpnia 2011 Autor Udostępnij Opublikowano 23 Sierpnia 2011 edie w twoim kodzie , gdy zniszczę klocek ziemia1 nic się nie dzieje ... a raczej nie to co powinno , duplikuje się inv , oraz w ułamku sekundy znika(to już załatwiłem) natomiast klocka dalej nie widać ;( Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Konrad-GM Opublikowano 23 Sierpnia 2011 Udostępnij Opublikowano 23 Sierpnia 2011 A co, jeśli podniesie się przedmiot gdy plecak będzie widoczny? :3 Edit: GML if inventory[i,j] = 0 { inventory[i,j].visible = true; Jeśli inventory[i,j] wskazuje na 0, to zasadniczo nie wskazuje na żaden obiekt. Więc 'visible = true' nie może zadziałać. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Sernat Opublikowano 23 Sierpnia 2011 Udostępnij Opublikowano 23 Sierpnia 2011 Ponieważ z niewiadomych mi przyczyn Edie zamiast sprawdzać, czy item jest, to sprawdza, czy go nie ma, a zamiast jego ilość zmniejszać, jego ilość zwiększa. Dodatkowo zamiast go wywalać z ekwipunku na ziemię, on czyni go przez chwilę niewidzialnym, czego wciąż nie rozumiem. Jakoś tak na opak :) . Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ediepl Opublikowano 23 Sierpnia 2011 Udostępnij Opublikowano 23 Sierpnia 2011 To samo. @młody: poprawiony kod masz wyżej, i ustaw room speed na 60 lub wyższy. @sernat: ??? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Sernat Opublikowano 23 Sierpnia 2011 Udostępnij Opublikowano 23 Sierpnia 2011 Edie, fakt, nie skumałem, co ma na myśli autor. Mój błąd. Ale ty także nie do końca. Patrz: GML if inventory[i,j] = 0 { inventory[i,j].visible = true; inventory_stack[i,j] += 1; inventory[i,j] = id; inventory[i,j].visible = false; ext = true; break; } Bierzesz pod uwagę tylko slot, który jest pusty. A jeśli nie jest, a znajduje się w nim obiekt o takiej samej klasie? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ediepl Opublikowano 23 Sierpnia 2011 Udostępnij Opublikowano 23 Sierpnia 2011 GML o_plecak.visible = true; o_plecak.item = id; with(o_plecak) { var ext; for(j=0;j<=7;j+=1) { for(i=0;i<=3;i+=1) { if inventory[i,j] = 0 { inventory[i,j].visible = true; inventory_stack[i,j] += 1; inventory[i,j] = item; item = 0; inventory[i,j].visible = false; ext = true; break; } else { if object_get_name(inventory[i,j].object_index) = object_get_name(item.object_index) { inventory[i,j].visible = true; inventory_stack[i,j] += 1; with(item) { instance_destroy(); } item = 0; inventory[i,j].visible = false; } } } if (ext) break; } } o_plecak.visible = false; Ok poprawiłem, ogólnie to zapomniałem że kod jest w with i trzeba używać other fail. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Sernat Opublikowano 23 Sierpnia 2011 Udostępnij Opublikowano 23 Sierpnia 2011 Other to id obiektu, z którym aktualnie kolidujemy ;) . With to użycie przestrzeni nazw, w twoim wypadku "o_plecak". Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Młody Opublikowano 23 Sierpnia 2011 Autor Udostępnij Opublikowano 23 Sierpnia 2011 Przy próbie zniszczenia 2 klocka gra się zacina Dalej przedmiot nie wpada ... -_- Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ediepl Opublikowano 23 Sierpnia 2011 Udostępnij Opublikowano 23 Sierpnia 2011 Kurde znowu fail...sory ale zmęczony jestem i nie wyrabiam. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Sernat Opublikowano 23 Sierpnia 2011 Udostępnij Opublikowano 23 Sierpnia 2011 Zacina się ze względu na other. Other to id obiektu, z którym kolidujesz. Jeśli niczego nie dotykasz, other = noone, a to oznacza, że odwołujesz się do obiektu, który nie istnieje. Zasada ograniczonego zaufania mówi, że other można używać tylko w evencie kolizji. W innych przypadkach - podobnie jak tu - nie ma zazwyczaj sensu. @EdiePl Spoko. Wieczorem ciężko cokolwiek ogarnąć ;) . Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ediepl Opublikowano 23 Sierpnia 2011 Udostępnij Opublikowano 23 Sierpnia 2011 Ok poprawiłem, w poprzednim poście(tym z kodem). EDIT:Znowu poprawka... Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Konrad-GM Opublikowano 23 Sierpnia 2011 Udostępnij Opublikowano 23 Sierpnia 2011 Z resztą, za te inventory to się wziąłeś od du py strony... GML // Create kontrolera global.inventory = ds_grid_create( 8, 4 ); ds_grid_clear( global.inventory, -1 ); global.inventory_offset_x = 0; global.inventory_offset_y = 0; // Dodawanie do ekwipunku przedmiotu var _n, _to, _cell; _to = ds_grid_width( global.inventory )*ds_grid_height( global.inventory ); for( _n = 0; _n < _to; _n += 1 ) { _cell = ds_grid_get( global.inventory, _n mod 8, _n div 4 ); if( _cell != -1 ) // Slot nie jest wolny { if( ds_map_find_value( _cell, 'type' ) == object_index ) // Czy to nie przypadkiem ten sam typ? { ds_map_add( _cell, 'count', 1 ); instance_destroy(); break; } else continue; } _cell = ds_map_create(); ds_map_add( _cell, 'type', object_index ); ds_map_add( _cell, 'index', scr_get_indexof( object_index ) ); // *1 ds_map_add( _cell, 'count', 1 ); ds_grid_set( global.inventory, _n mod 8, _n div 4, _cell ); instance_destroy(); break; } // Usuwanie przedmiotu z ekwipunku var _x, _y, _cell; _x = scr_inventory_cell_x( mouse_x ); // *2 _y = scr_inventory_cell_y( mouse_y ); if( _x == -1 || _y == -1 ) exit; _cell = ds_grid_get( global.inventory, _x, _y ); // Edit : Jeśli nic się nie znajduje w slocie if( _cell == -1 ) exit; with( instance_create( objPlayer.x, objPlayer.y, ds_map_find_value( _cell, 'type' ) ) ) { vspeed = 1 - random( 2 ); // Taki sobie efekt 'rzucania' hspeed = 1 - random( 2 ); } ds_map_add( _cell, 'count', -1 ); if( ds_map_find_value( _cell, 'count' ) == 0 ) { ds_map_destroy( _cell ); ds_grid_set( global.inventory, _x, _y, -1 ); } Myślę, że trochę lepiej powinno się prezentować. *1 - Skrypt scr_get_indexof pobiera indeks subimage spritea przedmiotów. GML (scrgetindexof) switch( argument0 ) { case objItem_WoodenSword: return 1; case objItem_SilverSword: return 2; default: return 0; // Pod indeksem 0 kryje się placeholder :) } *2 - Skrypty scr_inventory_cell_x i scr_inventory_cell_y pobierają indeks komórki, nad którą znajduje się kursor. GML (scrinventorycellx) var _n; for( _n = 0; _n < ds_grid_width( global.inventory ); _n += 1 ) { if( argument0 > _n*32 + global.inventory_offset_x && argument0 < _n*32+32 + global.inventory_offset_x ) // Wielkość slota na itemy = 32px return _n; } return -1; Analogicznie co do scr_inventory_cell_y Pisałem wszystko bez GMa, więc mogą być drobne/większe problemy. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Konrad-GM Opublikowano 23 Sierpnia 2011 Udostępnij Opublikowano 23 Sierpnia 2011 Zasada ograniczonego zaufania mówi, że other można używać tylko w evencie kolizji. W innych przypadkach - podobnie jak tu - nie ma zazwyczaj sensu.Nie tylko: GML zmienna = 123; with( objCostam ) { if( zmiennaOdCostam == 3 ) other.zmienna = 321; } Powinno działać... E: Sorki za dubla... Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Sernat Opublikowano 24 Sierpnia 2011 Udostępnij Opublikowano 24 Sierpnia 2011 Faktycznie. Dziwna sprawa. With w innych językach to taki blok, wewnątrz którego jest użycie przestrzeni nazw - co oznacza, że nie musimy, a nawet nie możemy, zapisywać odpowiedniego przedrostka. W GMie other oznacza id obiektu, z którym aktualnie kolidujemy. Jaki więc sens ma jego drugie działanie :P ? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Konrad-GM Opublikowano 24 Sierpnia 2011 Udostępnij Opublikowano 24 Sierpnia 2011 Jak dla mnie bardzo fajnie że to działa nie tylko w eventach kolizji :) Jeszcze jedno: GML (objA) // Create zmienna = "Jakis tekst"; // Jakis tam inny event np. mouse button pressed with( objB ) event_perform( ev_alarm, 0 );// Nie musi być alarm, może być userdefined lub jakiś inny event np. kolizji</span> GML (objBAlarm0) show_message( other.zmienna );Też będzie działać, dlatego other jest bardzo fajne ;) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Sernat Opublikowano 24 Sierpnia 2011 Udostępnij Opublikowano 24 Sierpnia 2011 Bo event_perform działa jak preprocesor. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Konrad-GM Opublikowano 24 Sierpnia 2011 Udostępnij Opublikowano 24 Sierpnia 2011 Więc wiedź, że każde wywołanie with zastąpi other na ID instancji, w którym znajduje się blok with ;) 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ę