【发布时间】:2022-06-12 04:53:30
【问题描述】:
代码:
#include"global.h"
#include"tools/entity.h"
#include"tools/input.c"
static const int width = 800;
static const int height = 600;
int main (int argc, char **argv)
{
SDL_Init(SDL_INIT_VIDEO);
int init = IMG_Init(IMG_INIT_PNG);
if((init & IMG_INIT_PNG) != IMG_INIT_PNG) {
printf("Couldnt load images :P");
}
// Create the window
SDL_Window *window = SDL_CreateWindow("Ferengine",SDL_WINDOWPOS_UNDEFINED,SDL_WINDOWPOS_UNDEFINED,width,height,SDL_WINDOW_SHOWN);
// renderer
SDL_Renderer *renderer = SDL_CreateRenderer(window,-1,SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
// SDL_Surface * image = IMG_Load("funnyman.png");
// if(!image) { printf("Could not load image because : %s\n",IMG_GetError()); }
// SDL_Texture * texture = SDL_CreateTextureFromSurface(renderer, image);
// settings
/* SDL_SetRenderDrawColor(renderer,255,0,0,255);
SDL_SetWindowOpacity(window,1.0f);
*/
entity2D player;
player.posx = 0;
player.posy = 0;
player.sprite = "funnyman.png";
int speed = 100;
// loop
bool running = true;
SDL_Event event;
while(running)
{
while(SDL_PollEvent(&event))
{
if(event.type == SDL_QUIT)
{
running = false;
}
}
SDL_RenderClear(renderer);
// SDL_RenderCopy(renderer, texture, NULL, NULL);
drawImage("funnyman.png",renderer,10,10,100,100);
drawEntity(player,renderer,100,100);
switch(getKeyPressed()) {
case SDLK_w:
player.posy += 1 * speed;
break;
case SDLK_s:
player.posy -= 1 * speed;
break;
case SDLK_d:
player.posx += 1 * speed;
break;
case SDLK_a:
player.posx -= 1 * speed;
break;
case SDLK_q:
running = false;
default:
break;
}
SDL_RenderPresent(renderer);
}
// release resources
IMG_Quit();
SDL_DestroyRenderer(renderer);
SDL_DestroyWindow(window);
SDL_Quit();
return 0;
}
当我运行它时(我为实体和图像写了一些东西)它可以工作并且角色会移动,但是当我有一段时间不移动时它只会关闭窗口 如果您想知道 getKeyPressed() 返回一个 int(因为 sdlkeycode 是一个 int) 所以当我运行 gcc -o 构建/Ferengine 来源/main.c -lSDL2 -lSDL2_image -ldl 它会退出窗口并打印出被杀死,我不知道是什么原因造成的(是的,我已经尝试删除 if 语句)
【问题讨论】:
-
如果你想知道