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

wprawianie obiektów gry w ruch v.1

Ostatnio zmodyfikowano 2014-09-24 13:28
Autor Wiadomość
przemko06
Temat założony przez niniejszego użytkownika
wprawianie obiektów gry w ruch v.1
» 2014-09-23 10:50:19
Sprawdzam wersje z poradnika, iż jest ona jak się dowiedziałem dla wersji SFML 1.6, musiałem ją przerobić pod wersje 2.1 i wygląda to tak:

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

struct RObiekt
{
    double x;
    double y;
    double fPredkosc;
   
    RObiekt( double f_x = 0.0, double f_y = 0.0, double f_fPredkosc = 1.0 )
        : x( f_x )
         , y( f_y )
         , fPredkosc( f_fPredkosc )
    { }
   
    void PrzesunObiekt( double idzDoX, double idzDoY )
    {
        if( x < idzDoX )
        {
            x += fPredkosc;
            if( x > idzDoX )
                 x = idzDoX;
           
        } else
        if( x > idzDoX )
        {
            x -= fPredkosc;
            if( x < idzDoX )
                 x = idzDoX;
           
        }
       
        if( y < idzDoY )
        {
            y += fPredkosc;
            if( y > idzDoY )
                 y = idzDoY;
           
        } else
        if( y > idzDoY )
        {
            y -= fPredkosc;
            if( y < idzDoY )
                 y = idzDoY;
           
        }
    }
}; //struct RObiekt

int main()
{
    sf::RenderWindow oknoAplikacji( sf::VideoMode( 800, 600, 32 ), "Wytwarzanie Gier 2D, C++ | http://cpp0x.pl" );
    oknoAplikacji.setVerticalSyncEnabled( true ); //Włączenie synchronizacji pionowej - stała liczba FPS (zazwyczaj 60) - zadziała pod warunkiem, że system nie wymusza na aplikacji wyłączenia tego trybu
   
    typedef std::vector < RObiekt > VObiektyT;
    VObiektyT vObiekty;
   
    vObiekty.push_back( RObiekt( 50, 50, 1.0 ) );
    vObiekty.push_back( RObiekt( 100, 250, 3.5 ) );
    vObiekty.push_back( RObiekt( 300, 100, 5.0 ) );
    vObiekty.push_back( RObiekt( 500, 500, 2.5 ) );
   
    while( oknoAplikacji.isOpen() )
    {
        sf::Event zdarzenie;
        while( oknoAplikacji.pollEvent( zdarzenie ) )
        {
            if( zdarzenie.type == sf::Event::Closed )
                 oknoAplikacji.close();
           
            if( zdarzenie.type == sf::Event::KeyPressed && zdarzenie.key.code == sf::Keyboard::Escape )
                 oknoAplikacji.close();
           
        } //while
       
        //Przemieszczanie obiektów:
        vObiekty[ 0 ].PrzesunObiekt( 300, 300 );
        vObiekty[ 1 ].PrzesunObiekt( 500, 500 );
        vObiekty[ 2 ].PrzesunObiekt( 100, 100 );
        vObiekty[ 3 ].PrzesunObiekt( 300, 40 );
       
        sf::CircleShape circle( 25 );
        circle.setPointCount( 30 );
       
       
        oknoAplikacji.clear();
        for( VObiektyT::const_iterator i = vObiekty.begin(); i != vObiekty.end(); ++i )
             oknoAplikacji.draw( circle );
       
        oknoAplikacji.display();
    }
    return 0;
}

Wszystko się kompiluje lecz niestety obiekt nie został wprawiony w ruch...
Dlaczego?
P-117376
pekfos
» 2014-09-23 10:59:40
Uczysz się przez kopiowanie przykładów, czy zrozumienie..? Twój kod jest widocznie bez sensu w porównaniu z tym, co było.
C/C++
for( VObiektyT::const_iterator i = vObiekty.begin(); i != vObiekty.end(); ++i )
     oknoAplikacji.draw( circle );
C/C++
for( VObiektyT::const_iterator i = vObiekty.begin(); i != vObiekty.end(); ++i )
     oknoAplikacji.Draw( sf::Shape::Circle( i->x, i->y, 10, sf::Color::Red ) );
P-117377
przemko06
Temat założony przez niniejszego użytkownika
» 2014-09-23 11:06:35
To akurat skopiowałem i poprawiłem to co podkreslało.

Dlaczego napisałem tak a nie sf::Shape::Circle...  Ponieważ mi to podkreśla ;) I nie do końca rozumiem tą pętle :/
P-117378
pekfos
» 2014-09-23 11:13:18
Dlaczego napisałem tak a nie sf::Shape::Circle...  Ponieważ mi to podkreśla ;)
Akurat nie o to chodzi, a o i->x i i->y. Rozumiem, że podkreślało, to wywaliłeś? Teraz rysujesz wszystkie koła w jednym miejscu, bo nie uwzględniasz współrzędnych obiektów.
P-117379
przemko06
Temat założony przez niniejszego użytkownika
» 2014-09-23 11:21:08
a no tak :/ tylko że w takim razie jak mam dodać to?
bo tak być nie może:

C/C++
sf::CircleShape circle;
circle.setPointCount( 30 );

oknoAplikacji.clear();
for( VObiektyT::const_iterator i = vObiekty.begin(); i != vObiekty.end(); ++i )
     oknoAplikacji.draw( circle( i->x, i->y, 25 ) );

P-117381
maly
» 2014-09-23 11:24:01
circle.setPosition
P-117382
przemko06
Temat założony przez niniejszego użytkownika
» 2014-09-23 11:30:10
Chyba za dużo naraz chce sie nauczyć i zaczyna mi się w głowie jeb... :(

czyli:
C/C++
for( VObiektyT::const_iterator i = vObiekty.begin(); i != vObiekty.end(); ++i )
     oknoAplikacji.draw( circle.setPosition( i->x, i->y, 25 ) );


niestety error



error C2661: 'sf::Transformable::setPosition' : no overloaded function takes 3 arguments
P-117383
maly
» 2014-09-23 11:37:53
Bez umienia/rozumienia podstaw, kopiuj/wklej to najgorszy sposób na programowanie nie mówiąc już o uczeniu się.
C/C++
{
    circle.setPosition( i->x, i->y );
    oknoAplikacji.draw( circle );
}
P-117384
« 1 » 2
  Strona 1 z 2 Następna strona