키보드에서 키를 사용하여 창에서 사각형을 이동하려고했지만 프로그램 시작 후/컴파일로 Failreport가 표시됩니다.키 누르기가 SDL2에서 올바르게 사용합니까?
keystate=NULL;
if (keystate[SDLK_LEFT])
{
rect2.x -= 2;
}
if (keystate[SDLK_RIGHT])
{
rect2.x += 2;
}
if (keystate[SDLK_DOWN])
{
rect2.y += 2;
}
if (keystate[SDLK_UP])
{
rect2.y -= 2;
}
이것은 작동하지 않는 코드입니다. main()의 시작 부분에 다음 줄을 넣습니다.
Uint8 * keystate; C에서 lib SDL.h를 사용하여이 작업을 수행합니다.
failmessage에는 다음이 포함
프로그램 수신 신호 SIGSEGV 스택 추적은 '콜 스택'탭 PS에서 사용할 수 있습니다 : 나는 전체 코드를 게시하는 것이 더 생각 후. 그것은 약간의 수정 :이 매크로는
#include <stdio.h>
#include <SDL2/SDL.h>
int main()
{
//Request successful execute
if(SDL_Init(SDL_INIT_EVERYTHING)!=0)
{
printf("fehler");
return 1;
}
//create window 800x600
SDL_Window *win;
win = SDL_CreateWindow("test",100,100,800,600,SDL_WINDOW_SHOWN);
//create renderwindow with vysnc enabled
SDL_Renderer *ren = SDL_CreateRenderer(win, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
if(ren==NULL)
{
printf("Fehler");
SDL_Quit();
return 1;
}
Uint8 *keystate=SDL_GetKeyboardState(NULL);
//boolean data type not supported
int gameRunning = 1;
SDL_Event event;
//create rectangle which is the whole window
SDL_Rect rect={
0,0,800,600
};
//smaller rectangle
SDL_Rect rect2={
0,0,50,50
};
//while loop to hold the window opened
while (gameRunning)
{
if (SDL_PollEvent(&event))//close the window
{
if (event.type == SDL_QUIT)
{
gameRunning = 0;
}
}
//color of the first rectangle(red)
SDL_SetRenderDrawColor(ren, 255,0,0,255);
SDL_RenderClear(ren);
SDL_RenderFillRect(ren, &rect);
//second rectangle (blue)
SDL_SetRenderDrawColor(ren, 0,0,255,255);
SDL_RenderFillRect(ren, &rect2);
//change/update the render
SDL_RenderPresent(ren);
//rect2.x+=5.f;
if (keystate[SDLK_LEFT])
{
rect2.x -= 2;
}
if (keystate[SDLK_RIGHT])
{
rect2.x += 2;
}
if (keystate[SDLK_DOWN])
{
rect2.y += 2;
}
if (keystate[SDLK_UP])
{
rect2.y -= 2;
}
}
//give heap free
SDL_DestroyRenderer(ren);
SDL_DestroyWindow(win);
SDL_Quit();
return 0;
}
"시작한 후/내 프로그램을 컴파일 할 때 Failreport가 나타납니다."- 컴파일 할 때 또는 프로그램을 실행하거나 시작한 후 컴파일 및 충돌이 발생 했습니까? – bitcell
나는 그것을 컴파일하고, 시작한 다음 추락시켰다. – student96
디버거를 사용하여 실행 한 후에 어디에서 충돌했는지 확인하십시오. 도움이 될 것입니다. – bitcell