본문 바로가기

pygame_phyics

(11)
pygame 이미지 회전, 반전, 크기 조절 + 기준설정 pygame에 이미지 회전은 pygame.transform.rotate(img: Surface, degree: int) 함수로 한다.각도는 degree, 일반 360도 기준이고, 원본은 보존한 체 사본을 반환한다. 이미지 반전은 pygame.transform.flip(img: Surface, flip_x: bool, flip_y: bool) 함수다.똑같이 원본을 보존한 체 반전된 사본을 반환한다.bool은 True면 반전한다는 뜻이다. 크기조절은 pygame.transform.scale(img: Surface, size: tuple[int, int])똑같이 원본을 보존한 체 사본을 반환한다.size단위는 프로그램 픽셀 단위랑 같다. 비율이 아니라 픽셀값을 사용한다.안티엘리어싱을 안 한다. Surface..
pygame 좌표, 카메라 만들기 기본적으로 pygame은 화면창 상단 왼쪽을 원점(0,0)으로 잡고,오른쪽, 아래쪽으로 갈수록 숫자가 증가한다. 그냥 2차원 배열이랑 같다. 이 글은 카메라 개념을 만들고, 여러 좌표 기준을 만든다. 가장 기본적인 카메라는 카메라의 위치에 각 오브젝트의 위치를 뺀 값을 오브젝트의 프로그램 좌표로한다. 예제들은 pygame.Vector2 변수로 가정해서 (기본)world_position = camera_position - obj_position 만약 원점을 정가운데에 하고싶으면 여기서 프로그램 창 사이즈에2를 나눈 값을 더한다. (원점변경) world_position = camera_position - obj_position + (window_size / 2) 좌표가 아래로 갈수록 증가하는건 일반적이지 ..
[pygame_phyics] 1.2.0 업데이트! 1. 특성을 컴포넌트화 시킬수 있다.Object 클래스에 components 리스트가 추가 되었습니다. components 리스트에 추가한 객체는 update, render 함수가 같이 호출됩니다.ImageObject 도 컴포넌트이기때문에 components 리스트에 추가하시면 됩니다.2. 자식을 init 함수에!__init__ 함수에서 자식으로 할 객체를 생성하고init_instantiate 함수를 호출하면 됩니다. 하지만 자식으로 설정하지않아도 생성은 가능합니다3. 루프중에서 간편한 생성원래는 함수 3개를 호출해야 하지만 이제는 instantiate 함수를 실행하면맵 실행중 생성이 가능합니다. instantiate 함수는 맵을 생성할 당시에는 실행할수 없습니다.4. on_collision stay, ..
[pygame Phyics] Camera/Effect 카메라는 위치라는 개념이 존재하여 프로그램 크기에 한정되지 않는 맵을 만들수있다 카메라가 사실 엄청난 능력이 있는게 아니라 오브젝트가 카메라 위치에 맞춰서 바꿔줘야 됨 그래서 ImageObject render 함수에서 카메라 객체와 상호작용하여 카메라 기준 위치를 얻는다 tilemap도 카메라위치를 가져와서 자신이 위치를 조정함 카메라는 여러객체가 존재할수있고 scene 에서 display 변수를 카메라 이름으로 변경하면 이 프로그램이 그 카메라를 기준으로 렌더링한다 EFFECT 이펙트는 아직 단 하나밖에 없는데 글리치라고 카메라 status 변수를 'glitch' 로 변경하면 카메라에 치치직 하는 효과가 생긴다 다시 정상으로 돌아가고 싶으면 'idle' 로 변경하면 된다
[pygame_phyics] 애니메이션 pygame_phyics 라이브러리에 애니메이션은 같은 속도로 여러 장에 이미지를 순서대로 나열하는 것이다 이미지를 애니메이션으로 만들려면 ImageObject 객체가 필요하다 Animation 클래스는 tick, image_object, kwargs를 인수로 받는데 tick은 pygame tick으로 이 간격마다 이미지가 바뀜 image_object: 이미지가 전환되는 대상 kwargs: sheet 이름, 필요시에 범위까지 설정가능 이 애니메이션은 자신이 만든 오브젝트 안에서 생성하는 것을 추천합니다 ImageObject를 인수로 받기 때문, update를 image 전에 실행해야 하기 때문 하지만 딱히 강제는 아님 다른 곳에서 실행해도 정상으로 작동합니다!
[pygame] 버튼, text 줄넘김 구현 버튼을 클릭하려면 마우스가 버튼 위에 있는지 , 마우스를 클릭 한지 확인해야 한다 버튼: class Button: def __init__(self, position): self.default = pygame.Surface((50, 50), pygame.SRCALPHA) self.default.fill((0, 0, 0)) self.clicked = pygame.Surface((50, 50), pygame.SRCALPHA) self.clicked.fill((255, 255, 255)) self.image = self.default self.rect = self.image.get_rect(center=position) self.position = position self.click_event = lambda:..
[pygame_phyics] 기본 오브젝트 예제 & 설명 [import 하지 않고 내부적으로 사용되는 것] Component: 기본 함수만 선언해놓음, 용도: 없는 함수 실행하는 오류를 막기위해서 Joint: 물리 새계에서 연결하는 함수를 정의해놓음 Object(Component): Manger.scene 에 등록하고 삭제하는 코드를 추가함 씬에 등록할수 있는 가장 기초적인 클래스 Object.instantiate(등록할 객체) 이렇게 등록하고 등록할 객체.delete() 로 삭제합니다 삭제할땐 이름이랑 태그가 None 이 되고 씬에서 삭제됩니다 Phyics(GameObject, Joint): on_colision_enter(self, collision) 으로 충돌할때 실행됩니다 UI(GameObject): ui 에서 필요한 좌표랑 각도를 생성 [import ..
pygame 입력 필드 만들기 pygame.key.start_text_input() 일단 이벤트로 받는데 그렇기 위해서는 게임 시작때 이것을 실행해야한다 입력 필드 예제: class InputField: def __init__(self, size) -> None: self.image = pygame.Surface(size, pygame.SRCALPHA) self.image.fill((0, 0, 0, 255)) self.font = pygame.font.SysFont("malgungothic", size[1]) self.text = "" # 글자 원본 self.edit_pos = 0 # 수정하는 위치 / 깜박꺼리는 커서 self.text_edit = False self.text_editing = "" # 한국어처럼 글자 편집하는 글자 ..