2016-03-03 77 views
0
class dynamic 
{  
public:   
    dynamic(); 
    void value(); 
    void move(); 
    sf::RectangleShape rs;   
}; 

dynamic::dynamic()  
{ 
    rs.setSize(sf::Vector2f(200,200)); 
    rs.setFillColor(sf::Color::Red); 
    rs.setPosition(300, 300) 
}; 

void dynamic::move() 
{ 
    if (sf::Keyboard::isKeyPressed(sf::Keyboard::Down)) 
    {    
     spr.move(0, 1);   
     value();    
    } 
} 

void dynamic::value() 
{ 
    return spr.getposition.y 
} 

----------------不同势类---------------如何访问动态变量

class context : public dynamic { 

public: 
    void valueWrite(); 

}; 

void context::valueWrite(){   

    std::cout << spr.getposition.y; 

} 

----------------游戏类---------------

class Game { 
public:   
    Game(); 

    void draw();   
    void update(); 
    void loop();   

    sf::RenderWindow window; 

    context m_context; 
    dynamic m_dynamic;   
}; 


game::game(): window(sf::VideoMode(800, 600), "SFML window")  
{ 

} 

void game::loop() 
{ 
    while (window.isOpen()) 
    { 
     update(); 
     draw(); 

     sf::Event event; 
     while (window.pollEvent(event)) 
     { 
      if (event.type == sf::Event::Closed) 
      {      
       window.close(); 
      } 
     } 
    } 
} 

void game::draw() 
{ 
    window.clear(); 
    m_dynamic.render(window); 
    window.display(); 
} 

void game::update()  
{ 
    m_dynamic.move(); 
    m_context.valueWrite();   
} 

当我运行的主要这个程序,我spr位置加时也一样。 控制台= 300 300 300 300 300 .........

我想写类方面

如何解决这个问题的当前值。

+0

我不清楚你在问什么。你期望'm_context'和'm_dynamic'能够共享相同的状态吗? – NathanOliver

+0

是的,当我按下向下键spr位置改变。但是每次valueWrite函数都是一样的。我想改变这个位置函数的值。对不起,我的英语不好。我希望你能理解我 – caatayk

回答

0

在此代码中,m_dynamic和m_context对象彼此独立。 m_context尝试写入的值不是m_dynamic的值。

您应该只创建一个“上下文”对象。你会从“上下文”对象中调用“移动”功能。

m_context.move(); 
m_context.valueWrite(); 

并呈现太。

+0

正如我所看到的,你在继承逻辑方面有问题。你可能想看看这个:http://www.tutorialspoint.com/cplusplus/cpp_inheritance.htm – sunofkyuss