<4D F736F F F696E74202D20C1A63034B0AD202D20C7C1B7B9C0D3B8AEBDBAB3CABFCD20B9ABB9F6C6DBC0D4B7C2>

Similar documents
슬라이드 1

슬라이드 1

슬라이드 1

(Microsoft PowerPoint - \301\24613\260\255 - oFusion \276\300 \261\270\274\272)

슬라이드 1

슬라이드 1

<4D F736F F F696E74202D B3E22032C7D0B1E220C0A9B5B5BFECB0D4C0D3C7C1B7CEB1D7B7A1B9D620C1A638B0AD202D20C7C1B7B9C0D320BCD3B5B5C0C720C1B6C0FD>

슬라이드 1

<353120C0CCB8E9C0E72D4E504320C0CEB0F820C1F6B4C9C0BB20C0A7C7D120B9ABB8AEC1FEB1E220B1B8C7F62E687770>

슬라이드 1

(Microsoft PowerPoint - \301\24615\260\255 - \303\346\265\271\303\263\270\256)

<4D F736F F F696E74202D20C1A63134B0AD202D20BBE7BFF8BCF6BFCD20C8B8C0FC>

<4D F736F F F696E74202D20C1A63037B0AD202D20B1A4BFF8B0FA20B1D7B8B2C0DA>

(Microsoft PowerPoint - \301\24608\260\255 - \261\244\277\370\260\372 \300\347\301\372)

(Microsoft PowerPoint - \301\24611\260\255 - \276\326\264\317\270\336\300\314\274\307)

<4D F736F F F696E74202D20C1A63130B0AD202D20C1F6C7FCB0FA20C7CFB4C3C0C720B7BBB4F5B8B5>

Microsoft PowerPoint - 09-CE-5-윈도우 핸들

1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout << " 양수입력 : "; cin >> *p; if (*p <= 0) cout << " 양수를입력해야합니다 " << endl; return; 동적할

윈도우시스템프로그래밍

<4D F736F F F696E74202D20C1A63137B0AD202D20C1F6C7FCC3E6B5B9C3B3B8AE>

Microsoft PowerPoint - Chapter 6.ppt

슬라이드 1

Lab 3. 실습문제 (Single linked list)_해답.hwp

제8장 자바 GUI 프로그래밍 II

PowerPoint Template

Lab 4. 실습문제 (Circular singly linked list)_해답.hwp

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

설계란 무엇인가?

Design Issues

C++ Programming

JUNIT 실습및발표

Microsoft PowerPoint - 09-Object Oriented Programming-3.pptx

<4D F736F F F696E74202D2036C0CFC2B05FB0B4C3BCC1F6C7E2C7C1B7CEB1D7B7A1B9D62E707074>

Microsoft PowerPoint - additional06.ppt [호환 모드]

슬라이드 1

1. 클래스와배열 int 형배열선언및초기화 int ary[5] = 1, 2, 3, 4, 5 ; for (int i = 0; i < 5; i++) cout << "ary[" << i << "] = " << ary[i] << endl; 5 장클래스의활용 1

chap 5: Trees

쉽게 풀어쓴 C 프로그래밍

Chapter #01 Subject

유니티 변수-함수.key

Microsoft PowerPoint - IP11.pptx

(Microsoft PowerPoint - 07\300\345.ppt [\310\243\310\257 \270\360\265\345])

(Microsoft Word - \301\337\260\243\260\355\273\347.docx)

gnu-lee-oop-kor-lec10-1-chap10

Microsoft PowerPoint - C++ 5 .pptx

API - Notification 메크로를통하여어느특정상황이되었을때 SolidWorks 및보낸경로를통하여알림메시지를보낼수있습니다. 이번기술자료에서는메크로에서이벤트처리기를통하여진행할예정이며, 메크로에서작업을수행하는데유용할것입니다. 알림이벤트핸들러는응용프로그램구현하는데있어

Microsoft PowerPoint - 07-Data Manipulation.pptx

C++ Programming

Microsoft PowerPoint - additional08.ppt [호환 모드]

PowerPoint 프레젠테이션

