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

[SDL] Obsługa ruchu myszy

Ostatnio zmodyfikowano 2014-07-12 13:11
Autor Wiadomość
timik007
Temat założony przez niniejszego użytkownika
[SDL] Obsługa ruchu myszy
» 2014-07-11 15:51:14
Mam problem który występuje niestety dopiero po odpaleniu aplikacji. Usiłuje napisać fragment kodu,dzięki któremu postać będzie poruszała się za kursorem myszki. Wiem co powoduje problem , jednak nie wiem jaki ani jak to naprawic ;/.


Plik Nagłówkowy Wektora
C/C++
#include<math.h>
#include<iostream>

using namespace std;


#ifndef __Vector2D__
#define __Vector2D__

class Vector2D // Utworzenie klasy Vector2D odpowiedzialnej za ruch obiektów po wektorach .
{
public:
    Vector2D( float x, float y )
        : Temp_x( x )
         , Temp_y( y )
    { }
    float Get_X() { return Temp_x; }
    float Get_Y() { return Temp_y; }
    float lenght() { return sqrt( Temp_x * Temp_x + Temp_y * Temp_y ); }
    void SetX( float x ) { Temp_x = x; }
    void SetY( float y ) { Temp_y = y; }
   
    Vector2D operator +( const Vector2D & v2 ) const
    {
        return Vector2D( Temp_x + v2.Temp_x, Temp_y + v2.Temp_y );
    }
   
    friend Vector2D & operator +=( Vector2D & v1, const Vector2D & v2 )
    {
        v1.Temp_x += v2.Temp_x;
        v1.Temp_y += v2.Temp_y;
        return v1;
    }
   
    Vector2D operator *( float scalar )
    {
        return Vector2D( Temp_x * scalar, Temp_y * scalar );
    }
   
    Vector2D operator *=( float scalar )
    {
        Temp_x *= scalar;
        Temp_y *= scalar;
        return * this;
    }
   
    Vector2D operator -( const Vector2D & v2 ) const
    {
        return Vector2D( Temp_x - v2.Temp_x, Temp_y - v2.Temp_y );
    }
   
    friend Vector2D & operator -=( Vector2D & v1, const Vector2D & v2 )
    {
        v1.Temp_x -= v2.Temp_x;
        v1.Temp_y -= v2.Temp_y;
        return v1;
    }
   
    Vector2D operator /( float scalar )
    {
        return Vector2D( Temp_x / scalar, Temp_y / scalar );
    }
   
    Vector2D & operator /=( float scalar )
    {
        Temp_x /= scalar;
        Temp_y /= scalar;
        return * this;
    }
   
    void normalize()
    {
        float L = lenght();
        if( 1 > 0 )
        {
            ( * this ) *= 1 / L;
        }
    }
private:
    float Temp_x, Temp_y;
}
;





#endif // !__Vector2D__  



Plik Nagłówkowy Klawiatury , jednak problem wywołuje tylko część związana z ruchem myszy

C/C++
#include<SDL.h>
#include<vector>
#include<iostream>
#include"Vector2D.h"

using namespace std;
#ifndef __Klawiatura__
#define __Klawiatura__



enum P_Myszki
{
    Lewy = 0,
    Ś rodkowy = 1,
    Prawy = 2
};


class Klawiatura
{
public:
   
    vector < bool > P_Myszki_Stan; // Utworzenie tablicy przechowującej elementy typu bool.
    static Klawiatura * Instance()
    {
        if( s_pInstance == 0 )
        {
            s_pInstance = new Klawiatura();
        }
        return s_pInstance;
    }
   
    Vector2D * Get_Pozycja_Wska ź nika()
    {
        return Pozycja_Wska ź nika;
    }
   
    bool Sprawd ź _P_Myszki( int Przycisk ) // Utworzenie funkcji ,która sprawdza status przycisku.
    {
        return P_Myszki_Stan[ Przycisk ];
    }
   
    void update();
    void clean();
   
private:
    Klawiatura() {
        for( int i = 0; i < 3; i++ )
        {
            P_Myszki_Stan.push_back( false );
        }
    } // W konstruktorze okreslamy rozmiar Tablicy P_Myszki.
    ~Klawiatura() { }
   
    Vector2D * Pozycja_Wska ź nika;
   
   
   
   
   
    static Klawiatura * s_pInstance;
   
};





#endif        


C/C++
#include<iostream>
#include"Klawiatura.h"
#include"Funkcje.h"
#include"Vector2D.h"

