게임 프로그래밍 모드 Ch1-Ch2

3463 단어

1 아키텍처, 성능 및 게임


1.1 소프트웨어 아키텍처란?


소프트웨어 구조: 코드의 조직 방식.
좋은 구조: 적당한 추상적으로 신속한 변화에 쉽게 대응하는 동시에 복잡하고 불필요하지 않다.
핵심 사상: 결합을 풀고 단일 문제를 해결하는 데 필요한 코드 학습과 지식 비축을 최소화한다.

1.2 대가가 무엇인가


더 많은 코드를 추가하고 추상층을 개발, 디버깅, 유지보수합니다.
패치를 추가하는 동시에 신중한 조직 코드 유지보수 구조가 필요하다.
문제를 해결할 때 코드를 이해하는 난이도가 높아졌다.

1.3 성능 및 속도


유연한 모델은 통상적으로 운행 원가가 비교적 큰 메커니즘에 의존한다.예를 들어 허함수 발송, 지침, 메시지, 인터페이스 등이다.
절충 방법: 디자인이 안정될 때까지 유연성을 유지하고 추상적인 성능을 향상시킨다.

1.4 디자인의 유연성


생각을 검증하기 위한 코드는 대부분 버려야 한다.따라서 원형은 완전히 정확한 프로그래밍 실천으로 나중에 다시 쓰기만 하면 된다.

1.5 균형 잡기


개발 자체도 이해득실을 따져야 한다.
  • 우수한 아키텍처
  • 우수한 성능
  • 빠른 인코딩
  • 1.6 단순성


    가장 깨끗하고 직접적인 함수를 짜서 문제를 해결하려고 노력하는 것이 하나의 사고방식이다.
    작은 논리로 큰 용례를 해결하는 것이 영원히 가장 우아하다.그 본질은 용례 뒤의 패턴 관계를 찾은 것이다.
    If I had more time, I would have written you a short letter. —— Blaise Pascal

    1.7 TIPS

  • 추상과 결합의 충동을 억제하고 필요하지 않으면 시간을 낭비하지 마라
  • 과감하게 시도하고 디자인 공간을 탐색하지만 난장판을 남기고 계속 앞으로 나아가지 마라
  • 밑바닥 최적화가 늦으면 늦는다
  • 가장 중요한 것은 즐거우면 돼!

  • 2. 명령 모드


    2.0 개요


    리퀘스트를 하나의 대상으로 봉하여 서로 다른 요청, 대기열, 로그를 사용하여 클라이언트를 매개 변수화하고 요청 작업의 취소와 복구를 지원합니다.GoF
    A command is a reified method call. 명령은 구상화 (실례화) 방법으로 호출된다.Robert Nystrom

    2.1 구성 입력


    버튼과 게임 행동 (방법) 의 매핑, 사용자 정의 설정을 지원하기 위해서는 swap out의 변수 분배로 직접 호출해야 합니다.
    우선 서로 다른 게임 행위를 호출하는 구상을 명령으로 합니다.함수 포인터는 이것을 할 수 있지만 완전하지는 않기 때문에 명령 기본 클래스인class Command를 정의합니다.
    class Command{
    public:
        virtual ~Command() {};
        virtual void execute() = 0;
    }
    

    서로 다른 게임 행위 (방법) 를 위해 각각 다른 명령 서브클래스를 만들고 실행 동작의 허함수를 다시 불러옵니다.
    class JumpCommand : public Command {
    public:
        virtual void execute() { jump(); }
    };
    // ...
    

    마지막으로 간접 호출층의 명령 포인터를 통해 입력을 처리할 수 있다.
    class InputHandler{
    public:
        void handleInput();
        // Methods to bind commands to buttons
    private:
        Command* buttonX_;
        // ...
    }
    void InputHandler::handleInput(){
        if (isPressed(BUTTON_X)) buttonX_->execute();
        // else if...
    }
    

    //이런 방식은 실행 기능을 명령 내부에 집적하여 비교적 저급한 명령이어야 하며, 이전에 쓴 완전히 데이터로 추상화된 명령은 실행 모듈에 데이터를 불러와야만 비교적 고급스럽게 사용할 수 있다.실행기에 불러오고 실행하는 기본 클래스를 추가하는 방법을 제공합니다.
    //이렇게 바보 코드를 많이 치지 않을 줄 알았으면 타자수 모집

    2.2 캐릭터에 대한 설명


    명령 모드의 보다 보편적인 응용 장면은 게임 AI 엔진과 캐릭터 간의 인터페이스로 활용된다.명령 모드를 통해 AI 모듈과 캐릭터 비헤이비어가 디커플링됐다.AI 모듈은 역할(엔진)이 수행할 수 있도록 명령 흐름을 간단하게 제공하기만 하면 된다.마찬가지로 다중 온라인 게임에 대해 명령의 서열화, 전송, 재재생 과정이 관건적인 부분이다.

    2.3 명령취소 및 명령복구


    만약 명령 대상이 Do를 할 수 있다면, 특히 라운드 전략 게임에서 쉽게 undo를 할 수 있을 것이다.이를 위해 입력 프로세서는 매번 입력한 동작에 대해 일회용 명령 실례를 만들어야 한다.
    class Command{
    public:
        virtual ~Command() {};
        virtual void execute() = 0;
        virtual void undo() = 0;
    };
    

    상태를 취소하기 위해서excute () 를 실행할 때 현재 상태를 기록할 수 있습니다.명령에 기록 상태의 변수를 증가시켜 실현합니다.
    여러 번의 취소를 지원하기 위해서, 명령 목록과 현재 명령에 대한 인용을 유지해야 합니다.새 명령을 실행, 취소, 다시 실행하거나 선택한 후 상황에 따라 명령 목록과 현재 명령 인용을 업데이트합니다.

    2.4 유형 스타일화 또는 함수 스타일화


    함수식 프로그래밍은 많은 문제를 해결할 때 효율적이다. 예를 들어 js로 명령 모드를 실현하는 것이다.
    function makeMoveUnitCommand(unit, nextStatus) {
        var beforeStatus;
        // return command object
        return {
            execute: function() {
                beforeStatus = unit.status();
                unit.moveTo(nextStatus);
            },
            undo: function() {
                unit.moveTo(beforeStatus);
            }
        }
    }
    

    좋은 웹페이지 즐겨찾기