• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Wybór obiektu kliknięciem i przekazanie jego dnych do innego obiektu

0 głosów
514 wizyt
pytanie zadane 27 kwietnia 2018 w C i C++ przez Damian.W Początkujący (320 p.)
Witam

Nie bardzo wiem jak zadać pytanie wytłumaczyć o co mi chodzi.

Chciałbym uzyskać efekt taki efekt. Mam N obiektów 1 to obiekt który będzie wyświetlał dane z obiektu 2 lub 3 lub obiektu n po kliknięciu obiektu n.

I teraz chodzi mi o zamysł ideę jak to zrobić?

Jak obiekt 1 ma wiedzieć który obiekt kliknąłem wybrałem?

To znaczy umiem wykryć kolizje myszki z obiektem i jak sobie na niego klikam to np w tym obiekcie ustawiam flagę kliknięty wybrany itp.

Ale trochę wydaje mi się to niewygodne bo wtedy obiekt 1 musiałby sprawdzać wszystkie obiekty czy zostały kliknięte a to trochę niepotrzebnie będzie zjadać  zasoby.

Więc to może obiekt 1 powinien sprawdzać kolizje albo coś nie bardzo wiem jak to ugryźć.

Ogólnie chodzi mi o efekt menu w strategiach klikam na budynek lub jednostkę i pojawia się w menu klikam na inna pojawia się inna itp.

Pozdrawiam Damian.
komentarz 27 kwietnia 2018 przez Bondrusiek Maniak (61,460 p.)
Witam,

Możesz podać w jakiej chcesz to zrobić technologi. Jeśli chcesz dajmy na to wykorzystać framework Qt to możesz wykorzystać klasę QPushButton aby wybrać dany obiekt.

https://wiki.qt.io/How_to_Use_QPushButton

1 odpowiedź

0 głosów
odpowiedź 27 kwietnia 2018 przez j23 Mędrzec (195,220 p.)

W zdarzeniu on-click sprawdzasz, który obiekt został kliknięty, i powiadamiasz obiekt wyświetlający o obiekcie klikniętym. Prościej się nie da.

komentarz 27 kwietnia 2018 przez Damian.W Początkujący (320 p.)
Biblioteka SFML.

Czyli z tego co rozumiem to dodac sobie warunek.

If klawisz myszy zostanie kliknięty to sprawdź co zostało kliknięte? to przekaż nazwę obiektu do obiektu 1?

Tylko dalej zostaje mi wywołać funkcje kolizji we wszystkich obiektach.

Mając ich np 100 muszę wywołać ją 100 razy dla różnych obiektów? Mogę to zrobić za pomocą pętli ale czy to tak właśnie powinno wyglądać?.

No i nasuwa mi się pytanie  bo pewnie obiekty będą tablicami np budynek[1.....N] jak coś zostanie zniszczone obiekt usunięty to czy program nie wysypie się wywołując funkcję (metodę) tego obiektu która sprawdza kolizję . A obiekt nie istnieje. W ogóle by to bardzo komplikowało sytuacje jak mam sprawdzać wszystkie obiekty i to jeszcze z rożnych klas.

Jak powinno się takie coś robić wykonać?

W przypadku QT pewnie są jakieś funkcje gotowe które zwracają wartość co się klikło.

Tutaj takie coś muszę sam stworzyć i raczej musi być dynamiczne bo obiekty będą tworzone i niszczone.

Pozdrawiam Damian
komentarz 27 kwietnia 2018 przez j23 Mędrzec (195,220 p.)

If klawisz myszy zostanie kliknięty to sprawdź co zostało kliknięte?

Tak.

to przekaż nazwę obiektu do obiektu 1?

Może nie nazwę, ale wskaźnik/referencję/indeks.

Mając ich np 100 muszę wywołać ją 100 razy dla różnych obiektów?

Tak, choć najsensowniej byłoby sprawdzanie zacząć od tych obiektów, które są na wierzchu.

A obiekt nie istnieje.

Jeśli wszystko odbywa się w jednym wątku, to raczej problemu być nie powinno (choć wszystko zależy od projektu, jego przemyślenia).

 

W przypadku QT pewnie są jakieś funkcje gotowe które zwracają wartość co się klikło.

Ponoć piszesz w SFML-u...

komentarz 27 kwietnia 2018 przez Damian.W Początkujący (320 p.)

W przypadku QT pewnie są jakieś funkcje gotowe które zwracają wartość co się klikło.
Tutaj takie coś muszę sam stworzyć i raczej musi być dynamiczne bo obiekty będą tworzone i niszczone. (Bo piszę w SFML ) :)

Przekazanie wskaźnika referencji itp tak o tym myślałem.

Czyli w momencie kliknięcia muszę wywołać metodę we wszystkich obiektach tworzonych.

Czy mając obiekty z kilku klas mogę to zrobić na tablicach np:

for( int i=0;  i<liczba_ludzikow; i++)
{
           if(ludzik[i].metodakolizli_itp)
           return true;
       else
           return false;
} 

for( int i=0;  i<liczba_Baz; i++)
{
           if(baza[i].metodakolizli_itp)
           return true; 
//moze nie true ale referencje wskaznik na obiekt 
//ale jak by to mialo tygladac ?? 
// return *baza[i] czy &baza[i]
       else
           return false;
} 

//I tak dalej mozna by dodac jeszcze
// ifa ze wywoluje funkcje tylko wtedy kiedy
// jest wiecej obiektow niz 0
if (liczba_ludzikow>0)
{
      for( int i=0;  i<liczba_ludzikow; i++)
      {
             if(ludzik[i].metodakolizli_itp)
             return true;
       else
             return false;
    } 
}

Można by stworzyć obiekt który dziedziczy po wszystkich klasach (ludzików i architektury) aby miał swobodny dostęp do zmiennej stanic w której miał bym liczbę ludzików budynków z danej klasy.

Ale czy to dobry pomysł.

No i dalej krucza nie mogę ogarnąć co się stanie jak np mam obiektów 100 wiec tablica ma 100 elementów i np numer 59 zostanie zniszczony a ja będę sprawdzał ludzik[58].metodakolizji co wtedy się stanie no i następne pytanie co jeżeli zgina wszyscy lub polowa a ja dorobię znowu 100 i czy np tablica będzie miała już 200 elementów i 50 (pustych martwych) czy tablica będzie miała 150 elementów? tego zagadnienia nie mogę ogarnąć.

Pozdrawiam

komentarz 27 kwietnia 2018 przez j23 Mędrzec (195,220 p.)

Można by stworzyć obiekt który dziedziczy po wszystkich klasach 

(...)

Ale czy to dobry pomysł.

Nie wygląda to dobrze (chyba że coś źle zrozumiałem).

np numer 59 zostanie zniszczony a ja będę sprawdzał ludzik[58].metodakolizji

Jeszcze raz napiszę: jeśli wszystko (usuwanie i sprawdzanie kolizji) odbywa się w jednym wątku, a tak jest z reguły w grach, to nic Ci się nie usunie w trakcie sprawdzania.

Podobne pytania

0 głosów
2 odpowiedzi 815 wizyt
0 głosów
1 odpowiedź 793 wizyt
pytanie zadane 22 października 2016 w C i C++ przez Ditrix Mądrala (5,650 p.)
0 głosów
0 odpowiedzi 103 wizyt

93,667 zapytań

142,589 odpowiedzi

323,130 komentarzy

63,193 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...