SDL2와 Odin을 사용한 우주 슈팅 게임 - 2부 - 렌더 플레이어
2부 :: 이미지 렌더링
이미지를 렌더링하려면 SDL Image 라이브러리를 초기화해야 합니다.
이미지를 렌더링하는 단계
SDL.RenderCopy()
이전 장면에 엔티티를 그리기 위해 SDL.RenderPresent()
SDL_Image.Init()
이미지 라이브러리는
SDL_Image.INIT_PNG
플래그를 사용할 때 .png 이미지를 사용할 수 있도록 코어 라이브러리를 확장합니다.SDL_Image.LoadTexture()
2d용으로 렌더링하고 이미지를 조작할 필요가 없는 경우(크기 조정 및 위치 변경 제외),
LoadTexture()
가 이미지 자산을 로드하는 가장 효율적인 방법입니다. https://wiki.libsdl.org/SDL_image/IMG_LoadTexture을 참조하십시오.
player_texture := SDL_Image.LoadTexture(game.renderer, "assets/player.png")
assert(player_texture != nil, SDL.GetErrorString())
SDL_Image.LoadTexture()
는 오류가 발생하면 nil을 반환하므로 코드를 계속 진행하기 전에 확인하는 것이 좋습니다.아래 코드에는 실수가 있으며 여기에서
assert()
를 사용하지 않은 경우 player.png가 로드되지 않는 이유를 이해하지 못할 수 있습니다.
// try using an assert here to see the problem:
player_texture := SDL_Image.LoadTexture(game.renderer, "/assets/player.png")
엔티티::구조체
엔티티 구조는
SDL.RenderCopy()
에 대한 후속 호출에 필요한 엔티티 위치 및 로드된 텍스처를 추적하는 간단한 방법입니다.
Entity :: struct
{
tex: ^SDL.Texture,
dest: SDL.Rect,
}
스프라이트가 많은 스프라이트 시트를 사용하는 경우 스프라이트 시트에서 이미지의 소스 위치도 추적해야 합니다.
Entity :: struct
{
tex: ^SDL.Texture,
source: SDL.Rect,
dest: SDL.Rect,
}
코드의 이 시점에서는 전체 이미지를 로드하고 있기 때문에 소스를 추적할 필요가 없습니다.
SDL.RenderCopy()
전체 이미지를 로드하고 있으므로 소스
nil
구조체 대신 SDL.RenderCopy()
함수에 SDL.Rect
를 전달할 수 있습니다.
SDL.RenderCopy(game.renderer, game.player.tex, nil, &game.player.dest)
SDL.RenderCopy()
는 모든 입력이 처리되고 플레이어 구조체의 위치가 업데이트된 후에 호출됩니다.
Reference
이 문제에 관하여(SDL2와 Odin을 사용한 우주 슈팅 게임 - 2부 - 렌더 플레이어), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/patrickodacre/space-shooter-game-with-sdl2-and-odin-part-2-render-player-119g텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)