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 #include<math.h> #include<iostream>
using namespace std;
#ifndef __Vector2D__ #define __Vector2D__
class Vector2D { 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
Plik Nagłówkowy Klawiatury , jednak problem wywołuje tylko część związana z ruchem myszy #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; 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 ) { return P_Myszki_Stan[ Przycisk ]; } void update(); void clean(); private: Klawiatura() { for( int i = 0; i < 3; i++ ) { P_Myszki_Stan.push_back( false ); } } ~Klawiatura() { } Vector2D * Pozycja_Wska ź nika; static Klawiatura * s_pInstance; };
#endif #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 ) { 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 ) { 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; } } if( event.type == SDL_MOUSEMOTION ) { Pozycja_Wska ź nika->SetX( event.motion.x ); Pozycja_Wska ź nika->SetY( event.motion.y ); } } |
|
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. |
|
pekfos |
» 2014-07-11 16:12:02 |
|
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 ;/ Vector2D * Wektor = Klawiatura::Instance()->Get_Pozycja_Wska ź nika(); Przyspieszenie =( * Wektor - Pozycja ) / 100 |
|
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 |
|
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. |
|
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. |
|
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" |
|
« 1 » 2 |