426 words
2 minutes
[DEV] ComPyEngine 3 - Component with SpriteRenderer
이제 좀 눈으로 뭔가를 보고 싶어졌습니다. 그래서 빨리 뭔가 하려고 했는데, 원래 유니티에서도 씬에서 보려면 Renderer를 가진 컴포넌트를 넣어줘야 뭐가 보입니다. 그걸 따라 만들어볼겁니다.
def render(self, surface, camera):
if self.sprite is None:
return
transform = self.game_object
screen_x, screen_y = camera.world_to_screen(
transform.position[0],
transform.position[1]
)
if camera.zoom != 1.0:
scaled_sprite = pygame.transform.scale(
self.sprite,
(
int(self.sprite.get_width() * camera.zoom),
int(self.sprite.get_height() * camera.zoom)
)
)
sprite_to_render = scaled_sprite
else:
sprite_to_render = self.sprite
if hasattr(transform, 'rotation') and transform.rotation != 0:
sprite_to_render = pygame.transform.rotate(sprite_to_render, transform.rotation)
if hasattr(transform, 'scale') and transform.scale != (1, 1):
sprite_to_render = pygame.transform.scale(
sprite_to_render,
(
int(sprite_to_render.get_width() * transform.scale[0]),
int(sprite_to_render.get_height() * transform.scale[1])
)
)
rect = sprite_to_render.get_rect(center=(screen_x, screen_y))
if not surface.get_rect().colliderect(rect):
return
if self.color != (255, 255, 255):
tinted_sprite = sprite_to_render.copy()
tinted_sprite.fill(self.color, special_flags=pygame.BLEND_MULT)
surface.blit(tinted_sprite, rect)
else:
surface.blit(sprite_to_render, rect)위 코드처럼 랜더링을 때릴건데, 잘 작동하는지는 모르겠지만, 일단 기본적인 줌 상태가 아닌거는 잘 작동하니까 놔두고 있습니다.
def load_image(self, path):
tmp = EngineManager().load_game_image(path)
self.sprite = tmp
파일 매니저에서 가지고 있는 Image를 불러와서 sprite를 가져옵니다. 모든 오류에 대해서 핸들링을 하도록 노력했고, try문을 안 사용하는 것을 지향햇습니다.
BaseRenderer를 상속한 SpriteRenderer를 이제 컴포넌트 시스템에 넣어서 이제 잘 작동하는지 확인하기 위해서 이제 기본적인 Rendering 시스템이 필요하겠네요! 설렙니다. 이제 곧 제 눈 앞에 오브젝트가 움직이는 것을 볼 수 있겠군요.
컴포넌트 코드
# print("Component")
class Component:
def __init__(self, name, game_object):
self.game_object = game_object
self.name = name
self.enabled = True
def update(self, dt):
# fixed update까지는 필요도하지 않을 것으로 보인단 말이지.
pass
[DEV] ComPyEngine 3 - Component with SpriteRenderer
https://compy07.github.io/Blog/posts/ai/reinforcementlearning/dev/compyengine/firststep/component/
