Skocz do zawartości

Dużo obiektów, każdy ma inne parametry, jak je wyświetlić?


Rekomendowane odpowiedzi

Jak w tytule, mam dużo obiektów i chce zrobić tak, aby po kliknięciu na każdy z nich w panelu obok wyświetlały się informacje o nim, np współrzędne itp.

jeżeli mam kilka obiektów o tej samej nazwie.

udało mi się już zrobić, że mogę zaznaczać obiekty i każdy zaznaczony obiekt ma zmienną, że jest zaznaczony, jak to dalej ugryźć?

Odnośnik do komentarza
Udostępnij na innych stronach

1. Sprawdź czy wciśnięto lpm

2. Sprawdź czy wciśnięto na obiekcie

3. Ustaw jakąś zmienną globalną lub w obiekcie kontrolnym na ID klikniętej instancji obiektu

4. Wypisuj zmienne tej instancji odwołując się do jej ID zapisanego w zmiennej globalnej/ w kontrolerze.

 

Edit:

We wrześniu mi się nudziło to pomyślałem sobie że chcę zobaczyć ile jestem w stanie zrobić na szybkiego jeśli nie będę dbał o grafikę, muzykę ani nic podobnego, tylko o kod i tak się składa że to była strategia.

Udostępnię kod później.

 

Edit 2: Zaproponowalem to podejscie, a nie uzycie WITH, jak zolty, bo jest szybsze. Raz sprawdza i raz zapisuje dane, a potem juz tylko odczytuje. U zoltego musi sprawdzic w kazdym stepie kazda instancje kazdego wybieralnego obiektu.

Odnośnik do komentarza
Udostępnij na innych stronach

Jakoś sobie poradziłem.. oczywiście podzielę się

 

 

w Stepie obiektu:

GML
xx = id.x;

yy = id.y;

 

w Drawie innego obiektu do rysowania:

GML
with F16 if (id.selected = true)

{

draw_rectangle_color(750,15,1010,585,c_gray,c_white,c_gray,c_white,0);

with id draw_text(760,25,id.xx);

with id draw_text(760,45,id.yy);

}

 

pozdro.

Odnośnik do komentarza
Udostępnij na innych stronach

GML
with F16 if (id.selected = true)

{

draw_rectangle_color(750,15,1010,585,c_gray,c_white,c_gray,c_white,0);

with id draw_text(760,25,id.xx);

with id draw_text(760,45,id.yy);

}

 

1.Niepotrzebne wykorzystanie "with id" w liniach 2 i 3.

2.Niepotrzebne odwołanie do id ( id.xx , id.yy )

3. w id.selected = true też nie potrzebujesz tego id.

4. No i w stepie obiektu też.

 

Nie pozdro

Odnośnik do komentarza
Udostępnij na innych stronach

1, napisalbym do obj_panel by pokazywal parametry objectu(powiedzmy obj_balon) wedlog zadanego id

wtedy wystarczy obj_panel podac id zayznazonego obj_balon a obj_panel sam sie postara o wyswietlenie danych

 

2, kazdy obj_balon w chwili kiedy jest zaznaczony poda swe id do obj_panel

 

3, trzeba ustalic zasady dla odznaczania, bo jest tu duzo nieznajomych, ktore niepodales.

naprz. jak ma sie zachowac panel kiedy niejest oznazona zadny balon, jesli mozna oznaczyc wiecej obj_balon i co wtedy ma sie pokazywac

Odnośnik do komentarza
Udostępnij na innych stronach

3. Ustaw jakąś zmienną globalną lub w obiekcie kontrolnym na ID klikniętej instancji obiektu

4. Wypisuj zmienne tej instancji odwołując się do jej ID zapisanego w zmiennej globalnej/ w kontrolerze.

 

Edit 2: Zaproponowalem to podejscie, a nie uzycie WITH, jak zolty, bo jest szybsze. Raz sprawdza i raz zapisuje dane, a potem juz tylko odczytuje. U zoltego musi sprawdzic w kazdym stepie kazda instancje kazdego wybieralnego obiektu.

 

Tylko to już dla mnie za bardzo skomplikowane, a jak będą mi się tworzyły nowe obiekty..

dzięki za optymalizację kodu, nie wiem czemu mi to wcześniej nie działało tylko wyświetlało wszystkie informacje ze wszystkich obiektów na raz.

 

1, napisalbym do obj_panel by pokazywal parametry objectu(powiedzmy obj_balon) wedlog zadanego id

wtedy wystarczy obj_panel podac id zayznazonego obj_balon a obj_panel sam sie postara o wyswietlenie danych

 

2, kazdy obj_balon w chwili kiedy jest zaznaczony poda swe id do obj_panel

Za bardzo nie wiem o co chodzi i jak to zrobić.

 

