试图使代码在类上工作

睡眠睡眠

我试图使此代码在不同的类上工作,它带有一个空窗口,然后立即关闭。

main.cpp

//The Headers
#include "SDL_SCREEN.h"
#include "SDL/SDL.h"
#include "SDL/SDL_image.h"

//The event structure
SDL_Event event;

int main (int argc, char* args[]){

    printf( "START" );    
    //The quit flag
    bool quit = false;

    //The Surface to be displayed
    SDL_Surface* dis = NULL;

    //The Screen Surface
    SDL_Surface* screen = NULL;
    //The screen
    SDL_SCREEN screen_sdl;



    if ( screen_sdl.init( "TEST", screen ) == false )
    {
            return 1;
    }

    dis = screen_sdl.load_image( "a.png" );

    screen_sdl.apply_surface( 0, 0, dis, screen, NULL );

    if ( SDL_Flip ( screen ) == -1 )
    {
            return 1;
    }
    while ( quit == false )
    {
            //While there are events to handle
            while ( SDL_PollEvent( &event ) )
            {
                    //if the user has xed out the window
                    if ( event.type == SDL_QUIT )
                    {
                            //Quit the program
                            quit = true;
                    }
            }
    }

    screen_sdl.clean_up( dis, screen );
    SDL_Quit();
}

SDL_SCREEN.h

#include "SDL/SDL.h"
#include "SDL/SDL_image.h"

class SDL_SCREEN{    
        public:
            SDL_Surface *load_image( char* );
            void apply_surface( int, int, SDL_Surface*, SDL_Surface*, SDL_Rect* );
            bool init(char*, SDL_Surface*);
            void clean_up(SDL_Surface*, SDL_Surface*);
            void flip_screen (SDL_Surface* screen){
                    if ( SDL_Flip ( screen ) == -1)
                    {
                            printf( "BLAH" );
                    }
            }
};

SDL_SCREEN.cc

//The Headers
#include "SDL/SDL.h"
#include "SDL/SDL_image.h"
#include "SDL_SCREEN.h"
#include <stdio.h>
//Screen atrabutes
const int SCREEN_WIDTH = 640;
const int SCREEN_HEIGHT = 480;
const int SCREEN_BPP = 32;

SDL_Surface *SDL_SCREEN::load_image ( char *filename )
{
        printf( "LOADING" );
    //the image thats loaded
    SDL_Surface* loadedImage = NULL;

    //The optimized image
    SDL_Surface* optimizedImage = NULL;

    //Load the image
    loadedImage = IMG_Load( filename );

    if ( loadedImage != NULL )
    {
            printf("Loaded");
            //Create the optimized image
            optimizedImage = SDL_DisplayFormat( loadedImage );

            //Free the old surface
            SDL_FreeSurface( loadedImage );

            //If the surface was optimized
            if ( optimizedImage != NULL )
            {
                    printf( " OPTIMIZED" );
                    //Color key the surface
                    SDL_SetColorKey( optimizedImage, SDL_SRCCOLORKEY, SDL_MapRGB( optimizedImage->format, 0, 0xFF, 0xFF ) );
            }


    }

    //return the optimized image
    return optimizedImage;
}

void SDL_SCREEN::apply_surface( int x, int y, SDL_Surface* source, SDL_Surface* destination, SDL_Rect* clip = NULL )
{

    //holds offsets
    SDL_Rect offset;

    //get offsets
    offset.x = x;
    offset.y = y;

    //blit
    SDL_BlitSurface( source, clip, destination, &offset );
}

void SDL_SCREEN::clean_up( SDL_Surface* to_clean, SDL_Surface* screen  )
{
    //Free the surfaces
    SDL_FreeSurface( to_clean );
    SDL_FreeSurface( screen );

}

bool SDL_SCREEN::init (char *Caption, SDL_Surface *screen)
{

    //Initialize all SDL subsystems
    if ( SDL_Init( SDL_INIT_EVERYTHING == -1 ) )
    {
            return false;
    }

    //set ut the screen
    screen = SDL_SetVideoMode( SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP, SDL_SWSURFACE );

    //if there was an error setting up the screen
    if( screen == NULL )
    {
            return false;
    }

    //set up the window caption
    SDL_WM_SetCaption( Caption, NULL );

    return true;
}
莫尔布德尼洛

init只修改screen参数,而不修改main中的变量。
当你到达时apply_surface,它仍然是NULL
(而且您将使用调试器在几秒钟内发现这一点。)

您的SDL_Init呼叫还带有错误放置的括号-您在呼叫SDL_INIT_EVERYTHING == -1而不是检查其返回值。

改为这样做:

