430 likes | 560 Views
Technical Presentation Report 이웅주. Content. Result Stage editor Game. RESULT. Final result. Add screenshots. Requirement. 3 차원 상에 배치된 구에 숫자 , 연산자가 표시된다 구를 선택하여 수식을 구성한다 . 구성한 수식의 연산 결과가 제시된 답과 맞는지 확인한다 . 게임의 현재 상태 ( 구성한 수식 , 맞춰야할 답 ) 이 표시되어야 한다 . 에디터를 통해 모든 데이터를 설정할 수 있어야 한다
E N D
Content • Result • Stageeditor • Game
Finalresult • Addscreenshots
Requirement • 3차원 상에 배치된 구에 숫자, 연산자가 표시된다 • 구를 선택하여 수식을 구성한다. • 구성한 수식의 연산 결과가 제시된 답과 맞는지 확인한다. • 게임의 현재 상태(구성한 수식, 맞춰야할 답)이 표시되어야 한다. • 에디터를 통해 모든 데이터를 설정할 수 있어야 한다 • 스테이지를 구성하기 쉬워야 한다
Tool • Renderingengine • OGRE3D1.2.1Dagon: 활성화된 커뮤니티, 문서화, 사용하기 쉬운 구조 • GUI • Qt4.3.1OpenSourceEdition: 직관적인 튜토리얼, 세련된 GUI 제공 • Soundlibrary • fmodEx4.04:DirectSound 래핑. 사용하기 편리 • Datastructure • STL • Compiler/IDE • VisualC++2005Express • Packaging • InnoSetup5: 스크립트 구조, 다양한 예제 제공
Schedule(fromCVS) • 총 2개월 • 7.1:beginproject • ~7.24:technicaltest • ~7.31:stagebuilderbuilt • ~8.6:frameworkbuilt • ~8.17:eachstatebuilt • ~8.31:etc(credit,rank,cache) • ~9.3:audio,packaging
Requiredtechnique • 상태 단위 개발 • UI 추상화 • 정확한 피킹 • 빠른 수식 계산 속도 • Qt와 Ogre3D 바인딩 • CQ 팩터의 올바른 추출
Purpose • 스테이지 데이터 편집 • 숫자/기호의 비율,camera,light,skybox 설정 • Container,egg 크기, 위치 설정
Classdiagram Ui_MainWindow QWidget MainWindow RendererView datacontrol RendererListener Data Document Ogre::KeyListener Ogre::FrameListener
Roleofclass • QWidget: 모든 QtGUI 컨트롤의 기반 클래스 • Ui_MainWindow:GUI 편집기인 QtDesigner에서 만든 커스텀 폼에서 uic(UIcompiler)를 통해 생성된 코드. 컨트롤 설정이 담겨있음 • MainWindow:QtGUI 컨트롤 관리 • RenderView:Qt 윈도우에 바인딩된 렌더링창 처리 • RenderListener: 렌더링 창으로 들어온 입력 처리 • Document: 스테이지 데이터 관리. 데이터 추출 등 • Data: 스테이지 데이터의 구조체 묶음(I/O 포함)
apartofMainWindowcodes • 이벤트를 처리할 함수를 QObject 클래스의 connect 메소드를 이용해 바인딩시킴 • 이벤트는 인수가 있을 경우 전달함.
apartofRenderView • 타이머를 생성하여 주기적으로 렌더링 창을 업데이트함
apartofRenderListener • 렌더링 엔진에서 제공하는 디버그 정보를 업데이트하기 위해 Ogre::FrameListener를 상속받음 • 렌더링 창으로 입력되는 키 이벤트를 처리하기 위해 Ogre::KeyListener또한 상속받음 • 마우스 처리를 하려면 마찬가지로 Ogre::MouseListener가 필요함(시간 상 이유로 미구현)
apartofDocument • MFC의 Document-View 구조를 차용하여,Document 클래스가 데이터를 모두 관리하도록 함.
apartofDocument • MilkShape3D에서 생성된 공 묶음에서 위치와 반지름을 얻어냄
Classdiagram#1 control through stack <<interface>> State StateManager SoundManager InputManager
Classdiagram#2(State) <<interface>> State MenuState SinglePlayState OptionState GameOverState HighScoreState CongratulationState PrePlayState MainMenuState RankState IntroState PlayState GameMenuState HelpState PostPlayState CreditState ※AllStateClassissingleton
ClassDiagram#3 PrePlayState pushmessage Interface PlayState Stage PostPlayState
Relationofstates IntroState MainMenuState SinglePlayState HelpState HighScoreState OptionkState CreditState PlayState GameOverState CongratulationrState RankState PrePlayState PostPlayState PauseState GameMenuState
Roleofclass • Interface: 화면에 표시되는 정보 관리 • StateManager: 상태 스택 관리, 이벤트를 스택의 top에 있는 State에 전달. 오디오, 마우스 커서 , 입력 등 전역 상태, 이벤트 관리 • State: 각 상태의 인터페이스 역할 • MenuState: 메뉴 상태의 인터페이스 • IntroState: 로고 표시(게임에서는 쓰지 않음) • MainMenuState: 메인 메뉴 표시, 입력 처리 • HelpState: 도움말 처리 • OptionState: 게임 선택 사항 관리 • HighScoreState: 순위 표시 • SinglePlayState:1인 게임 상태 처리 • PlayState: 스테이지 진행 상태 관리. • PrePlayState: 스테이지 시작 전 상태 관리. 스테이지 표시 등 • PostPlayState: 스테이지 종료 상태 관리. 결과 표시 • PauseState: 일시 정지 상태 관리 • GameMenuState: 게임 중 메뉴 호출 상태 관리 • RankState: 순위에 들 경우 플레이어 이름 입력 처리 • GameOverState: 플레이어가 게임 종료에 책임이 있는 상태 처리 • CongratulationState: 모든 스테이지를 클리어한 상태 관리 • CreditState: 제작진 표시 • SoundManager: 오디오 관리 • InputManager: 렌더링 창으로 들어온 입력을 StateManager로 전달 • Stage: 스테이지 데이터 구조체 관리
ManagementofState • 프레임 렌더링 시마다 스택 top에 있는 상태에 처리 요청 • 또한 각 상태는 스택에 enter,exit 할때마다 리소스 초기화 및 제거 수행 • 각 상태는 필요할 때마다 StateManager에 control 요청하여 상태 전환 State stack State Manager astate astate control(push,pop,change), passevent(key,mouse..), renderofthestateattop
Pickingtheball#1 • OGRE3D의 기본 피킹은 AABB • rayquery하여 얻은 entity의 중심 위치와 ray 간의 최단 거리를 투영벡터를 이용해 얻음. 이 값을 entity 이름과 반지름을 저장한 맵(key:entityname)을 이용하여 사용자가 선택한 볼이 맞는지 비교 • 참조- 좋은 게임을 만드는 핵심 원리: 게임 수학과 물리
Pickingtheball#2 p: 공의 위치 |p-q|: 최단 거리 p1-q: 투영벡터
Cachingoperations • 연산 결과는 DLL과의 통신을 통해 얻어짐 • 또한 연산식을 표시하기 위해 별도의 표현식을 구성해야함 • 이 시간을 줄이기 위해 수식을 키로 한 캐쉬 운용
Messagestack • Interface 클래스는 전달받은 메시지를 스택에 보관함 • 매 프레임마다 최신 메시지의 livetime을 체크하고 표시함
Displayoperation • 사용자가 입력한 숫자, 기호는 텍스처로 결과는 비트맵 폰트로 표시됨. 입력된 숫자의 는 자리 수는 수식만으로 알 수 없음. • 결과는 overflow,invalid, 정수 값으로 구성 • 표현식을 구성하고, 이 문자열을 파싱하여 수식 표현
Packaging • InnoSetup5를 사용. 한글/영문 설치 제공 • VS2005로 개발되어 배포용 DLL이 플레이어 컴퓨터에 설치되어야만 가능(RedistributablePackage) • InnoSetup5의 파스칼 스크립트를 이용하여 설치 여부를 확인하고, 미설치 경우에는 배포 패키지를 실행시킴