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

Problem z dziedziczeniem, wartości się nie zapisują [SFML]

Ostatnio zmodyfikowano 2014-02-05 11:37
Autor Wiadomość
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 :
C/C++
#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;
}
P-103991
Monika90
» 2014-02-04 21:28:39
To dlatego, że przekazujesz figurę przez wartosć, więc poruszajFigura operuje na lokalnej kopii obiektu.
P-103997
domin568
Temat założony przez niniejszego użytkownika
» 2014-02-05 11:37:39
Bardzo głupi błąd, dziękuję za pomoc :)
P-104029
« 1 »
  Strona 1 z 1