void Klawiatura::update()
{
    SDL_Event event;
    while( SDL_PollEvent( & event ) )
    {
        if( event.type == SDL_QUIT )
        {
            Gra::Instance()->Quit();
        }
    }
    if( event.type == SDL_MOUSEBUTTONDOWN ) // w przypadku nacisniecia któregoś z przycisku myszki, zmiana jego statusu na true.
    {
        if( event.button.button == SDL_BUTTON_LEFT )
        {
            P_Myszki_Stan[ Lewy ] = true;
        }
       
        if( event.button.button == SDL_BUTTON_MIDDLE )
        {
            P_Myszki_Stan[ Ś rodkowy ] = true;
        }
       
        if( event.button.button == SDL_BUTTON_RIGHT )
        {
            P_Myszki_Stan[ Prawy ] = true;
        }
    }
    if( event.type == SDL_MOUSEBUTTONUP ) // w przypadku podniesionych przycisków myszy , ustawienie ich statusów na false.
    {
        if( event.button.button == SDL_BUTTON_LEFT )
        {
            P_Myszki_Stan[ Lewy ] = false;
        }
        if( event.button.button == SDL_BUTTON_MIDDLE )
        {
            P_Myszki_Stan[ Ś rodkowy ] = false;
        }
        if( event.button.button == SDL_BUTTON_RIGHT )
        {
            P_Myszki_Stan[ Prawy ] = false;
        }
    }
    //////////////////////////// Przy ruchu myszą po oknie wywala grę wiec problem jest najprawdopodobniej w Pozycja_Wskaźnika////////////////////////////
    if( event.type == SDL_MOUSEMOTION )
    {
        Pozycja_Wska ź nika->SetX( event.motion.x );
        Pozycja_Wska ź nika->SetY( event.motion.y );
    }
   
}





P-113623
Wgbg
» 2014-07-11 16:00:37
Na jakim środowisku pracujesz ? Prawdopodobnie powinieneś dostać jakiś błąd który nakierowałby cię może na rozwiązanie.
Nie widze nigdzie abyś tworzył obiekt i przypisywał go do Pozycja_Wskaznika, spróbuj np w konstruktorze klasy albo w odpowiednim momencie(np przy przeciążeniu operatora) utworzyć obiekt w tym wskaźniku.
P-113624
pekfos
» 2014-07-11 16:12:02
Wiem co powoduje problem
Słuchamy.
P-113625
timik007
Temat założony przez niniejszego użytkownika
» 2014-07-11 16:15:29
Pracuje na visual studio 2013 .
Docelowo ma byc utworzony wektor , który bedzie naprowadzał gracza na pozycje myszki.
Pozycja to wektor pozycji gracza , przyspieszenie to wektor który ma umożliwić ruch postaci do kursora , poniższy kod zostanie wstawiony do pliku w którym zdefiniowany jest gracz i teoretycznie powinno działać , gdyż wspomagam się książka. Moim zdaniem cos jest nie ok z Pozycja_Wskaźnika.
ale nie wiem co ;/
C/C++
Vector2D * Wektor = Klawiatura::Instance()->Get_Pozycja_Wska ź nika();
Przyspieszenie =( * Wektor - Pozycja ) / 100
 
P-113626
timik007
Temat założony przez niniejszego użytkownika
» 2014-07-11 16:18:49
Gdy pozbywam sie definicji pozycja wskaźnika aplikacja działa bez zarzutu. Zdaje mi się ze robie coś źle tworząc wskaźnik do klasy Vector2D
P-113627
timik007
Temat założony przez niniejszego użytkownika
» 2014-07-11 16:30:15
w aplikacji wywala błąd w momencie gdy Pozycja_Wskaźnika próbuje przypisac pozycje kursora myszy.
P-113628
Monika90
» 2014-07-11 17:30:36
Nie rozumiem dlaczego utrudniasz sobie życie. Nie używaj wskaźników bez potrzeby.
Usuń zbędna gwiazdkę z
Vector2D * Pozycja_Wska ź nika;
, zastąp strzałki -> kropkami i będzie lepiej.
P-113631
timik007
Temat założony przez niniejszego użytkownika
» 2014-07-11 19:06:35
wyskakuje mi błąd w pliku nagłówkowym "klawiatura.h" "no default constructor exist for class Vector2D"
P-113638
« 1 » 2
  Strona 1 z 2 Następna strona