수정 사항이 있을 때 적당한 함수 몇 개 호출하는 것으로 끝낼 수 있어야 한다.⇒ 얼마나 쉽게 변경할 수 있는지!기존 코드 파악문제 해결 코드 작성코드 정리단순히 원하는 대로 돌아간다고 끝내지 말고 내가 수정한 코드를 나머지 코드와 맞춰주자!기존 코드를 파악하는 데 걸
명령 패턴메소드 호출을 실체화, 즉 일급 객체로 만드는 것을 의미바꿔 말하면 함수 호출을 객체로 감쌌다는 의미이다.handleInput함수가 매 프레임마다 호출되어 해당 키 입력에 따른 함수를 호출한다.이때 문제점은 키 변경이 불가능하다는 것!Command라는 추상 클
sharing을 통해 많은 fine-grained 객체들을 효과적으로 지원합니다. 수많은 나무들이 숲을 이루고 있는 장면은 경량 패턴으로 구현한다. 숲에 들어갈 나무들 수천 그루의 나무(각 수천 폴리곤)를 표현하기 위해서는 메모리와 CPU->GPU 전달량이 충분해
객체 사이에 1:n 의존 관계를 정의하여, 어떤 객체의 상태가 변할 때 그 객체에 의존성을 가진 다른 객체들이 그 변화를 통지 받고 자동으로 업데이트 1. 업적 달성
프로토타입의 개념 및 디자인 패턴으로서의 프로토타입에 대해 배우는 챕터몬스터에는 여러 종류가 있다.몬스터마다 클래스를 만들었으니, 스포너도 몬스터 클래스처럼 종류마다 만들어보자이런식으로 구현하면 행사코드, 반복코드가 많아진다...행사코드 : 프로그램의 실행과는 직접적
오직 한 개의 클래스 인스턴스만 갖도록 보장파일 시스템 api의 경우 비동기로 동작해야 한다. 즉 여러 작업이 동시에 진행될 수 있고 이 작업들을 다 파악해서 서로 간섭하지 못하게 해야 한다. 이를 위해서는 하나의 인스턴스 내에서만 작업이 진행되어야 한다.전역 접근점을
FSM (유한 상태 기계) 가질 수 있는 '상태'가 한정된다. 한 번에 '한 가지' 상태만 될 수 있다. '입력'이나 '이벤트'가 기계에 전달된다. 각 상태에는 입력에 따라 다음 상태로 바뀌는 '전이'가 있다. 걷기, 점프, 엎드리기 등의 상태가 있고 어떤 이벤트에
여러 순차 작업의 결과를 한 번에 보여준다.순차적으로 혹은 동시에 진행되는 여러 작업을 한 번에 모아서 봐야할 때가 있다.예를 들어 렌더링을 할 때 화면을 그리는 중간 과정이 보이면 안되며,매 프레임 완성되면 한 번에 보여줘야 한다.프레임 버퍼에 값을 쓰는 픽셀을 비디
최신 GUI 어플리케이션들은 마우스나 키보드 입력 이벤트를 기다린다. 그러나 게임은 유저 입력이 없어도 계속 돌아간다.위의 예시는 1. 한 프레임에 얼마나 많은 작업을 하는가 2. 코드가 실행되는 플랫폼의 속도에 따라서 프레임 레이트가 결정된다.게임 루프의 핵심은 어떤
게임에서 보석 주위를 경비하는 해골 병사를 배치해보자.이번에는 주기적으로 번개를 쏘는 2개의 마법 석상을 구현해보자.메인 루프에 각자 다르게 처리할 게임 개체용 변수와 실행코드가 있는 문제가 있다.해결책은 모든 개체가 자신의 동작을 캡슐화하면 된다.객체마다 추상 메서드
데이터 > 코드 마법을 코드로 구현한다면, 마법을 고칠 때마다 코드를 고쳐야 한다. 기획자가 수치를 약간 바꾸고 싶을 때도 고드를 수정하여 게임 전체를 빌드해야 한다. 따라서 마법과 같은 데이터는 게임 코드와 격리할 필요가 있다. 행동을 데이터 파일에 따로 정의하고
상위 클래스가 제공하는 기능들을 통해서 하위 클래스에서 행동을 정의 슈퍼히어로 게임에는 수많은 초능력이 필요하다. Superpower라는 상위클래스를 상속받는 수많은 초능력 클래스를 구현하고, 이 초능력 클래스는 사운드, 이펙트, AI 상호작용, 물리 작용 등의 일
클래스 하나를 인스턴스별로 다른 객체형으로 표현하여 , 새로운 클래스들을 유연하게 만들 수 있다.
컴포넌트 패턴 한 개체가 여러 분야를 서로 커플링 없이 다룰 수 있도록 각 분야의 코드를 별도의 컴포넌트 클래스에 둔다. 개체 클래스는 컨포넌트들의 컨테이너일 뿐이다. 주인공 클래스에 충돌 처리, 애니메이션, 렌더링 등등의 코드를 다 넣는다면 유지보수하기 매우 어렵다
이벤트 큐를 사용해 메시지나 이벤트를 보내는 시점과 처리하는 시점을 디커플링 GUI 이벤트 루프 이벤트 큐를 사용하는 예시! 마우스, 키보드 같은 디바이스로 프로그램과 상호작용(ex. 버튼 클릭)할 때마다 웅영체제는 이벤트를 만들어 프로그램으로 전달한다. 그럼 프로
서비스 중개자 패턴 서비스를 구현한 구체 클래스는 숨긴 채로 어디에서나 서비스에 접근할 수 있도록 한다. 메모리 할당, 난수 생성 코드나 오디오 시스템 등은 다양한 시스템에서 쓰인다. 이런 시스템은 게임 전체에서 사용 가능해야 하는 서비스로 볼 수 있다. 둘 다 어
CPU 캐시를 최대한 활용할 수 있도록 데이터를 배치해 메모리 접근 속도를 높이자. CPU의 성능은 시간이 갈수록 증가했지만, CPU가 필요한 데이터를 RAM으로부터 버스를 통해 가져오는 시간은 그에 비해 빨라지지 못했다. 따라서 캐싱을 통해 이를 어느정도 해결했다
불필요한 작업을 피하기 위해 실제로 필요할 때까지 그 일을 미룬다. 게임에서 월드에 들어있는 모든 객체는 장면 그래프로 저장되며 모든 객체에는 변환값(transform)이 들어있다. 이때 장면 그래프는 거의 계층형이다. 따라서 어떤 객체에 붙어있는 하위 객체의 변환값
객체를 매번 할당/해제하지 않고 고정 크기 풀에 들어있는 객체를 재사용하여 메모리 사용 성능을 개선 게임에서 스킬을 사용할 때마다 보이는 이펙트를 위해 파티클이 필요하다. 이때 파티클을 굉장히 빠르게 만들어야 하면서, 파티클을 생성/제거하는 과정에서 메모리 단편화가