alwin Opublikowano 20 Maja 2010 Udostępnij Opublikowano 20 Maja 2010 Cześć, pomożecie mi z jednym problemem? Robię grę RTS. Zrobiłem już zaznaczanie jednostek- do zmiennej globalnej global.zaznaczeni dodawana jest liczba aktualnie zaz. jednostek na mapie. I teraz chciałbym zrobić aby rysowało mi ikonki po kolei jakie mamy zaznaczone jednostki- powiedzmy ze mamy 5 łuczników, 2 magów, wtedy na dole ekranu mamy 5 ikonek łucznika i 2 maga. Ikonki te maja poruszać się z viewem.. ma ktoś pomysł jak to wykonać? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Muuuuczek567 Opublikowano 20 Maja 2010 Udostępnij Opublikowano 20 Maja 2010 for(i = 0; i < global.zaznaczeni; i += 1) with(zaznaczony) draw_sprite(ikonkazaznaczonego,0,view_xview[0]+30,view_yview[0]+30*(i+1)) To taki pseudokod, bo nie wiem, jak to u Ciebie wyglada Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Farkraj Opublikowano 20 Maja 2010 Udostępnij Opublikowano 20 Maja 2010 sprawdzasz jakie jednostki sa zaznaczone, potem jakie są to jednostki i jezeli jest wiecej niz 1 np. lucznik to petlą for rysujesz tyle ikonek ile jest lucznikow Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
alwin Opublikowano 20 Maja 2010 Autor Udostępnij Opublikowano 20 Maja 2010 GML if(global.zaznaczeni>0){ for ( i = 0; i < global.zaznaczeni; i += 1 ) { icon=draw_sprite(spr_ico_default,0,(i+view_xview[0])*22,view_yview[0]+40) } } Zrobiłem tak, ładnie mi się przesuwają wtedy ikonki z viewem ale tylko po osi y- gdy natomiast przesuwam view w prawo to one szybko gdzieś uciekają także w tę strone tylko ze100x szybciej:/ jak mam je rysować na osi x? *22 bo tyle ma szerokości ikonka Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Muuuuczek567 Opublikowano 20 Maja 2010 Udostępnij Opublikowano 20 Maja 2010 GML if(global.zaznaczeni>0) for ( i = 0; i < global.zaznaczeni; i += 1 ) icon=draw_sprite(spr_ico_default,0,30+view_xview[0]+i*22,view_yview[0]+40) Chyba tak powinno byc. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
alwin Opublikowano 20 Maja 2010 Autor Udostępnij Opublikowano 20 Maja 2010 Pięknie Muczek:) A więc ogólnie już wiem o co chodzi, teraz bedę kombinował z róznymi typami jednbostek, zobaczymy co z tego wyjdzie.. I zmieniłem koncepcję- jezeli będzie zaznaczonych 5 łuczników- wyświetlę jedną jego ikonkę, a na niej liczbę ilu ich jest:) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Muuuuczek567 Opublikowano 20 Maja 2010 Udostępnij Opublikowano 20 Maja 2010 Tutaj problem bedzie wiekszy. Trzeba zrobic liste, ktora liczylaby, ile jednostek danego typu jest zaznaczonych, a w Draw: GML var i; i = 0 for(g = 0; g < ds_list_size(jakastam); g += 1) { if(ds_list_find_value(jakastam,g) > 0) { draw_sprite(ikonka_typu_/g/,0,30+view_xview[0]+i*22,view_yview[0]+40) draw_text(30+view_xview[0]+i*22,view_yview[0]+40,ds_list_find_value(jakastam,0)) i += 1 } } Nie mam pojecia, czy bedzie dzialalo, bo nie mam jak sprawdzic, a jest to dosc skomplikowane... PS: gra wyglada kozacko :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
alwin Opublikowano 20 Maja 2010 Autor Udostępnij Opublikowano 20 Maja 2010 o w mordę.. widzę że nie będzie to takie proste:/ ale myślę że wspólnie damy radę:) jakby co będę tu pisał. Dzięki Muczek, choć będzie jeszcze bardziej kozacka niż jest:) Próbuję to rozwiazać za pomocą pętli ale mi coś nie wychodzi:/ ikonki piechura i robotnicy poukładane są na sobie.. chyba coś trzeba pozmieniać w x i y.. wiecie co? GML if(global.zaznaczeni>0){ for ( i = 0; i < global.zaznaczeni; i += 1 ) { // PIECHUR for ( a = 0; a < global.zaznaczeni_piechur; a += 1 ) { icon=draw_sprite(spr_ico_lanca,0,30+view_xview[0]+a*22,view_yview[0]+40) } // ROBOTNICA for ( b = 0; b < global.zaznaczeni_robotnica; b += 1 ) { icon=draw_sprite(spr_ico_kilof,0,30+view_xview[0]+b*22,view_yview[0]+40) } } } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
alwin Opublikowano 22 Maja 2010 Autor Udostępnij Opublikowano 22 Maja 2010 Mam taki kod do zaznaczania jednostek po kliknieciu na nie 2 razy GML object = obj_jednostka_pracownik //poszukiwnay/liczony obiekt for ( i = 0; i < instance_number( object ); i += 1 ) { id_ = instance_find( object, i ); id_.zaznaczona=true; } Teraz pytanie- jak mam zrobić aby zaznaczyło mi tylko oddział(12 jednostek?) Bo ze względu na wydajność zrobione mam zaznaczanie kwadratem tylko właśnie 12 żołnierzy ale z 2 klikiem nie mogę sobie poradzić.. GML object = obj_jednostka_pracownik //poszukiwnay/liczony obiekt for ( i = 0; i < instance_number( object ); i += 1 ) { if(global.zazanaczeni<=12){ id_ = instance_find( object, i ); id_.zaznaczona=true; } } Próbowałem tak ale nie działa:/ Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Muuuuczek567 Opublikowano 22 Maja 2010 Udostępnij Opublikowano 22 Maja 2010 Musze sie domyslic, jak to dziala, dlatego podrzuce taki kod: GML var g; g = 0 object = obj_jednostka_pracownik //poszukiwnay/liczony obiekt for ( i = 0; i < instance_number( object ); i += 1 ) { id_ = instance_find( object, i ); id_.zaznaczona=true; g += 1; if(g = 12) break; } Sprawdz, czy dziala. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
waxx Opublikowano 22 Maja 2010 Udostępnij Opublikowano 22 Maja 2010 if(global.zazanaczeni<=12) nie widze zebys gdzies zwiekszal/zmienial wartosc global.zaznaczeni w tej petli GML object = obj_jednostka_pracownik //poszukiwnay/liczony obiekt for ( i = 0; (i < instance_number( object ) and global.zaznaczeni <= 12); i += 1 ) { id_ = instance_find( object, i ); id_.zaznaczona=true; global.zaznaczeni += 1; } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
alwin Opublikowano 22 Maja 2010 Autor Udostępnij Opublikowano 22 Maja 2010 W sumie teraz to czytam dopiero , dzięki ale zrobiłem to po prostu tak: GML // jednostka- robotnica if (klikniety>=2){ // jezeli klikniety 2 razy klikniety=2 if(global.ile_robotnica>12){limit=12}else{limit=global.ile_robotnica} // jezeli mamy wiecej jednostek niz nasz ustalony limit do zaznaczenian czyli 12, daj limit 12, jezeli mamy mniej to zaznaczamy mniej- wszystkie jakie mamy for ( i = 0; i < limit; i += 1 ) { id_ = instance_find( obj_jednostka_pracownik, i ); id_.zaznaczona=true; } } else {klikniety=0} // jezeli klikniety 0 lub 1 raz- kliknietttty = o</span> Działa elegancko:) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Muuuuczek567 Opublikowano 22 Maja 2010 Udostępnij Opublikowano 22 Maja 2010 Co do posta, w ktorym piszesz, ze ikonki nakladaja sie na siebie: zamien b*22 na ( a + b )*22. E: i rysuj to na surface'u, to znaczaco przyspieszy wykonywanie kodu. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
alwin Opublikowano 22 Maja 2010 Autor Udostępnij Opublikowano 22 Maja 2010 O właśnie, dobrze że przypomniałeś:) zrobiłem to po swojemu, widze że Twój sposób znacznie łatwiejszy.. podam Ci swój- GML if(global.zaznaczeni>0){ // jezeli zaznaczonych więcej niz o for ( i = 0; i < global.zaznaczeni; i += 1 ) //pętla wykonuje się tyle razy ilu mamy zaznaczonych- sprawdza kazdego { // PIECHUR for ( a = 0; a < global.zaznaczeni_piechur; a += 1 ) // sprawdza zaznaczonych piech { icon=draw_sprite(spr_ico_lanca,0,30+view_xview[0]+a*22,view_yview[0]+40) //*22 bo taka szer sprita ikonki // global.xx=global.zaznaczeni_piechur*22; //jezeli mamy 5 zaznaczonych piechurów to potrzebna nam zmienna która przechowuje x , gdzie konczy sie 5 ikonka } // ROBOTNICA for ( b = 0; b < global.zaznaczeni_robotnica; b += 1 ) { icon=draw_sprite(spr_ico_kilof,0,30+view_xview[0]+(global.zaznaczeni_piechur*22)+(b*22),view_yview[0]+40) //(global.zaznaczeni_piechur*22) poniewarz od pozycji ostatniej ikonki piechura rysujemy nowe // global.xx=global.zaznaczeni_robotnica*22; } // lucznik for ( c = 0; c < global.zaznaczeni_lucznik; c += 1 ) { icon=draw_sprite(spr_ico_luk,0,30+view_xview[0]+((global.zaznaczeni_robotnica+global.zaznaczeni_piechur)*22)+(c*22),view_yview[0]+40) // ((global.zaznaczeni_robotnica+global.zaznaczeni_piechur)*22) dodanie ilu zaz rob i piech, od tego miejsca ikonki rysujemy // global.xx=global.zaznaczeni_robotnica*22; } // mag for ( d = 0; d < global.zaznaczeni_mag; d += 1 ) { icon=draw_sprite(spr_ico_mag,0,30+view_xview[0]+((global.zaznaczeni_robotnica+global.zaznaczeni_piechur+global.zaznaczeni_lucznik)*22)+(d*22),view_yview[0]+40) // ((global.zaznaczeni_robotnica+global.zaznaczeni_piechur)*22) dodanie ilu zaz rob i piech, od tego miejsca ikonki rysujemy // global.xx=global.zaznaczeni_robotnica*22; } } } W miarę ładnie mi to działa.. tylko mam problem że jak wróg mi zabije zanaczoną jednostkę to nadal ikonka pozostaje:/ Surface trudne są? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
waxx Opublikowano 22 Maja 2010 Udostępnij Opublikowano 22 Maja 2010 to moze jak zginie jednostka wywal ja z listy zaznaczonych? :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Muuuuczek567 Opublikowano 22 Maja 2010 Udostępnij Opublikowano 22 Maja 2010 Surfaces sa latwe do opanowania, YXE dawal gdzies przyklad ich uzywania. A ze ikonka nie znika? /uwaga, pewnie nie zadziala/ W evencie zabicia jednostki daj: GML global.zaznaczeni -= 1 E: waxx, jak ty to robisz, ze uprzedzasz moje ruchy o 1-2 minuty? :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
alwin Opublikowano 22 Maja 2010 Autor Udostępnij Opublikowano 22 Maja 2010 Haha faktycznie!:) Ależ ze ,mnie łeb;) GML if(hp<0) { instance_sedrtoy(); global.zaznaczeni_robotnica-=1; global.zaznaczeni-=1; } hmmm hyba lepiej : global.zaznaczeni_robotnica-=1 ; global.zaznaczeni-=1; dać do klocka kiedy instancja zostanie niszczona nie? bo tak w stepie to może mi np 2 zamiast 1 odjąć.. jak myslicie? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
waxx Opublikowano 22 Maja 2010 Udostępnij Opublikowano 22 Maja 2010 raczej step z instance destroy jest ostatnim stepem ktory sie wykonuje ale dla przejrzystosci event instance destroy bedzie chyba lepszy Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Muuuuczek567 Opublikowano 22 Maja 2010 Udostępnij Opublikowano 22 Maja 2010 Tu akurat nie ma roznicy, ale lepiej dac do Destroy. E: lol... Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
alwin Opublikowano 22 Maja 2010 Autor Udostępnij Opublikowano 22 Maja 2010 HAHA nie mogę z Was:D Dzięki koledzy, zaraz ide do roboty to rano napiszę;) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Assassin Opublikowano 22 Maja 2010 Udostępnij Opublikowano 22 Maja 2010 Muuuuuuuuuuczek, nie ogarnąłeś o co mu chodziło. 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ę