使用SDL_RECT时表面消失

时间:2015-04-29 03:27:24

标签: c++ sdl 2d-games

我试图创建一个包含游戏信息(此时的图像和位置)的类,所有内容都按照我的预期进行编译,但是如果我使用我在船内创建的SDL_Rect变量作为SDL_blitsurface方法中的参数,船只没有出现。

这是我的代码:

的main.cpp

int main()
{
    init();
    Ship ship;
    ship.alive();
    Background bg;
    SDL_BlitSurface(bg.bg,NULL,screen,NULL);
    printf("%i",ship.rect.y);
    SDL_BlitSurface(ship.img,&ship.rect,screen,NULL);
    SDL_UpdateWindowSurface(window);
    SDL_Delay(5000);
    return 0;
}

Ship.cpp

Ship::Ship(){
    std::string path = "img/arwing2.png";
    x = 50;
    y = 50;
    rect.x = x;
    rect.y = y;
    rect.w = 300;
    rect.y = 300;
    img = IMG_Load(path.c_str());
    if(img == NULL){
        printf("Unable to load image");
    }
    printf("Hey!!");
}


void Ship::alive(){
    printf("I'm alive!");
}

知道我做错了什么吗? 这就是我要的 enter image description here

这是我得到的e

2 个答案:

答案 0 :(得分:1)

我认为你的源头和目的地都是落后的。尝试:

SDL_BlitSurface(ship.img, NULL, screen, &ship.rect);

答案 1 :(得分:1)

在您的代码中,您提供了源rect。

这意味着它正在剪切图像以仅显示图像中(x,y)的像素并延伸(w,h)。

你可能想要提供目标矩形来告诉SDL_BlitSurface在哪里绘制它,即(x,y)从屏幕内部。如下:

SDL_BlitSurface(ship.img, NULL, screen, &ship.rect);
                          ^(src)        ^(dest)