SDL_Surface* SDL_SCREEN::init (char *Caption)
{
    if (SDL_Init(SDL_INIT_EVERYTHING) == -1)
    {
        return NULL;
    }   
    SDL_Surface* screen = SDL_SetVideoMode( SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP, SDL_SWSURFACE );
    if (screen != NULL)
    {
        SDL_WM_SetCaption( Caption, NULL );
    }
    return screen;
}

SDL_SCREEN附带说明:由于不保留任何状态,因此将其设置为类没有什么意义。)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何更改此代码以允许抽象类或接口在相同的自动生成类上工作?

来自分类Dev

试图让点击功能在网站上工作

来自分类Dev

试图让pygame文档代码正常工作

来自分类Dev

VBA试图使WorkSheet_Change在多个工作表上工作,但不是全部

来自分类Dev

CSS类在一页上工作,但不在另一页上工作

来自分类Dev

为什么CSS无法在代码点火器上工作?

来自分类Dev

如何实现我的jQuery代码以在我的网站上工作?

来自分类Dev

VertexShader在Windows上编译失败,相同的代码在Linux上工作

来自分类Dev

我的openmp代码无法在服务器上工作?

来自分类Dev

python decorator如何在此代码上工作?

来自分类Dev

如何让这个 jQuery 代码在相同的 html 元素上工作?

来自分类Dev

WheelNav 不在 CodePen 上工作,但在代码片段中

来自分类Dev

如何让以下代码在 Safari 浏览器上工作?

来自分类Dev

用户输入阻止多处理代码段在 Windows 上工作

来自分类Dev

线路代码 connection.connect(); 不在 java android 上工作

来自分类Dev

想法“ Groovyc:无法解析类”-在命令行上工作

来自分类Dev

如何使serviceManager在类zf2上工作

来自分类Dev

无法让 JSON DeserializeObject 在这个类上工作

来自分类Dev

C ++代码在台式机上工作正常,但在笔记本电脑上工作不正常

来自分类Dev

Laravel IOC自动解析-在控制器上工作,但不能在自定义类上工作

来自分类Dev

代码无法在线工作,但可以在本地主机上工作

来自分类Dev

C++ 代码在window gcc 上工作,但在linux gcc 上不工作

来自分类Dev

试图使我的Sixaxis PS3控制器在我的Minecraft的计算机上工作

来自分类Dev

使onclick在iPhone上工作

来自分类Dev

让Crontab在Nitrous上工作

来自分类Dev

让Cron在Docker上工作

来自分类Dev

如何 !!在bash上工作?

来自分类Dev

在JavaFX SceneGraph上工作

来自分类Dev

使“ at”在macOS上工作

Related 相关文章

  1. 1

    如何更改此代码以允许抽象类或接口在相同的自动生成类上工作?

  2. 2

    试图让点击功能在网站上工作

  3. 3

    试图让pygame文档代码正常工作

  4. 4

    VBA试图使WorkSheet_Change在多个工作表上工作,但不是全部

  5. 5

    CSS类在一页上工作,但不在另一页上工作

  6. 6

    为什么CSS无法在代码点火器上工作?

  7. 7

    如何实现我的jQuery代码以在我的网站上工作?

  8. 8

    VertexShader在Windows上编译失败,相同的代码在Linux上工作

  9. 9

    我的openmp代码无法在服务器上工作?

  10. 10

    python decorator如何在此代码上工作?

  11. 11

    如何让这个 jQuery 代码在相同的 html 元素上工作?

  12. 12

    WheelNav 不在 CodePen 上工作,但在代码片段中

  13. 13

    如何让以下代码在 Safari 浏览器上工作?

  14. 14

    用户输入阻止多处理代码段在 Windows 上工作

  15. 15

    线路代码 connection.connect(); 不在 java android 上工作

  16. 16

    想法“ Groovyc:无法解析类”-在命令行上工作

  17. 17

    如何使serviceManager在类zf2上工作

  18. 18

    无法让 JSON DeserializeObject 在这个类上工作

  19. 19

    C ++代码在台式机上工作正常,但在笔记本电脑上工作不正常

  20. 20

    Laravel IOC自动解析-在控制器上工作,但不能在自定义类上工作

  21. 21

    代码无法在线工作,但可以在本地主机上工作

  22. 22

    C++ 代码在window gcc 上工作,但在linux gcc 上不工作

  23. 23

    试图使我的Sixaxis PS3控制器在我的Minecraft的计算机上工作

  24. 24

    使onclick在iPhone上工作

  25. 25

    让Crontab在Nitrous上工作

  26. 26

    让Cron在Docker上工作

  27. 27

    如何 !!在bash上工作?

  28. 28

    在JavaFX SceneGraph上工作

  29. 29

    使“ at”在macOS上工作

热门标签

归档