Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Wywołanie elementu klasy wewnątrz vectora.

Ostatnio zmodyfikowano 2013-04-29 20:54
Autor Wiadomość
sinoo
Temat założony przez niniejszego użytkownika
Wywołanie elementu klasy wewnątrz vectora.
» 2013-04-29 19:26:33
Witam,
problem wygląda tak:
    W jaki sposób mogę użyć zmiennej, lub funkcji w obiekcie, których zbiór jest wewnątrz vectora?

Dla wyjaśnienia kod, w którym chcę to użyć(klasa Obiekt w vectorze vObiekty w klasie World):

C/C++
#include <SFML\Graphics.hpp>
#include <vector>

class Obiekt
{
protected:
    int xPosition;
    int yPosition;
    int ID;
    sf::Sprite Sprajt;
public:
    Obiekt( int id, int xPos, int yPos, sf::Image & img )
        : xPosition( xPos )
        , yPosition( yPos )
    {
        Sprajt.SetImage( img );
    }
   
    bool Colision( int ID )
    { }
   
};

class Hero
    : public Obiekt
{
public:
    Hero( int id, int xPos, int yPos, sf::Image & img )
        : Obiekt( id, xPos, yPos, img )
    { }
   
    void GoLeft()
    { }
   
    void GoRight()
    { }
   
    void GoUp()
    { }
   
    void GoDown()
    { }
};

class World
{
public:
    unsigned char MapID;
    std::vector < Obiekt > vObiekty;
   
    World( unsigned char mapID )
        : MapID( mapID )
    {
        LoadMap( MapID );
    }
   
    void AddObiect( int xPos, int yPos, sf::Image & IMG )
    {
        vObiekty.push_back( Obiekt( vObiekty.size() - 1, xPos, yPos, IMG ) );
    }
    void DelObiect( int ID )
    {
        vObiekty.erase( vObiekty.begin() + ID );
    }
   
    void LoadMap( unsigned char MapID )
    {
        switch( MapID )
        {
        case 1:
            break;
        default:
            break;
        }
    }
   
};

int main()
{
    sf::RenderWindow AppWin( sf::VideoMode( 800, 600, 32 ), "Game window title" );
   
    //---Deklaracje zmiennych---
    sf::Image blok1;
    sf::Image heroIMG;
    blok1.LoadFromFile( "blok1.jpg" );
    heroIMG.LoadFromFile( "hero.png" );
   
    Hero hero( 0, 100, 200, heroIMG );
    World world1( 1 );
    //--------------------------
    world1.LoadMap( 1 ); // wczytywanie mapy
   
    while( AppWin.IsOpened() ) //----- pętla główna -----
    {
        sf::Event Event;
        while( AppWin.GetEvent( Event ) )
        {
            if( Event.Type == sf::Event::KeyPressed && Event.Key.Code == sf::Key::W )
                 hero.GoUp();
           
            if( Event.Type == sf::Event::KeyPressed && Event.Key.Code == sf::Key::S )
                 hero.GoDown();
           
            if( Event.Type == sf::Event::KeyPressed && Event.Key.Code == sf::Key::A )
                 hero.GoLeft();
           
            if( Event.Type == sf::Event::KeyPressed && Event.Key.Code == sf::Key::D )
                 hero.GoRight();
           
            if( Event.Type == sf::Event::Closed )
                 AppWin.Close();
           
        }
        AppWin.Clear();
        AppWin.Display();
    } //-- end --
}

Konkretnie chodzi mi o wyrysowanie funkcją
AppWin.Draw()
 Sprajta znajdującego się w klasie Obiekt, która z kolei jest zadeklarowana w vectorze vObiekty klasy World.
P-81526
pekfos
» 2013-04-29 19:39:03
Pętlą.
P-81533
sinoo
Temat założony przez niniejszego użytkownika
» 2013-04-29 19:53:40
Tak, wiem - w pętl wywołam wszystkie, ale jak wywołać jakikolwiek?
C/C++
WinApp.Draw( world1.vObiekty.Sprajt ) //coś takiego? tyle, że to akurat źle
 
chodzi mi tu ogólnie o użycie jakiejś metody, lub zmiennej obiektu, który jest wewnątrz vectora.
P-81539
pekfos
» 2013-04-29 20:02:34
C/C++
wektor[ indeks ].zmienna;
wektor.at( indeks ).zmienna;
iterator->zmienna;
//itp
P-81543
sinoo
Temat założony przez niniejszego użytkownika
» 2013-04-29 20:54:22
O to mi właśnie chodziło. Wielkie dzięki :)
P-81550
« 1 »
  Strona 1 z 1