Microsoft PowerPoint - additional07.ppt [호환 모드]

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

윤성우의 열혈 TCP/IP 소켓 프로그래밍

PowerPoint Presentation

JAVA PROGRAMMING 실습 08.다형성

슬라이드 1

Microsoft PowerPoint - 02-Class Review.pptx

Chapter_02-3_NativeApp

PowerPoint Template

PowerPoint 프레젠테이션

PowerPoint Presentation

PowerPoint 프레젠테이션

No Slide Title

제 1 장 기본 개념

1. 상속의기본개념 다음과같은문제를위한클래스설계 자동차 속성 : 색상, 배기량, 현재속도 메서드 : 가속하라, 멈춰라, 시동을켜라 트럭 속성 : 색상, 배기량, 현재속도, 최대중량 메서드 : 가속하라, 멈춰라, 시동을켜라 택시 속성 : 색상, 배기량, 현재속도, 요금,

쉽게 풀어쓴 C 프로그래밍

C++ Programming

오버라이딩 (Overriding)

PowerPoint 프레젠테이션

The C++ Programming Language 5 장포인터, 배열, 구조체 5.9 연습문제 다음의선언문을순서대로작성해보자. 문자에대한포인터, 10개정수의배열, 10개정수의배열의참조자, 문자열의배열에대한포인터, 문자에대한포인터에대한포인터, 상수정수, 상수

초보자를 위한 C# 21일 완성

슬라이드 1

PowerPoint Presentation

쉽게 풀어쓴 C 프로그래밍

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100

17장 클래스와 메소드

PowerPoint Presentation

Microsoft PowerPoint - Java7.pptx

Microsoft PowerPoint - 06-Body Data Class.pptx

슬라이드 1

untitled

Lab 5. 실습문제 (Double linked list)-1_해답.hwp

5장 MFC기반 다지기

1. 객체의생성과대입 int 형변수 : 선언과동시에초기화하는방법 (C++) int a = 3; int a(3); // 기본타입역시클래스와같이처리가능 객체의생성 ( 복습 ) class CPoint private : int x, y; public : CPoint(int a

PowerPoint Presentation

PowerPoint 프레젠테이션

Contents. 1. PMD ㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍ 2. Metrics ㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍ 3. FindBugs ㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍ 4. ㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍ

설계란 무엇인가?

C 언어 프로그래밊 과제 풀이

K&R2 Reference Manual 번역본

Chapter 4. LISTS

Java Programing Environment

PowerPoint Template

쉽게 풀어쓴 C 프로그래밍

adfasdfasfdasfasfadf

슬라이드 1

C++ Programming

<4D F736F F D20C1A4BAB8B0FAC7D0C8B85F FC7CFB0E85F446F63>

Transcription:

게임엔진 제 4 강프레임리스너와 OIS 입력시스템 이대현교수 한국산업기술대학교게임공학과

학습내용 프레임리스너의개념 프레임리스너를이용한엔터티의이동 OIS 입력시스템을이용한키보드입력의처리

게임루프 Initialization Game Logic Drawing N Exit? Y Finish

실제게임루프

오우거엔진의메인렌더링루프 Root::startRendering() 함수에서이루어짐. 메인루프수행내용 프레임리스너 (Frame Listener) 들의 framestarted() 함수호출 현재의장면으로부터한프레임을렌더링 프레임리스너 (Frame Listener) 들의 frameended() 함수호출 루프의중단 framestarted() 또는 frameended() 에서하나라도 false 리턴.

Ogre::FrameListener 클래스 프레임리스너 (frame listener) 장면이화면에렌더링되기직전에, 그리고렌더링된직후에호출되는함수를지니고있는객체 한프레임의렌더링전후에처리해야할일을프레임리스너를통해서구현할수있다. 프레임리스너객체를생성한후, 반드시프레임리스너로등록을시켜야비로소렌더링전후에호출이된다. 여러개의프레임리스너객체가존재할수있다.

실습 FishMove 물고기움직이기

