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

C++ Builder dynamiczne usuwanie obiektów

Object Storage Arubacloud
0 głosów
1,118 wizyt
pytanie zadane 5 września 2015 w C i C++ przez Qlass Początkujący (490 p.)
TShape *pp;


void pokaz ()
{
	 pp = new TShape(Form1);
	 pp->Parent=Form1;
	 pp->Top=t;
	 pp->Left=l;
	 pp->Height=10;
	 pp->Width=10;
}

Witam, mam pewien problem z C++ Builderem, od jakiegoś czasu staram się go rozwiązać, ale nic nie mogę wymyślić. Po stworzeniu obiektu, nie wiem jak się do niego odnosić, chciałbym móc go po jakimś czasie usunąć, lecz nie mogę nic z nim robić poza funkcją. Prosiłbym o jakieś nakierowanie mnie na rozwiązanie.

Z góry dzięki za wszelką pomoc/słowa krytyki.

1 odpowiedź

0 głosów
odpowiedź 5 września 2015 przez Patrycjerz Mędrzec (192,320 p.)
wybrane 5 września 2015 przez Qlass
 
Najlepsza

A znasz operator delete?

komentarz 5 września 2015 przez Qlass Początkujący (490 p.)
Poruszanie się to nie ma dla mnie problemu, ale nie wiem jak kurde sprawdzić, czy np 15 pocisk trafił 4 przeciwnika, wiem, że to pewnie banalne, ale no nie wiem. Mam te dwie klasy i nie mam pojęcia jak to sprawdzić, wiem jak to zrobić na jeden obiekt stworzony przez vector z drugim obiektem stworzonym "normalnie", ale nie wiem jak to zrobić z dwoma obiektami tak stworzonymi.
komentarz 5 września 2015 przez Patrycjerz Mędrzec (192,320 p.)
Rozumiem cię. Początki nie są zawsze proste. Zapewne wiesz, jak to zrobić, ale nie masz pomysłu, jak to wpleść w kod. Ale spróbuję ci pomóc. Poczekaj chwilę...
komentarz 5 września 2015 przez Patrycjerz Mędrzec (192,320 p.)

Na początek zrób sobie pętlę, gdzie wywołasz metody kolizji. Najlepiej takie rozwiązania implementować wewnątrz obiektów, a nie w oddzielnych klasach (moje zdanie). Więc kodzik:

std::vector <Przeciwnik*> przeciwnicy;
std::vector <Pocisk*> pociski;
Przeciwnik* wskaznik = nullptr //wyzerowanie wskaźnika
//...
for(std::vector <Pocisk*>::iterator it = pociski.begin(); it != pociski.end(); i++)
{
    wskaznik = (*it)->sprawdzKolizje(przeciwnicy);
    if(wskaznik)
    {
        wskaznik->stracHP();
    }
}

W metody sprawdzKolizje sprawdzasz masą ifów współrzędne przeciwnika i pocisku, i jeśli dane prostokąty się przecinają, to jest kolizja i zwracasz wskaźnik na danego przeciwnika, czyli element kontenera. Jeśli będziesz operować na iteratorach, to zwracasz *it.

 

komentarz 5 września 2015 przez Qlass Początkujący (490 p.)

Nie wiem kurde xD Jestem za głupi, po pierwsze, nie działa mi nullptr :/ 

a po drugie, jakiego typu są "przeciwnicy"? Bo muszę później w klasie strz, sprawdzać, czy ten pocisk, jest równy aktualnemu przeciwnikowi, tak?

​
for(std::vector <przeciwnik*>::iterator ot = przeciwnicy.begin(); ot != przeciwnicy.end(); ot++)
{
przeciwnik* wskaznik= nullptr;
	(*ot)->pokaz();
	 for(std::vector <strz*>::iterator it = pociski.begin(); it != pociski.end(); it++)
{
	wskaznik = (*it)->sprawdzKolizje(przeciwnicy);
	if(wskaznik)
	{
		wskaznik->stracHP();
	}
}
}

O takie coś ci chodziło? :D 

komentarz 5 września 2015 przez Patrycjerz Mędrzec (192,320 p.)

Co do nullptr, to możesz użyć także NULL.

Przeciwnicy mogą być jakiegokolwiek typu. To zależy, jaką masz wizję na ten program. Lepiej zrobić oddzielną klasę, ponieważ znając życie, przeciwnik będzie miał swoje, unikalne metody.

Metodą sprawdzKolizje (nazwe możesz sobie zmienić) sprawdzasz, czy prostokąty pocisku i przeciwnika się stykają lub przecinają. Nie muszę chyba pisać, jak to zrobić. Jak masz z tym problem, to sobie to rozrysuj - rysunki zawsze pomagają.

I na koniec: po co wsadziłeś ten kod do kolejnej pętli? Przecież to nie ma sensu. Wywoływanie metody pokaz zrób gdzie indziej, a kolizję gdzie indziej. Teraz ten sam fragment kodu wykonuje się nie potrzebnie kilka razy.

Jak dobrze zauważyłeś, należy zerować wskaźnik, ale możesz to zrobić w ifie ze wskaźnikiem, po wywołaniu metody stracHP. Pamiętaj, aby nie powtarzać niepotrzebnie tego samego kodu - należy tworzyć programy optymalnie.

Podobne pytania

0 głosów
1 odpowiedź 149 wizyt
0 głosów
2 odpowiedzi 612 wizyt
pytanie zadane 14 lutego 2016 w C i C++ przez Ziuziek Mądrala (5,140 p.)
+1 głos
1 odpowiedź 660 wizyt
pytanie zadane 26 sierpnia 2016 w C i C++ przez niezalogowany

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,959 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...