본문 바로가기
[ChatGPT] Sample Code 샘플 코드

[ChatGPT][SDL2][커스텀 2D 게임 엔진 개발] SDL2 기반 커스텀 2D게임 엔진용 스프라이트 편집기 생성 예제 코드 샘플

by byungwoo733 2023. 1. 13.
728x90
반응형
SMALL

SDL2 기반 커스텀 2D게임 엔진용 스프라이트 편집기 생성 예제 코드 샘플

// Here's an example of how you could move the sprite using keyboard input in SDL2
#include "SDL.h"
#include <iostream>

int main(int argc, char* argv[]) {
    SDL_Init(SDL_INIT_VIDEO);

    SDL_Window* window = SDL_CreateWindow("Sprite Editor",
                                          SDL_WINDOWPOS_UNDEFINED,
                                          SDL_WINDOWPOS_UNDEFINED,
                                          800, 600,
                                          SDL_WINDOW_SHOWN);
    SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, 0);

    // Load the sprite image
    SDL_Surface* sprite_surface = SDL_LoadBMP("sprite.bmp");
    SDL_Texture* sprite_texture = SDL_CreateTextureFromSurface(renderer, sprite_surface);
    SDL_FreeSurface(sprite_surface);

    // Set the initial position of the sprite
    SDL_Rect sprite_rect;
    sprite_rect.x = 400;
    sprite_rect.y = 300;
    SDL_QueryTexture(sprite_texture, NULL, NULL, &sprite_rect.w, &sprite_rect.h);

    float speed = 200.0f; // pixels per second
    Uint32 last_time = SDL_GetTicks();

    bool running = true;
    while (running) {
        Uint32 current_time = SDL_GetTicks();
        float elapsed = (current_time - last_time) / 1000.0f;
        last_time = current_time;

        // Handle events
        SDL_Event event;
        while (SDL_PollEvent(&event)) {
            if (event.type == SDL_QUIT) {
                running = false;
            }
            else if (event.type == SDL_KEYDOWN) {
                switch (event.key.keysym.sym) {
                case SDLK_LEFT:
                    sprite_rect.x -= speed * elapsed;
                    break;
                case SDLK_RIGHT:
                    sprite_rect.x += speed * elapsed;
                    break;
                case SDLK_UP:
                    sprite_rect.y -= speed * elapsed;
                    break;
                case SDLK_DOWN:
                    sprite_rect.y += speed * elapsed;
                    break;
                }
            }
        }

        SDL_RenderClear(renderer);
        SDL_RenderCopy(renderer, sprite_texture, NULL, &sprite_rect);
        SDL_RenderPresent(renderer);
    }

    SDL_DestroyTexture(sprite_texture);
    SDL_DestroyRenderer(renderer);
    SDL_DestroyWindow(window);

    SDL_Quit();
    return 0;
}

이 코드는 SDL_PollEvent 함수를 사용하여 키 누름 이벤트를 확인하고 눌린 화살표 키와 마지막 프레임 이후 경과된 시간을 기준으로 스프라이트의 위치를 ​​업데이트합니다. 또한 SDL_GetTicks 함수를 사용하여 마지막 프레임 이후 경과된 시간을 추적합니다. 또한 sprite_rect 변수를 전달하는 SDL_RenderCopy 함수를 사용하여 스프라이트를 새 위치에 그립니다.

728x90
LIST

댓글