【问题标题】:Allegro/C++: Screen is null pointerAllegro/C++:屏幕是空指针
【发布时间】:2015-10-25 20:33:08
【问题描述】:

刚刚安装了 Allegro 4.2.2,我正在尝试运行一个简单的程序。

启动时,屏幕全黑,但输入通常会对按键做出反应。我发现screen 是 0x00000000(一个 nullptr)。无论如何,set_gfx_mode 不会返回任何错误。

MinGW 根本不会大喊大叫,没有警告,什么都没有。 Code Blocks 仅将liballeg.aliballeg_s.a 与其他选项相关联:

-lalleg_s -lkernel32 -luser32 -lgdi32 -lcomdlg32 -lole32 -ldinput -lddraw -ldxguid -lwinmm -ldsound

代码如下:

#include <stdio.h>
#include <stdlib.h>

#include <allegro.h>

#include <time.h>


int main() {
    srand( time( NULL ) );
    allegro_init();
    // screen
    set_color_depth( 32 );
    if ( set_gfx_mode( GFX_AUTODETECT_WINDOWED, 640, 480, 0, 0 ) < 0 ) {
        printf( "Error set_gfx_mode: %s\n", allegro_error );
    }
    BITMAP* buffer = create_bitmap_ex( 32, SCREEN_W, SCREEN_H );
    printf( "Screen location: %p\n", screen );
    // keyboard and mouse
    install_keyboard();
    install_mouse();
    show_os_cursor( 1 );
    // main loop
    bool done = false;
    while ( !done ) {
        // keys
        if ( keypressed() ) {
            int keyID = readkey() & 0xFF;
            switch ( keyID ) {
                case 27: { // escape
                    done = true;
                    break;
                }
            }
        }
        // rendering
        clear_bitmap( buffer );
        rectfill( buffer, 50, 50, 150, 150, 0x00FFFFFF );
        blit( buffer, screen, 0, 0, 0, 0, SCREEN_W, SCREEN_H );
    }
    destroy_bitmap( buffer );
    allegro_exit();
    return 0;
}

END_OF_MAIN()

【问题讨论】:

    标签: c++ codeblocks allegro


    【解决方案1】:

    这是一个非常简单的错误,您没有在代码的任何地方定义SCREEN_W 的值或SCREEN_H 的值。

    #include 行之后添加:

    #define SCREEN_W 640
    #define SCREEN-h 480
    

    当然,只要图形驱动程序/卡支持,您可以将值更改为您想要的任何屏幕尺寸。

    【讨论】:

    • 好的,所以我忘记了 Allegro 4 已经将它们定义为全局变量......所以这不是问题......无论如何都会留下答案以避免其他人回答相同的错误答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-19
    相关资源
    最近更新 更多