0
私はシミュレーションを実行するプログラムを作ろうとしています。私はシミュレーションが、まるで絵を描いているかのように、正方形の角から角まで移動するような、設定されたパスに沿って、小さな画像またはスプライトを動かすことができるようにしたい。また、キーボードのキーを押すとシミュレーションが起動されるようにしたいと思いますが、移動後にイメージをリフレッシュするのにはいくつかの問題があります。SDL2:正方形のようなパスに沿ってイメージを移動するにはどうすればよいですか?
たとえば、画像を左に50ピクセル、次に50ピクセル、次に50ピクセル右に、次に50ピクセル下に移動し、それぞれの移動後に画面上の画像をリフレッシュしたい場合は、「1 'キーを押します。
この
は主にチュートリアルから引っ張られ、私がこれまで持っているコードであり、現在は単に各プレスに4つのピクセルで画像を移動し、私はここから進行する方法がわからないよ:int main(int argc, char ** argv)
{
// variables
bool quit = false;
SDL_Event event;
int x = 360;
int y = 240;
// init SDL
SDL_Init(SDL_INIT_VIDEO);
SDL_Window * window = SDL_CreateWindow("SDL2 Keyboard/Mouse events", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 800, 600, 0);
SDL_Renderer * renderer = SDL_CreateRenderer(window, -1, 0);
SDL_Surface * image = SDL_LoadBMP("Star.bmp");
SDL_Texture * texture = SDL_CreateTextureFromSurface(renderer, image);
SDL_FreeSurface(image);
SDL_SetRenderDrawColor(renderer, 0, 0, 0, 0);
// handle events
while (!quit)
{
switch (event.type)
{
case SDL_QUIT:
quit = true;
break;
case SDL_KEYDOWN:
switch (event.key.keysym.sym)
{
case SDLK_1:
x-=4;
break;
case SDLK_2:
x+=4;
break;
case SDLK_3:
y-=4;
break;
case SDLK_4:
y+=4;
break;
}
break;
}
SDL_Rect dstrect = {x, y, 75, 75};
SDL_RenderClear(renderer);
SDL_RenderCopy(renderer, texture, NULL, &dstrect);
SDL_RenderPresent(renderer);
}
// cleanup SDL
SDL_DestroyTexture(texture);
SDL_DestroyRenderer(renderer);
SDL_DestroyWindow(window);
SDL_Quit();
return 0;
}
浮動小数点型を比較して等しいことが驚きにつながる可能性がある – sp2danny