Problem z dziedziczeniem, wartości się nie zapisują [SFML]
Ostatnio zmodyfikowano 2014-02-05 11:37
domin568 Temat założony przez niniejszego użytkownika |
Problem z dziedziczeniem, wartości się nie zapisują [SFML] » 2014-02-04 19:59:30 Witam, piszę prosty program, aby zrozumieć programowanie obiektowe. Napisałem trzy klasy : Figura, Kwadrat, Kolko.Klasa Figura zawiera funkcje która ma poruszać figury (czyli w tym wypadku są to klasy Kwadrat i Kolko ). Jednak nie działa to jak powinno, kwadraty się w ogóle nie poruszają, jednak z wiadomości debugowych można wywnioskować że wszystkie funkcje się wykonują tak jak potrzeba, ale pozycja tak jakby się nie zapisuje. Dlaczego tak się dzieje ? Tutaj kod : #include "stdafx.h" #include <SFML/Graphics.hpp> #include <Box2D/Box2D.h> #include <iostream> using namespace std; class Figura { public: template < class T > void poruszajFigura( T klasa ) { if( sf::Keyboard::isKeyPressed( sf::Keyboard::W ) ) { cout << "AAAAAAAAAAAAAAA" << endl; klasa.move( 0, - 5 ); } if( sf::Keyboard::isKeyPressed( sf::Keyboard::D ) ) { klasa.move( 5, 0 ); } if( sf::Keyboard::isKeyPressed( sf::Keyboard::S ) ) { klasa.move( 0, 5 ); } if( sf::Keyboard::isKeyPressed( sf::Keyboard::A ) ) { klasa.move( - 5, 0 ); } } };
class Kwadrat : public Figura { private: sf::RectangleShape kwadrat; public: Kwadrat() { kwadrat.setSize( sf::Vector2f( 75, 75 ) ); kwadrat.setFillColor( sf::Color( 0, 0, 255 ) ); } void move( int x, int y ) { cout << "JESTEM W MOVE" << endl; cout << " X " << kwadrat.getPosition().x << endl; cout << " Y " << kwadrat.getPosition().y << endl; kwadrat.setPosition( kwadrat.getPosition().x + x, kwadrat.getPosition().y + y ); } void rysujKwadrat( sf::RenderWindow & okno ) { okno.draw( kwadrat ); } sf::RectangleShape getKwadrat() { return kwadrat; } }; class Kolko : public Figura { private: sf::CircleShape kolko; public: Kolko() { kolko.setRadius( 60 ); kolko.setFillColor( sf::Color( 255, 0, 0 ) ); kolko.setPosition( sf::Vector2f( 350, 350 ) ); } void move( int x, int y ) { kolko.move( sf::Vector2f( kolko.getPosition().x + x, kolko.getPosition().y + y ) ); } void rysujKolko( sf::RenderWindow & okno ) { okno.draw( kolko ); } sf::CircleShape getKolko() { return kolko; } };
int _tmain( int argc, _TCHAR * argv[] ) { sf::Event zdarzenie; sf::RenderWindow okno( sf::VideoMode( 800, 600, 32 ), "Projekt z YT", sf::Style::Default ); okno.setFramerateLimit( 60 ); Kwadrat klocek; Kolko koleczko; while( okno.isOpen() ) { klocek.poruszajFigura( klocek ); while( okno.pollEvent( zdarzenie ) ) { } okno.display(); okno.clear(); klocek.rysujKwadrat( okno ); koleczko.rysujKolko( okno ); } return 0; }
|
|
Monika90 |
» 2014-02-04 21:28:39 To dlatego, że przekazujesz figurę przez wartosć, więc poruszajFigura operuje na lokalnej kopii obiektu. |
|
domin568 Temat założony przez niniejszego użytkownika |
» 2014-02-05 11:37:39 Bardzo głupi błąd, dziękuję za pomoc :) |
|
« 1 » |