0

C++ Allegro Map Editor を作成しました。リクエストの 1 つはログを取得することだったので、実行されるすべての移動に対してコンソール ウィンドウにログを配置しました...問題は、コンソール ウィンドウがメイン ウィンドウの下にあることです (GFX_AUTODETECT_WINDOWED を使用)。そのウィンドウを移動すると、単にプログラムがクラッシュします..それを移動し、コンソールウィンドウをマップエディターに移動して戻ることができる必要があります。誰にもアイデアはありますか?

これが私のコードのメインです。

#include <allegro.h>
#include <string>
#include <sstream>
#include "Layout.h"
#include "System.h"
#include "Map.h"
#include <iostream>
#include <fstream>

using namespace std;

// Allegro Functions to stabilize speed
volatile long speed_counter = 0;              
void increment_speed_counter() // A function to increment the speed counter
{speed_counter++; }
END_OF_FUNCTION(increment_speed_counter); 

int main()
{
System system; // Initialising Allegro 
system.Setup();

Map map1; // Creating default map
map1.createMap(); 

BITMAP *buffer = create_bitmap(24,45); // Double buffering

LOCK_VARIABLE(speed_counter); //Used to set the timer - which regulates the game's
LOCK_FUNCTION(increment_speed_counter);//speed.
install_int_ex(increment_speed_counter, BPS_TO_TIMER(8));//Set our BP

/*game looop */
while( !key[KEY_ESC] )
{
        clear_bitmap(buffer); // Clear the contents of the buffer bitmap         
while(speed_counter > 0)
{
    if(mouse_b &1 ){ // On mouse click
          map1.catchMouseEvent(mouse_x, mouse_y);
          while(mouse_b & 1){}   
    }
    speed_counter --;
}
       rectfill(buffer,0,0,25,45,makecol(135,206,250));
       textprintf_ex(buffer, map1.getLayout().getFont(), 0, 0, makecol(255, 255, 255), -1,"%d", map1.getRowVal());
       textprintf_ex(buffer, map1.getLayout().getFont(), 0, 20, makecol(255, 255, 255), -1,"%d", map1.getColVal());

       blit(buffer, screen, 0, 0, 970, 50, 100, 50);     
}

/*Free memory after */
destroy_bitmap( buffer );   
return 0;
allegro_exit();
}
END_OF_MAIN();

また、ウィンドウを動かさずにランダムにクラッシュすることもあります。特別な理由はなく、ランダムにクラッシュするだけです。

アイデアはありますか?

4

1 に答える 1

0

すべてのコードを見なければ、なぜ、どこでクラッシュしているのかを知ることは不可能です。デバッガーを使用すると、何が起こっているかが明らかになるはずです。戻りコードに応答する必要があります。たとえば、ビットマップをロードまたは作成するときは、それが ではないことを確認してくださいNULL

このような小さなダブルバッファで何をしようとしているのか、よくわかりません。通常、ウィンドウと同じサイズの単一のバッファーを作成します。Allegro 4 は、画面幅が 4 の倍数の場合にのみ適切に動作することに注意してください。set_color_depth(desktop_color_depth())また、最大限の互換性を得るために、(グラフィック モードを設定する前に)を呼び出す必要があります。

于 2011-11-05T18:43:57.250 に答える