1

SFML と C++ でゲームを作成し始めています。ただし、1 つ問題があります。基本的なスケルトン クラスのコードを書き留めましたが、何らかの理由で、ウィンドウ (sf::Window) を作成するとすぐにクラッシュします。このコードにはイベント チェック コードは含まれていませんが、含まれており、それでもクラッシュしました。その上、どうやら、イベント チェックの欠如が原因である場合、クラッシュするのに数秒かかるはずです。もちろん、ウィンドウが表示されたら、追加します。

#include <iostream>
#include <windows.h>
#include <SFML/Window.hpp>
#include "GameBase.h"
#include "Character.h"
#include "GameStart.h"

using namespace std;
using namespace sf;

int main() {
    GameStart::GameStart();
    Clock timer;
    cout << "Started." << endl;

    Window GameWindow(VideoMode(640, 480),"Basic window");

    while (1) {
        Sleep(0.5f);
    }
    return 0;
}

タイマー、GameStart、またはその他の個人用インクルード ファイルではないことはわかっています。

4

2 に答える 2

1

Code::Blocks 12.11 には MinGW GCC 4.7.1 TDM コンパイラが同梱されていますが、これは公式ダウンロード ページで提供されているバイナリと互換性がないため、新しいコンパイラで SFML 1.6 を再コンパイルしない限り、うまくいきません。

それに加えて、SFML FAQ のこのセクションを読む必要があります。

于 2013-02-16T12:56:45.590 に答える
0

私はそれを試してみましたが、問題なく動作しました:

#include <iostream>
#include <SFML/Window.hpp>

int main() {
    std::cout << "Started." << std::endl;

     sf::Window gameWindow( sf::VideoMode(640, 480),"Basic window");

     while (gameWindow.IsOpened()) {
         sf::Event event;
        while (gameWindow.GetEvent(event)) {

            if (event.Type == sf::Event::Closed)
                gameWindow.Close();
        }
    }
    return EXIT_SUCCESS;
}

while(1)whileに置き換えて(gameWindow.IsOpened())、閉じるボタンのサポートを追加しました。これにより、ここでは関係のない Windows ヘッダーを削除できます。

これをデバッグモードでコンパイルして実行してみてください。おそらく問題を理解するのに役立つでしょう。

また、コードが機能しない場合。関係のないものはすべてコメントすることをお勧めします (この例では : GameStart::GameStart();Clock timer;、...)。動作するかどうかを確認してください。

于 2013-02-17T11:01:44.147 に答える