Я пытаюсь создать класс, который содержит информацию о 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!");
}
Есть идеи, что я делаю не так?
это то, что я хочу
Это то, что я получаю
В вашем коде вы указали исходный прямоугольник.
Это означает, что оно обрезает ваше изображение, чтобы показывать только пиксели из (x, y) внутри вашего изображения и расширяться на (w, h).
То, что вы, вероятно, хотели предоставить в качестве целевого прямоугольника, чтобы указать SDL_BlitSurface, где его рисовать, то есть (x, y) изнутри экрана. Следующее:
SDL_BlitSurface(ship.img, NULL, screen, &ship.rect);
^(src) ^(dest)
Я думаю, у вас есть ваш источник и место назначения задом наперед. Пытаться:
SDL_BlitSurface(ship.img, NULL, screen, &ship.rect);