我一直在逐字逐句地学习,但是我得到了一个错误,我无法从制作教程的人那里得到答案!
我到了本教程的这一部分,它出错了: http://www.gamefromscratch.com/page/Game-From-Scratch-CPP-Edition-Part-6.aspx
我得到的错误是:
playerpaddle.cpp(32): error C2039: 'IsKeyDown' : is not a member of 'tagINPUT'
c:\program files (x86)\microsoft sdks\windows\v7.0a\include\winuser.h(5332) : see declaration of 'tagINPUT'
playerpaddle.cpp(36): error C2039: 'IsKeyDown' : is not a member of 'tagINPUT'
c:\program files (x86)\microsoft sdks\windows\v7.0a\include\winuser.h(5332) : see declaration of 'tagINPUT'
playerpaddle.cpp(40): error C2039: 'IsKeyDown' : is not a member of 'tagINPUT'
c:\program files (x86)\microsoft sdks\windows\v7.0a\include\winuser.h(5332) : see declaration of 'tagINPUT'
1>c:\users\dave\c++\pang\playerpaddle.cpp(54): error C2064: term does not evaluate to a function taking 1 arguments
使用此脚本部分:
void PlayerPaddle::Update(float elapsedTime)
{
if(Game::GetInput().IsKeyDown(sf::Key::Left))
{
_velocity-=3.0f;
}
if(Game::GetInput().IsKeyDown(sf::Key::Right))
{
_velocity+=3.0f;
}
if(Game::GetInput().IsKeyDown(sf::Key::Down))
{
_velocity = 0.0f;
}
if(_velocity > _maxVelocity)
_velocity = _maxVelocity;
if(_velocity < -_maxVelocity)
_velocity = -_maxVelocity;
sf::Vector2f pos = this->GetPosition();
if(pos.x <= GetSprite().GetSize().x/2 ||
pos.x >= (Game::SCREEN_WIDTH - GetSprite().GetSize().x/2))
{
_velocity = -_velocity;
}
GetSprite().Move(_velocity * elapsedTime, 0);
}
我附上了我的项目,看看: http://tinyurl.com/7evajju
答案 0 :(得分:4)
Game中的GetInput()静态返回一个windows结构。很确定这不是你想要的,因为该结构只有数据而没有方法。这个函数实际上没有实现,所以如果你只是让错误消失',你仍然会有一个未定义符号的链接器错误。
你认为它是'_tagINPUT'是windows typedef如何声明结构的效果。
您可能打算返回include \ SFML \ Window \ Input.hpp中定义的'Input'类
我相信你通常会在SFML Window类上调用GetInput()。
所以你想要的只是game.h而不是:
const sf::Input& GetInput() { return _mainWindow.GetInput(); }
我认为在深入游戏编程之前,你最好将注意力集中在C ++语言上。如果游戏编程是您感兴趣的,那么您可能需要研究可以让您制作游戏的更高级技术。走下C / C ++之路而不投资理解语言很可能会让你痛苦不堪,最终会讨厌你正在做的事情,这将是不幸的。