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

[SFML 2.0] Niechciana akcja po kliknięciu czegokolwiek

Ostatnio zmodyfikowano 2013-07-28 12:38
Autor Wiadomość
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
C/C++
#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; /**Predkosc lotu**/;
    Texture samolotl, samolotp, tlo, ziemia, wybuch;
    Sprite Samolot, Tlo, Ziemia, Wybuch;
    Zmienne();
}; //ZM.
Zmienne::Zmienne() {
    rotacja = 180, SamolotX = 300, SamolotY = 360, lot = 4; /**Predkosc lotu**/;
    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 ) )
        { //80 , 20
            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.
P-88915
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=11806

C/C++
while( Gra.pollEvent( ZM.Zdarzenie ) )
{ //80 , 20
    ZM.X_Myszy = ZM.Zdarzenie.mouseMove.x; //nie ma ifa
    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
P-88921
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 ?? ...
P-88922
pekfos
» 2013-07-28 12:38:06
Zagiąłeś czasoprzestrzeń. Problem rozwiązany - zamykam ;)
P-88932
« 1 »
  Strona 1 z 1