FishMove.cpp (1) class MainListener : public FrameListener 실습 public: ~MainListener(void) } bool framestarted(const FrameEvent &evt) fishnode1->translate(-0.05f, 0.0f, 0.0f); fishnode2->translate(-0.08f, 0.0f, 0.0f); return true; } bool frameended(const FrameEvent &evt) return true; } };

FishMove.cpp (2) class App ESCListener* mesclistener; MainListener* mmainlistener; public: void go(void) mesclistener = new ESCListener(mKeyboard); mroot->addframelistener(mesclistener); 실습 } }; mmainlistener = new MainListener(mRoot); mroot->addframelistener(mmainlistener);

실행화면

물고기를움직이는프레임리스너의구현 class MainListener : public FrameListener FrameListener 클래스로부터상속. Root* mroot; RenderWindow* mwindow; public: MainListener(Root* root) mroot = root; mwindow = mroot->getautocreatedwindow(); 후략 }

FrameListener 멤버함수 Public Member Functions virtual bool framestarted (const FrameEvent &evt) Called when a frame is about to begin rendering. virtual bool frameended (const FrameEvent &evt) Called just after a frame has been rendered. virtual ~FrameListener () struct FrameEvent Real timesincelastevent; Real timesincelastframe; };

물고기를움직이는프레임리스너의구현 bool framestarted(const FrameEvent &evt) fishnode1->translate(-0.05f, 0.0f, 0.0f); fishnode2->translate(-0.08f, 0.0f, 0.0f); return true; } 물고기노드를이동. bool frameended(const FrameEvent &evt) return true; }

ESC 처리프레임리스너의구현 class ESCListener : public FrameListener OIS::Keyboard *mkeyboard; public: ESCListener(OIS::Keyboard *keyboard) : mkeyboard(keyboard) } bool framestarted(const FrameEvent &evt) mkeyboard->capture(); return!mkeyboard->iskeydown(ois::kc_escape); } };

프레임리스너의생성및등록 class App void go(void) mesclistener = new ESCListener(mKeyboard); mroot->addframelistener(mesclistener); 프레임리스너를생성. mmainlistener = new MainListener(mRoot); mroot->addframelistener(mmainlistener); mroot->startrendering(); }; 프레임리스너를등록. 렌더링루프에서프레임리스너를계속호출하게됨.

실습 FishKeyMove 좌우키이로물고기움직이기

FishKeyMove.cpp class MainListener : public FrameListener 실습 bool framestarted(const FrameEvent &evt) fishnode2->translate(-0.08f, 0.0f, 0.0f); mkeyboard->capture(); if (mkeyboard->iskeydown(ois::kc_left)) fishnode1->translate(-0.2f, 0, 0); else if (mkeyboard->iskeydown(ois::kc_right)) fishnode1->translate(0.2f, 0, 0); return!mkeyboard->iskeydown(ois::kc_escape); } };

실행화면 좌우키이로앞의물고기를좌우이동할수있음.

OIS InputManager 의생성및키보드입력장치등록 class MainListener : public FrameListener MainListener(Root* root) size_t hwnd = 0; mwindow->getcustomattribute("window", &hwnd); 윈도우핸들러획득 InputManager 생성 minputmanager = OIS::InputManager::createInputSystem(hWnd); mkeyboard = static_cast<ois::keyboard*> (minputmanager->createinputobject(ois::oiskeyboard, false)); } }; 키보드입력장치의생성 무버퍼입력

키입력캡쳐및코드확인 bool framestarted(const FrameEvent &evt) mkeyboard->capture(); if (mkeyboard->iskeydown(ois::kc_left)) fishnode1->translate(-0.2f, 0, 0); else if (mkeyboard->iskeydown(ois::kc_right)) fishnode1->translate(0.2f, 0, 0); return!mkeyboard->iskeydown(ois::kc_escape); }

실습과제 #2 물고기떼를추적하는카메라구현 50 마리의물고기떼가 +x 방향에서 x 방향으로이동.( 속도는각기제각각, 랜덤값 ) 숫자키이 1, 2, 3, 4 에따라, 각자다른방향에서보는카메라의설정. 방향은임의로정함. ex) 상, 하, 좌, 우