Ich versuche ein Programm zu erstellen, das eine Simulation ausführt. Ich möchte, dass die Simulation in der Lage ist, ein kleines Bild oder Sprite entlang eines festgelegten Pfades zu bewegen, so wie es sich von einer Ecke zu einer Ecke eines Quadrats bewegt, als würde es es zeichnen. Ich möchte auch, dass die Simulation beim Drücken einer Taste auf der Tastatur ausgelöst wird, aber ich habe Probleme mit der Aktualisierung des Bildes nach dem Verschieben.SDL2: Wie bewege ich ein Bild entlang eines quadratischen Pfades?
Zum Beispiel möchte ich, dass das Bild 50 Pixel nach links, dann 50 nach oben, dann 50 nach rechts, dann 50 nach unten bewegt und das Bild auf dem Bildschirm nach jeder Bewegung aktualisiert, nach nur einem Druck auf die 1 'Taste auf der Tastatur.
Dies ist der Code, den ich bisher habe, die weitgehend aus einem Tutorial gezogen wird, und zur Zeit bewegt sich einfach das Bild von 4 Pixel auf jeder Presse, und ich bin nicht sicher, wie von hier Fortschritten:
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;
}
Vergleichen von Gleitkommatypen für Gleichheit kann zu Überraschungen führen – sp2danny