Thread: C++ vectors

  1. #1
    yannick's Avatar
    Registered
    16/09/02
    Location
    Antwerpen
    Posts
    2,211
    iTrader
    6 (100%)
    Mentioned
    0 Post(s)
    Reputation
    0/2

    C++ vectors

    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
    no votes  

  2. #2
    forloRn_'s Avatar
    Registered
    23/11/03
    Location
    Landeurp
    Posts
    1,791
    iTrader
    0
    Mentioned
    0 Post(s)
    Reputation
    10/17
    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?
    no votes  

  3. #3
    yannick's Avatar
    Registered
    16/09/02
    Location
    Antwerpen
    Posts
    2,211
    iTrader
    6 (100%)
    Mentioned
    0 Post(s)
    Reputation
    0/2
    Quote Originally Posted by forloRn_ View Post
    This quote is hidden because you are ignoring this member. Show
    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.
    no votes  

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  

Log in

Log in