12

LuaBridge のreadmeによると、LuaBridge は「列挙定数」をサポートしていませんenumssf::Eventほぼ完全なのでenums、クラスを公開する方法はありますか? 現在、私が思いつくことができる他の唯一の解決策は、C++ でキーの押下を検出し、イベントを説明する文字列を Lua に送信することです。明らかに、最新のキーボードには約 100 個以上のキーがあり、これにより大規模で醜い just if ステートメントのセグメントが生成されます。

SFML を使用したことがない場合: sf::Event クラスのソース コードへのリンク


アップデート:

私の質問で概説されている関数を作成しようとした後、C++ では複数の文字列を返すことができないため、ほとんどのイベントが無視されるため、とにかく機能しないことがわかりました。

ソースの例 (動作しません):

std::string getEvent()
{
    sf::Event event;
    while (window.pollEvent(event))
    {
        if (event.type == sf::Event::Closed) {window.close(); return "";}
        else if (event.type == sf::Event::GainedFocus) {return "GainedFocus";}
        else if (event.type == sf::Event::LostFocus) {return "LostFocus";}
        else if (event.type == sf::Event::Resized) {return "Resized";}
        else if (event.type == sf::Event::TextEntered)
        {
            if ((event.text.unicode < 128) && (event.text.unicode > 0)) {return "" + static_cast<char>(event.text.unicode);}
        }
        else if (event.type == sf::Event::KeyPressed)
        {
            //If else for all keys on keyboard
        }
        else if (event.type == sf::Event::KeyReleased)
        {
            //If else for all keys on keyboard
        }
        else {return "";}
    }
    return "";
}

更新更新:

この質問にはコメントも回答もなかったので、他のライブラリを除外しないことにしました。なので、列挙型をサポートするC++ライブラリがあれば、それを受け入れます

4

3 に答える 3

2

この質問にはコメントも回答もなかったので、他のライブラリを除外しないことにしました。なので、列挙型をサポートするC++ライブラリがあれば、それを受け入れます

SFML 拡張機能である Thor ライブラリは、SFML のキー タイプと文字列との間の変換をサポートしています。これは、列挙子をシリアル化し、それらを文字列として Lua に渡し、必要に応じて戻すのに役立ちます。

于 2015-10-11T15:23:59.247 に答える