跨平台游戏编程与gameplay3d/获取输入
在你的gameplay3d游戏中处理输入很容易 - gameplay::Game
类,你的游戏从中继承,包含多个virtual
方法,这些方法在每次有输入需要处理时被调用,所以你所需要做的就是在你的游戏中重写这些方法。
当发生鼠标事件时,Game::mouseEvent()
被调用。mouseEvent()
方法的函数签名如下:
virtual bool mouseEvent(Mouse::MouseEvent evt, int x, int y, int wheelDelta);
其中
evt
代表发生的鼠标事件,是Mouse.h
中定义的以下enum
值之一:MOUSE_PRESS_LEFT_BUTTON
MOUSE_RELEASE_LEFT_BUTTON
MOUSE_PRESS_MIDDLE_BUTTON
MOUSE_RELEASE_MIDDLE_BUTTON
MOUSE_PRESS_RIGHT_BUTTON
MOUSE_RELEASE_RIGHT_BUTTON
MOUSE_MOVE
MOUSE_WHEEL
x
是鼠标在像素中的x位置。 (左边缘为零。)y
是鼠标在像素中的y位置。 (上边缘为零。)wheelDelta
是鼠标滚轮刻度的数量。 (正数为向上/向前,负数为向下/向后。)
未被消耗的鼠标事件将被解释为触摸事件。你可以通过重写Game::mouseEvent()
并返回true来消耗鼠标事件。这让你可以选择从触摸事件中唯一地处理鼠标事件。Game::mouseEvent()
默认返回false。
请注意,一些移动设备可以使用蓝牙鼠标。
你可以使用Game::setMouseCaptured()
方法启用或禁用“鼠标捕获”,该方法接受布尔值作为参数。在支持鼠标的平台上,当启用鼠标捕获时,平台光标将被隐藏,鼠标将被扭曲到屏幕中心。在启用鼠标捕获期间,所有鼠标移动事件将被作为增量而不是绝对位置传递。
Game::setCursorVisible()
,也接受布尔值,可以用来显示(true)或隐藏(false)鼠标光标。
当发生键盘事件时,Game::keyEvent()
被调用。keyEvent()
方法的函数签名如下:
virtual void keyEvent(Keyboard::KeyEvent evt, int key);
其中
evt
代表发生的键盘事件,是Keyboard.h
中定义的以下枚举值之一:KEY_PRESS
KEY_RELEASE
KEY_CHAR
- 这用于文本字符,因此不会因按下Ctrl
、Shift
、箭头键、Home
、End
等键而触发。
key
- 如果evt
是KEY_PRESS
或KEY_RELEASE
,那么key
就是来自Keyboard::Key
的键码。如果evt
是KEY_CHAR
,那么key
就是字符的unicode值。
Keyboard::Key
枚举中不同键码的完整列表可以在此页面(gameplay3d API 参考)或Keyboard.h
源文件中找到。
你可以调用Game::displayKeyboard()
,它接受一个布尔值,用来显示(true)或隐藏(false)支持它的平台的虚拟键盘。
当发生触摸事件时,Game::touchEvent()
被调用。touchEvent()
方法的函数签名如下:
virtual void touchEvent(Touch::TouchEvent evt, int x, int y, unsigned int contactIndex);
其中
evt
代表发生的触摸事件,是Touch.h
中定义的以下枚举值之一:TOUCH_PRESS
TOUCH_RELEASE
TOUCH_MOVE
x
是触摸在像素中的x位置。 (左边缘为零。)y
是触摸在像素中的y位置。 (上边缘为零。)contactIndex
用于区分启用多点触控时的多个触摸点,表示多个触摸点的发生顺序,从零开始。但是,不要假设contactIndex
值是连续的。
一些平台可能允许你在屏幕边界之外触摸,所以负x
和y
值是可能的。
你可以使用Game::setMultiTouch()
启用多点触控,它接受布尔值。默认情况下禁用(false)。
一些平台支持手势。Game::isGestureSupported()
可以用来确定哪些手势受支持。
你可以检查的手势在Gesture.h
中的GestureEvent
枚举中定义,如下所示:
GESTURE_TAP
GESTURE_SWIPE
GESTURE_PINCH
GESTURE_LONG_TAP
GESTURE_DRAG
GESTURE_DROP
GESTURE_ANY_SUPPORTED
Game::registerGesture()
,它接受GestureEvent
值作为参数,用来注册一种手势。
注册手势后,你将通过以下虚拟方法接收回调。有关参数的详细信息,请参见Game.h
中的函数声明:
virtual void gestureTapEvent(int x, int y);
virtual void gestureSwipeEvent(int x, int y, int direction);
virtual void gesturePinchEvent(int x, int y, float scale);
virtual void gestureLongTapEvent(int x, int y, float duration);
virtual void gestureDragEvent(int x, int y);
virtual void gestureDropEvent(int x, int y);