Поверхность исчезает при использовании SDL_RECT

Я пытаюсь создать класс, который содержит информацию о SHIP моей игры (изображение и положение в данный момент), все компилируется, как я ожидал, но если я использую переменную 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!");
}

Есть идеи, что я делаю не так?
это то, что я хочу
введите описание изображения здесь

Это то, что я получаюе

0

Решение

В вашем коде вы указали исходный прямоугольник.

Это означает, что оно обрезает ваше изображение, чтобы показывать только пиксели из (x, y) внутри вашего изображения и расширяться на (w, h).

То, что вы, вероятно, хотели предоставить в качестве целевого прямоугольника, чтобы указать SDL_BlitSurface, где его рисовать, то есть (x, y) изнутри экрана. Следующее:

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

Другие решения

Я думаю, у вас есть ваш источник и место назначения задом наперед. Пытаться:

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

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector