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

Przeszukiwanie listy (kontenery STL)

Object Storage Arubacloud
0 głosów
424 wizyt
pytanie zadane 23 czerwca 2018 w C i C++ przez Asokus Początkujący (450 p.)

Witam,

pewnie to prosta rzecz ale zjadła już kilka moich godzin tak, że zaczynam panicznie wyrywać włosy z głowy, proszę o pomoc. Podsyłam link do repozytorium z całym:projektem https://github.com/Blauto/2d_Game/tree/master/Arcanoid/Arcanoid

Problem polega na tym że elementy (Slaby) nie wiem jak to ująć ale nie do końca usuwają się z listy. W jednej pętli program je widzi(przy sprawdzaniu kolizji) a w innej nie (przy rysowaniu) pomimo tego ze pętle są identyczne. Zauważyłem że zmiany które wykonuje na elementach listy poprzez wskaźnik nie zapisują się (dałem specjalne ify które mają to sprawdzać )

sf::Vector2f SlabMenager::checkColision(sf::CircleShape & ball)
{
	for (it = slabList.begin(); it != slabList.end(); it++) {

		if (ball.getGlobalBounds().intersects(it->slab.getGlobalBounds())) {

			sf::Vector2f slabPosPom = it->slab.getPosition();

			it->removeLive();
			if (it->live < 1)
				slabList.erase(it);

			return slabPosPom;
		}
	}
	return sf::Vector2f(0.0f, 0.0f);
}

void Slab::removeLive()
{
	live--;
}




a to pętla która pomimo erasa w poprzedniej i tak przechodzi przez wszystkie elementy które były i rysuje wszystko 
dodałem tego ifa żeby dodatkowo sprawdzić skoro wcześniej na tych elementach odejmowałem to ta zmiana powinna być do sprawdzenia nawet jeżeli przechodzę przez wszystkie elementy i tego wcześniejszego erasa by tam miało nie być to live powinno być mniejsze od 0, ale operacji remove live tak jakby nie pamięta :P

	for (it = slabList.begin(); it != slabList.end(); it++) {

		if (it->live > 0) {
			it->update();
			it->Draw(game->window);

		}
	}

Dziękuję za pomoc!

1 odpowiedź

+2 głosów
odpowiedź 24 czerwca 2018 przez j23 Mędrzec (194,920 p.)

Dwie instancje SlabMenager:

Game::Game()
{
	player = new Player(this, windowMode.width / 2);
	slabMenager = new SlabMenager(this); // <--- !!!!
}



void Game::run()
{
	Ball ball(this, 100.0f, 100.0f);
	list<Ball> ballList;
	ballList.push_back(ball);
	SlabMenager slabMenager(this); // <--- !!!


	while (window.isOpen()) {
		/* ... */

 

Dlaczego iterator SlabMenager::it zrobiłeś polem klasy?

 

PS. nie Menager, tylko Manager.

komentarz 24 czerwca 2018 przez Asokus Początkujący (450 p.)
Szczerze? nie wiem, :) bez sensu, usunę tego iteratora z klasy (jako pole). Dziękuję za zwrócenie uwagi na Menagera. Oczywiście za komentarz też, szczerze myślałem ze zamknąłem ten temat, bo już wczoraj do tego doszedłem sprawdzając rejestry i poszczególne adresy że to są inne listy :P. Masakra jedna linijka zapomniana przy usuwaniu i tyle czasu straconego. Dziękuję za komentarz!

Podobne pytania

0 głosów
0 odpowiedzi 520 wizyt
pytanie zadane 29 maja 2019 w C i C++ przez BezBarwny Użytkownik (700 p.)
0 głosów
2 odpowiedzi 397 wizyt
0 głosów
0 odpowiedzi 262 wizyt
pytanie zadane 24 stycznia 2021 w C i C++ przez Roberto12 Nowicjusz (120 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 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!

...