Archief - C++ vectors

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

yannick

Legacy Member
Beste,

Momenteel wil ik een vector vullen met 4 textures die ik nodig heb om in een sprite in te laden (ik gebruik SFML en opengl, maar dit is dus buiten de kwestie). Het probleem is momenteel dat het laatste element nooit niet getoond wordt.

Ik moet dus nog een push_back() call doen een dummy texture om het laatste (nu dus het voorlaatste element in de vector) te kunnen laten zien.

Dit werkt niet
Code:
void RulesScreen::setResources(std::vector<sf::Texture> AllTextures, std::vector<sf::Sprite> AllSprites){
	if(!loaded){
		t_mAll_Textures=AllTextures;
		s_mAll_Sprites=AllSprites;
....
		t_mFirstPanelRules=t_mAll_Textures[2];
		t_mSecondPanelRules=t_mAll_Textures[3];
		t_mThirdPanelRules=t_mAll_Textures[4];
		t_mFourthPanelRules=t_mAll_Textures[5];

		t_mPanel_Textures.push_back(t_mFirstPanelRules);
		t_mPanel_Textures.push_back(t_mSecondPanelRules);
		t_mPanel_Textures.push_back(t_mThirdPanelRules);
		t_mPanel_Textures.push_back(t_mFourthPanelRules);
......
		s_mPanel.setTexture(t_mPanel_Textures[3]); //DIT WERKT NIET
loaded=true;
	}
}

Dit werkt wel
Code:
void RulesScreen::setResources(std::vector<sf::Texture> AllTextures, std::vector<sf::Sprite> AllSprites){
	if(!loaded){
		t_mAll_Textures=AllTextures;
		s_mAll_Sprites=AllSprites;
....
		t_mFirstPanelRules=t_mAll_Textures[2];
		t_mSecondPanelRules=t_mAll_Textures[3];
		t_mThirdPanelRules=t_mAll_Textures[4];
		t_mFourthPanelRules=t_mAll_Textures[5];

		t_mPanel_Textures.push_back(t_mFirstPanelRules);
		t_mPanel_Textures.push_back(t_mSecondPanelRules);
		t_mPanel_Textures.push_back(t_mThirdPanelRules);
		t_mPanel_Textures.push_back(t_mFourthPanelRules);
                t_mPanel_Textures.push_back(DUMMY);
......
		s_mPanel.setTexture(t_mPanel_Textures[3]); //DIT WERKT NU WEL
                //s_mPanel.setTexture(t_mPanel_Textures[4]); //DIT WERKT NIET
loaded=true;
	}
}

Ik heb alle vectors de juiste grootte gegeven mbv .reserve. Iemand een idee?

Mvg

forloRn_

Legacy Member
Ik zou die calls naar reserve() om te beginnen al weglaten. Dat ga je enkel gebruiken om dingen te optimaliseren wanneer je weet dat je programma werkt, wat hier dus nog niet het geval is.

Gesteld dat ik hier effectief de juiste docs voor me heb, lees ik dat setTexture() geen kopie maakt van het argument, maar een pointer naar het argument opslaat. Ben je zeker dat het argument dat je meegeeft met setTexture() nog bestaat op het moment dat s_mPanel het nodig heeft, en dat je t_mPanel_Textures nadien niet wijzigt?

yannick

Legacy Member
forloRn_ zei:
Ik zou die calls naar reserve() om te beginnen al weglaten. Dat ga je enkel gebruiken om dingen te optimaliseren wanneer je weet dat je programma werkt, wat hier dus nog niet het geval is.

Gesteld dat ik hier effectief de juiste docs voor me heb, lees ik dat setTexture() geen kopie maakt van het argument, maar een pointer naar het argument opslaat. Ben je zeker dat het argument dat je meegeeft met setTexture() nog bestaat op het moment dat s_mPanel het nodig heeft, en dat je t_mPanel_Textures nadien niet wijzigt?

Als ik de gegevens afdruk van de textures dan zie ik dat hij de laatste wel degelijk laadt, enkel als ik deze uit de vector wil halen komt er niets tevoorschijn. Laad ik nu echter nog eens exact de dezelfde texture in als de laatste (dus die dummy) dan komt het juiste paneel wel tevoorschijn.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan