Mattowy Temat założony przez niniejszego użytkownika |
[SFML Gra] Przemieszczanie się obiektu po ekranie » 2014-09-07 13:05:09 Witam, Mój problem polega na tym, że jak kliknę na niektóre miejsca, na ekranie, to obiekt w kółko przesuwa się z lewej strony na prawą. Jak kliknę w inne miejsce, to po prostu się zatrzymuje. Nie chodzi tutaj o ruchy "na zmianę", tylko o jakieś miejsca. Jaka jest zasada? I jak wyeliminować błąd? Podejrzewam, że chodzi tutaj o okno. Kody plików. RObiekt.h #ifndef RObiekt_h #define RObiekt_h
class RObiekt { public: double x; double y; double v; RObiekt( double f_x = 0.0, double f_y = 0.0, double f_v = 1.0 ) : x( f_x ) , y( f_y ) , v( f_v ) { } void PrzesunObiekt( double vX, double vY ); };
#endif
RObiekt.cpp #include "RObiekt.h"
void RObiekt::PrzesunObiekt( double vX, double vY ) { if( x < vX ) { x += v; if( x > vX ) x = v; } else if( x > vX ) { x -= v; if( x < vX ) x = vX; } if( y < vY ) { y += v; if( y > vY ) y = vY; } else if( y > vY ) { y -= v; if( y < vY ) y = vY; } }
main.cpp #include <SFML/Graphics.hpp> #include <vector> #include <iostream> #include "RObiekt.h"
int main() { sf::RenderWindow win( sf::VideoMode( 1366, 768, 512 ), "Wytwarzanie gier C++", sf::Style::Default ); win.setVerticalSyncEnabled( true ); typedef std::vector < RObiekt > VObiektyT; VObiektyT vObiekty; sf::Texture textura; if( textura.loadFromFile( "Sprite_logo.jpg" ) ) std::cerr << "Nie mozna wyswietlic logo" << std::endl; sf::CircleShape circle( 20 ); circle.setOrigin( 20, 20 ); circle.setTexture( & textura ); circle.setOutlineColor( sf::Color::Green ); circle.setOutlineThickness( 3 ); circle.setScale( 1.0, 1.0 ); bool temp = true; bool tmp = false; float X_pos, Y_pos; sf::Event eve; while( win.isOpen() ) { while( win.pollEvent( eve ) ) { if( eve.type == sf::Event::Closed ) win.close(); if( eve.type == sf::Event::KeyPressed && eve.key.code == sf::Keyboard::Escape ) win.close(); if( eve.type == sf::Event::KeyPressed && eve.key.code == sf::Keyboard::Space ) { if( temp ) { win.create( sf::VideoMode( 1366, 768, 512 ), "Wytwarzanie Gier C++", sf::Style::Fullscreen ); temp = false; eve.key.code = sf::Keyboard::Unknown; } else { win.create( sf::VideoMode( 1366, 768, 512 ), "Wytwarzanie Gier C++", sf::Style::Default ); temp = true; eve.key.code = sf::Keyboard::Unknown; } } if( eve.type == sf::Event::MouseButtonPressed && eve.mouseButton.button == sf::Mouse::Left ) { X_pos =( float ) sf::Mouse::getPosition( win ).x; Y_pos =( float ) sf::Mouse::getPosition( win ).y; if( !tmp ) { vObiekty.push_back( RObiekt( X_pos, Y_pos, 1.5 ) ); tmp = true; } eve.mouseButton.button = sf::Mouse::Right; } } win.clear( sf::Color::Black ); if( tmp ) { vObiekty.begin()->PrzesunObiekt( X_pos, Y_pos ); circle.setPosition(( float ) vObiekty.begin()->x,( float ) vObiekty.begin()->y ); win.draw( circle ); } win.display(); } return 0; }
|
|
SeaMonster131 |
» 2014-09-07 13:41:50 Na pewno jeden błąd jest tutaj: |
|
RazzorFlame |
» 2014-09-07 15:38:01 if( eve.type == sf::Event::KeyPressed && eve.key.code == sf::Keyboard::Space ) { if( temp ) { win.create( sf::VideoMode( 1366, 768, 512 ), "Wytwarzanie Gier C++", sf::Style::Fullscreen ); temp = false; eve.key.code = sf::Keyboard::Unknown; } else { win.create( sf::VideoMode( 1366, 768, 512 ), "Wytwarzanie Gier C++", sf::Style::Default ); temp = true; eve.key.code = sf::Keyboard::Unknown; } }
Co to jest? Przy naciśnięci spacji tworzysz okno o rozmiarach 1366, 768 i o głębi 512 bitów? Człowieku WTF? Zamiast 512 wpisz 32 wtedy powinno działać. Tak samo na początku, kiedy pierwszy raz tworzysz okno. |
|
Mattowy Temat założony przez niniejszego użytkownika |
» 2014-09-07 17:31:30 W zasadzie dopiero próbuję się odnaleźć w świecie programowania i uczę się - całkiem sporo, sądzę. O co chodzi więc z głębią?
Aa i wszystko działa :) |
|
pekfos |
» 2014-09-07 17:59:02 |
|
« 1 » |