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: #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; } } };
int main() { sf::RenderWindow oknoAplikacji( sf::VideoMode( 800, 600, 32 ), "Wytwarzanie Gier 2D, C++ | http://cpp0x.pl" ); oknoAplikacji.setVerticalSyncEnabled( true ); 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(); } 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? |
|
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. for( VObiektyT::const_iterator i = vObiekty.begin(); i != vObiekty.end(); ++i ) oknoAplikacji.draw( circle ); |
for( VObiektyT::const_iterator i = vObiekty.begin(); i != vObiekty.end(); ++i ) oknoAplikacji.Draw( sf::Shape::Circle( i->x, i->y, 10, sf::Color::Red ) ); |
|
|
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 :/ |
|
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. |
|
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: 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 ) );
|
|
maly |
» 2014-09-23 11:24:01 circle.setPosition |
|
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: 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
|
|
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ę. { circle.setPosition( i->x, i->y ); oknoAplikacji.draw( circle ); } |
|
« 1 » 2 |