2011-03-25 3 views
1

첫 번째 iPhone 게임을 만드는 중간에 임 - OOP 및 특히 C++에 대한 배경 지식이 있으므로 몇 가지 질문이있었습니다. 기능을 유지하면서 논리적으로 레이어를 설정하는 방법에 관한 것입니다. 도움말 좋은 게임 디자인을위한 레이어를 논리적으로 설정 (SpaceManager 물리, 음악 및 게임 로직 포함)

  • PlayLayer합니다 (-

    • HUDLayer (등 일시 정지 버튼, 게임 컨트롤, 사용자 점수 화면에 모든 정적 객체 현재) : 내 게임은 세 가지 주요 층이하는

      현재 싶다 ' 플레이어, 주요 게임 루프 여기에 게임 로직)

    • 레벨 레이어 (레벨 이미지와 레벨 물리학의 모든 플레이어가 함께 상호 작용하는 객체,이 레벨 별 배경 음악)

    공지 사항 저는 여기서 Want라는 단어를 사용했습니다. 왜냐하면 저의 삶은 논리적 인 대상을 Cocos2d 및 우주인의 구조로 보이는 것 안에서 일하기 위해 끊임없이 움직여야하기 때문입니다. 다음은

    내 PlayLayer 장면은 감독에 의해로드 이잖아 될 수 있도록 내가 좋아하는 것과 내가

    • 에 직면하고있어 그 문제의 일부 -하지만 난 다음 HUDLayer 개체를 모두 얻을 할 경우 PlayLayer 뒤에서 다루어 져야한다. 그래서 HUDLayer는 나의 씬이다. 나는 그걸 작동 시켜야만한다.
    • 나는 (simpleAudioEngine playBackgroundMusic을 통해) 백그라운드 음악을 재생하고 싶다. LEVEL 레이어는 다른 레벨로 다른 음악을 갖고 싶기 때문입니다. 지금까지 배경 음악을 얻은 유일한 방법은 맨 위의 레이어, 즉이 경우 HUDLayer에 넣는 것입니다.
    • 물리 기관을 만들기 위해 SpaceManagerCocos2d 객체의 인스턴스를 사용해야한다는 사실 때문에 - 내 레벨 레이어가 죽어서 내 PlayLayer에 통합 된 것 같습니다. 그렇지 않으면 플레이어와 레벨 간의 충돌을 감지하려고 시도하는 악몽을 꾼 것 같습니다.

    나는 여기 아주 명백한 무엇인가 놓치고 있냐? Im이 얻지 못하는 레이어에 대한 핵심적인 이해가 있습니까? 점점 더 많은 사람들이 하나의 클래스 안에서 게임 전체를 구성하고 레이어를 장면으로 사용하기 위해 프레임 워크에 밀려나는 것처럼 느낍니다.

    다른 사람이이 문제를 겪고 있습니까? 게임의 아키텍처에 잘못 접근하고 있습니까? 어떤 도움이라도 정말로 감사 할 것입니다.

    미리 감사드립니다.

  • 답변

    4

    글쎄, 각 게임은 다릅니다.

    1. 사용이 : architecture에 대한적인 Cocos2D 포럼에서 많은 좋은 discussions 어떤 사람들은 MVC 방식을 사용하는 것을 선호있다, 등, 물리 객체를 포함하려면 여기를

      Actor 은유를 사용하여 같은 일부 내 접근 방식 CCLayer 개체 (GameLayer 및 HUDLayer)를 하나의 CCScene (GameScene)의 자식 노드로 사용합니다. 이것들은 "view"객체입니다.

    2. 게임 상태 (GameController 또는 별도의 파일에도 저장 됨)를 변경할 수있는 GameController 싱글 톤을 만듭니다. CCScene을 서브 클래스 화하여 컨트롤러라고 부를 수도 있습니다.
    3. GameLayer은 게임 레벨의 그래픽과 게임의 모든 액터를 렌더링합니다. 또한 터치 이벤트를 통해 게임 입력을 처리합니다.
    4. HUDLayer은 GameLayer보다 높은 z- 인덱스에 배치되며 분명히 HUD 및 버튼에 대한 CCSprite 객체를 모두 포함합니다.
    5. HUDLayerGameLayer 사이의 상호 작용은 GameController를 통해 관리됩니다.
    6. GameController은 모두 상태 변경 및 게임 동작을 수행합니다.

    내 현재 게임에서 작동했기 때문에 그건 내 접근 방식이며, 결정적인 대답은 아닙니다.

    물리 개체에 Actor paradigm을 사용하는 방법을 살펴 보는 것이 좋습니다. SpaceManager는 적절한 작업을 수행하지만 항상 물리 개체가 CCSprite를 확장하는 것은 원하지 않습니다.