Skocz do zawartości

Zaznaczone jednostki


Rekomendowane odpowiedzi

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

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

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:)

bez_tytu_u.jpg

Odnośnik do komentarza
Udostępnij na innych stronach

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

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

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

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

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

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

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

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

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

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