[SFML 2.0] Niechciana akcja po kliknięciu czegokolwiek
Ostatnio zmodyfikowano 2013-07-28 12:38
Alan468 Temat założony przez niniejszego użytkownika |
[SFML 2.0] Niechciana akcja po kliknięciu czegokolwiek » 2013-07-27 22:05:10 Witam,
Sądzę ,że to znany problem ,ale nie znalazłem remedium mianowicie chodzi o to ,że po wciśnięciu czegokolwiek zmieniają się pozycje ,kierunki(czyt.:stan przed kliknięciem) choć nie opisałem owego zdarzenia przykład w tym kodzie:
main.cpp
#include <SFML/Graphics.hpp> #include <iostream> #include <math.h> #include <windows.h>
using namespace std; using namespace sf;
class Zmienne { public: Event Zdarzenie; int X_Myszy, Y_Myszy, OstatniaPozMyszyX, OstatniaPozMyszyY; float rotacja, SamolotX, SamolotY, lot; ; Texture samolotl, samolotp, tlo, ziemia, wybuch; Sprite Samolot, Tlo, Ziemia, Wybuch; Zmienne(); }; Zmienne::Zmienne() { rotacja = 180, SamolotX = 300, SamolotY = 360, lot = 4; ; samolotl.loadFromFile( "samolotl.bmp" ); samolotp.loadFromFile( "samolotp.bmp" ); Samolot.setTexture( samolotp ); Samolot.setPosition( SamolotX, SamolotY ); Samolot.setOrigin( 40, 10 ); wybuch.loadFromFile( "wybuch.bmp" ); Wybuch.setTexture( wybuch ); Wybuch.setOrigin( 0, 60 ); ziemia.loadFromFile( "ziemia.bmp" ); Ziemia.setTexture( ziemia ); Ziemia.setPosition( 0, 600 ); tlo.loadFromFile( "tlo.bmp" ); Tlo.setTexture( tlo ); }
int main() { Zmienne ZM; RenderWindow Gra( VideoMode( 1280, 720, 32 ), "Nazwa okno" ); Gra.setFramerateLimit( 60 ); while( Gra.isOpen() ) { while( Gra.pollEvent( ZM.Zdarzenie ) ) { ZM.X_Myszy = ZM.Zdarzenie.mouseMove.x; ZM.Y_Myszy = ZM.Zdarzenie.mouseMove.y; if( ZM.Zdarzenie.type == Event::Closed ) { Gra.close(); } if( ZM.Zdarzenie.type == Event::Resized ) { Gra.setSize( Vector2u( 1280, 720 ) ); } } ZM.X_Myszy = ZM.Zdarzenie.mouseMove.x; ZM.Y_Myszy = ZM.Zdarzenie.mouseMove.y; if( ZM.OstatniaPozMyszyX != ZM.X_Myszy && ZM.OstatniaPozMyszyY != ZM.Y_Myszy ) { ZM.rotacja = atan2(( ZM.Y_Myszy - ZM.SamolotY ),( ZM.X_Myszy - ZM.SamolotX ) ) * 180 / M_PI + 180; ZM.OstatniaPozMyszyX = ZM.X_Myszy; ZM.OstatniaPozMyszyY = ZM.Y_Myszy; } if( ZM.SamolotX > 1280 ) { ZM.SamolotX = 0; } if( ZM.SamolotX < 0 ) { ZM.SamolotX = 1280; } if( ZM.SamolotY >= 590 ) { Gra.close(); return 0; } if( ZM.rotacja > 360 ) { ZM.rotacja = 0; } if( ZM.rotacja < 0 ) { ZM.rotacja = 360; } if( ZM.rotacja <= 270.0 && ZM.rotacja > 90.0 ) { ZM.Samolot.setTexture( ZM.samolotp ); if( ZM.SamolotY <= 0 ) { ZM.SamolotY = 1; ZM.rotacja += 90; } } else { ZM.Samolot.setTexture( ZM.samolotl ); if( ZM.SamolotY <= 0 ) { ZM.SamolotY = 1; ZM.rotacja -= 90; } } ZM.SamolotX -=( ZM.lot * cos( ZM.rotacja *( 3.14 / 180.f ) ) ); ZM.SamolotY -=( ZM.lot * sin( ZM.rotacja *( 3.14 / 180.f ) ) ); ZM.Samolot.setPosition( ZM.SamolotX, ZM.SamolotY ); ZM.Samolot.setRotation( ZM.rotacja ); Gra.clear(); Gra.draw( ZM.Tlo ); Gra.draw( ZM.Ziemia ); Gra.draw( ZM.Samolot ); Gra.display(); } }
Obiekt ma tylko latać za kursorem ,jakakolwiek akcja zmienia kierunek i nie wiem dlaczego. |
|
Admixior |
» 2013-07-27 23:16:46 Nie mogę znaleźć gdzie, ale dosłownie parę dni temu ktoś się zgłaszał z podobnym problemem. To jest: identycznie jak ty nie sprawdził if-em jaki to typ wiadomości. Zaraz spróbuje znaleźć. Ot proszę: http://cpp0x.pl/forum/temat/?id=11806while( Gra.pollEvent( ZM.Zdarzenie ) ) { ZM.X_Myszy = ZM.Zdarzenie.mouseMove.x; ZM.Y_Myszy = ZM.Zdarzenie.mouseMove.y; if( ZM.Zdarzenie.type == Event::Closed ) { Gra.close(); } if( ZM.Zdarzenie.type == Event::Resized ) { Gra.setSize( Vector2u( 1280, 720 ) ); } }
@down: poprawione |
|
Alan468 Temat założony przez niniejszego użytkownika |
» 2013-07-28 00:21:00 Dzięki pomogło :) Tylko dlaczego link prowadzi do TEGO tematu ?? ... |
|
pekfos |
» 2013-07-28 12:38:06 Zagiąłeś czasoprzestrzeń. Problem rozwiązany - zamykam ;) |
|
« 1 » |