【问题标题】:SFML Input system problemSFML 输入系统问题
【发布时间】:2011-04-20 11:21:04
【问题描述】:

所以我将我的游戏引擎从 SDL 移植到 SFML,但现在我的输入系统出现了问题。 输入.h


#ifndef BULLWHIP_INPUT_H
#define BULLWHIP_INPUT_H
#include 

class bc_Input
{
    public:
        bool bm_KeyHit(sf::Key::Code key);
        bool bm_KeyDown(sf::Key::Code key);
        int bm_MouseX();
        int bm_MouseY();
        void bm_init(sf::RenderWindow app);
    private:
        sf::RenderWindow App;
        const sf::Input& input;
};

#endif

输入.cpp


#include "Input.h"

bool bc_Input::bm_KeyDown(sf::Key::Code key)
{
    return in.IsKeyDown(key)
}

bool bc_Input::bm_KeyHit(sf::Key::Code key)
{
    sf::Event event;
    while(App.GetEvent(event) && event.Type == sf::Event::KeyPressed)
    {
        switch(event.Key.Code)
        {
            case key: return true; break;
            default:
                break;
        }
    }

}

void bc_Input::bm_init(sf::RenderWindow app)
{
    App = app;
    in = App.GetInput();
}

int bc_Input::bm_MouseX()
{
    return in.GetMouseX();
}

int bc_Input::bm_MouseY()
{
    return in.GetMouseY();
}

我从这里得到这些错误:

C:\c++\sdl\bullwhip\lib\Bullwhip\/Input.h:15: 错误:'bc_Input::App' 不能出现在常量表达式中 C:\c++\sdl\bullwhip\lib\Bullwhip\/Input.h:15: 错误:'.'不能出现在常量表达式中 C:\c++\sdl\bullwhip\lib\Bullwhip\/Input.h:15:错误:函数调用不能出现在常量表达式中 C:\c++\sdl\bullwhip\lib\Bullwhip\/Input.h:15:错误:ISO C++ 禁止初始化成员“输入” C:\c++\sdl\bullwhip\lib\Bullwhip\/Input.h:15: 错误:将“输入”设为静态 C:\c++\sdl\bullwhip\lib\Bullwhip\/Input.h:15:错误:非整数类型'sf::Input&'的静态数据成员的类内初始化无效

c:\program files (x86)\codeblocks\mingw\bin../lib/gcc/mingw32/4.4.0/../../../../include/SFML/System/NonCopyable。 hpp:57: 错误: 'sf::NonCopyable::NonCopyable(const sf::NonCopyable&)' 是私有的 c:\program files (x86)\codeblocks\mingw\bin../lib/gcc/mingw32/4.4.0/../../../../include/SFML/Window/Window.hpp:56 : 错误:在这种情况下

【问题讨论】:

    标签: input reference constants sfml noncopyable


    【解决方案1】:

    你在这里调用了复制构造函数:

    void bc_Input::bm_init(sf::RenderWindow app)
    {
        App = app;
        in = App.GetInput();
    }
    

    注意您的错误消息之一:

    error: 'sf::NonCopyable::NonCopyable(const sf::NonCopyable&)
    

    为了避免这个问题,你应该为你的 sf::Input 对象使用一个实际的构造函数以及一个初始化列表。

    或者,如果您已经在更高的子系统中初始化了 sf::RenderWindow(很可能是这种情况),只需将成员变量 App 更改为引用即可。

    //header
    sf::RenderWindow& App;
    ...
    //source
    void bc_Input::bm_init(sf::RenderWindow& app)
    {
        App = app;
        in = App.GetInput();
    } 
    

    【讨论】:

      猜你喜欢
      • 2012-12-13
      • 2018-02-22
      • 2021-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-21
      • 2021-07-12
      相关资源
      最近更新 更多