3, trzeba ustalic zasady dla odznaczania, bo jest tu duzo nieznajomych, ktore niepodales.

naprz. jak ma sie zachowac panel kiedy niejest oznazona zadny balon, jesli mozna oznaczyc wiecej obj_balon i co wtedy ma sie pokazywac

 

jak jest odznaczone to panel znika, będzie więcej pola widzenia a jak jest kilka obiektów to zostaje chyba ten z najwyższym id, jak dla mnie może tak zostać.

Odnośnik do komentarza
Udostępnij na innych stronach

chodzilo o cos takiego:

GML
Information about object: o_panel

 

Sprite:

Solid: false

Visible: true

Depth: 0

Persistent: false

Parent:

Mask:

 

Create Event:

execute code:

 

_idn=0;

 

 

Mouse Event for Glob Right Released:

execute code:

 

// kasuje id z o_panel

_idn=0;

 

 

Draw Event:

execute code:

 

if(_idn){

draw_rectangle(5,5,room_width-5, 50, 1);

draw_text(10,10,"X="+string(_idn.x)+" score="+string(_idn.score)+" idn="+string(_idn));

draw_text(10,25,"Y="+string(_idn.y)+" direction="+string(_idn.direction));

};

draw_text(room_width*.5, 10, "LBM na objektu oznacza go dla panelu");

draw_text(room_width*.5, 25, "RMB kdziekolwiek kasuje panel");

 

______________________________________________________

 

Information about object: o_balon

 

Sprite: sprite0

Solid: false

Visible: true

Depth: 0

Persistent: false

Parent:

Mask:

 

Create Event:

execute code:

 

x=irandom_range(32, room_width-32);

y=irandom_range(96, room_height-32);

// niewazne zmienna dla pokazu

_hp=irandom(20)*10;

direction=irandom(360);

 

 

 

Mouse Event for Left Released:

execute code:

 

// przesyla id do o_panel

o_panel._idn=id;

 

______________________________________________________

Odnośnik do komentarza
Udostępnij na innych stronach

Szczerze to mi skomplikowało życie :D ponieważ zaznaczanie mam na kliknięcie myszki jak i na zaznaczenie ramówką jak to bywa w strategiach używając funkcji

 

GML
with Aircrafts if (collision_rectangle(global.xx1,global.yy1,global.xx2,global.yy2,id,1,0))

{

Draw_Panel._idn=id;

}

with Aircrafts if (collision_point(global.xx1,global.yy1,id,1,0))

{

Draw_Panel._idn=id;

}

with Base_player if (collision_rectangle(global.xx1,global.yy1,global.xx2,global.yy2,id,1,0))

{

Draw_Panel._idn=id;

}

with Base_player if (collision_point(global.xx1,global.yy1,id,1,0))

{

Draw_Panel._idn=id;

}

Odnośnik do komentarza
Udostępnij na innych stronach

Pracuje już nad tym metodą prób i błędów, bo aż takiego doświadczenia nie mam

No nie ma to jak od razu rzucić się na głęboką wodę :D ale dzięki temu szybciej się uczę.

 

A czy przypadkiem między tym :

GML
Draw_Panel._idn=0;

A Tym:

GML
with Draw_Panel _idn=0;

nie ma żadnej różnicy?

 

I czy lepiej zrobić panel na którym będą informacje z obiektu? czy lepiej rysować w Drawie?

Edytowane przez zolty77
Odnośnik do komentarza
Udostępnij na innych stronach

jednoznacnie Draw_Panel._idn=0;

 

with uzywa sie tylko w wybranych przypadkach, kiedy dany objekt ma cos zrobic sam , ale tylko na powel objektu wydajocego komende with :)

troche to brzmi dziwnie, ale jak mozna to nieuzywaj zbytnio with

 

zatem jesli panel ma pokazac random wybrany object to wystarczy kiedy panel zna id objektu ktory ma wyswietlic a dane sam sobie bierze i tego obejktu

 

zaznaczanie objektow napis do unikatnego objektu, moze byc nawet o_panel i w nim kieroj cale zaznaczenie

 

o_panel mial by prechowac tez lewy-gorny a prawy-dolny rog zaznacenia, by potem o_balon mogly same robic testy jesli so wybrane.

 

aha niewidze powodu bys robil dva testy na colision_rectangle +colision_point.

point jest tez rectangle o rozmiarach w=0 h=0 :)

ogolnie mozna ominoc caly collision_

Odnośnik do komentarza
Udostępnij na innych stronach

With moze nie jest wolny sam w sobie, ale sprawdzanie tego samego w kazdej instancji w kazdej chwili zawsze bedzie mniej wydajne niz sprawdzenie tego raz. I to jest sedno tego co powiedzialem.

 

takich rzeczy nie powinno musieć się tłumaczyć

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