기초 튜토리얼 4-2
TutorialFrameListener
사용되는 변수들
시작하기 전 TutorialFrameListener 클래스에 몇개의 변수들을 정의합니다 :
bool mMouseDown; // Whether or not the left mouse button was down last frame
Real mToggle; // The time left until next toggle
Real mRotate; // The rotate constant
Real mMove; // The movement constant
SceneManager *mSceneMgr; // The current SceneManager
SceneNode *mCamNode; // The SceneNode the camera is currently attached to
mSceneMgr는 현재 SceneManager의 포인터를 가르키며 mCamNode는 현재의 카메라가 attach 된 SceneNode를 가르킵니다. mRotate, mMove 회전과 움직임 상수입니다. 만약 움직임이나 회전속도를 바꾸고 싶으시면 값을 조절하시면 됩니다.
2개의 변수(mToggle, mMouseDown)로 입력을 제어합니다. "unbuffered" 방식의 마우스와 키 제어를 이 튜토리얼에서 다루게 될 것입니다(buffered 방식은 다음 튜토리얼 주제입니다). FrameListener가 키보드와 마우스의 상태를 체크하기위해 어떠한 함수를 호출하게 될 것 입니다. 키보드를 사용하여 화면상의 객체를 제어할때 작은 문제점에 직면하게 됩니다. 만약 키를 누르면 그에 따른 행동을 하긴하는데 다음 프레임에서는 어떤일이 일어날까요? 같은키가 눌러져 있으면 똑같은 행동을 또 취할까요? 어떤 경우에는(화살표키로 움직이는 경우) 이렇게 되는게 맞겠죠. 그러나 예를 들어 "T" 키가 조명을 끄고 켜는것이라면 어떨까요. 첫 프레임에서 T 키가 눌러지고 조명이 반전되겠죠. 그리고 그 다음 프레임에서는 여전히 눌러져 있습니다. 그래서 다시 반전되고.. 계속해서 계속.. 키가 떨어 질 때 까지 반복될겁니다. 키의 상태를 프레임별로 체크해서 이러한 상황을 방지해야 합니다. 조금 뒤에서 2가지 종류의 해결방안을 제시해 드리겠습니다.
mMouseDown 변수는 마우스버튼이 이전프레임에서도 눌러져 있었는지 체크합니다(만약 mMouseDown값이 참이면 마우스버튼을 뗄때까지 지속되는 반복행동을 방지해야 합니다). mToggle 변수는 동작이 다시 실행 될 때 까지의 최소한의 시간차를 두기위해 사용됩니다. 버튼이 눌러질때 mToggle 변수에 일정한 시간이 설정되며 그 시간이 지나기 전까지는 어떤 행동도 금지됩니다.
생성자
가장 먼저 보게 될 ExampleFrameListener의 생성자에 대해서 알아봅시다 :
: ExampleFrameListener(win, cam, false, false)
주의깊게 보셔야 할 점은 3, 4번째 변수가 false 로 설정된 것입니다. 3번째 변수는 buffered 방식의 키 입력을 받을것인지, 4번째 변수는 buffered 방식의 마우스 입력을 받을것인지 (이 튜토리얼에서는 다루지 않습니다)를 설정합니다.
TutorialFrameListener 생성자에서 일단 지금은 모든 변수를 기본값으로 둡니다 :
// key and mouse state tracking
mMouseDown = false;
mToggle = 0.0;
// Populate the camera and scene manager containers
mCamNode = cam->getParentSceneNode();
mSceneMgr = sceneMgr;
// set the rotation and move speed
mRotate = 0.13;
mMove = 250;
다 됐습니다. mCamNode 변수는 현재 설정되어 있는 카메라로 초기화 되어 있습니다.