跨平台游戏编程与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_BUTTONMOUSE_RELEASE_LEFT_BUTTONMOUSE_PRESS_MIDDLE_BUTTONMOUSE_RELEASE_MIDDLE_BUTTONMOUSE_PRESS_RIGHT_BUTTONMOUSE_RELEASE_RIGHT_BUTTONMOUSE_MOVEMOUSE_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_PRESSKEY_RELEASEKEY_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_PRESSTOUCH_RELEASETOUCH_MOVE
x是触摸在像素中的x位置。 (左边缘为零。)y是触摸在像素中的y位置。 (上边缘为零。)contactIndex用于区分启用多点触控时的多个触摸点,表示多个触摸点的发生顺序,从零开始。但是,不要假设contactIndex值是连续的。
一些平台可能允许你在屏幕边界之外触摸,所以负x和y值是可能的。
你可以使用Game::setMultiTouch()启用多点触控,它接受布尔值。默认情况下禁用(false)。
一些平台支持手势。Game::isGestureSupported()可以用来确定哪些手势受支持。
你可以检查的手势在Gesture.h中的GestureEvent枚举中定义,如下所示:
GESTURE_TAPGESTURE_SWIPEGESTURE_PINCHGESTURE_LONG_TAPGESTURE_DRAGGESTURE_DROPGESTURE_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);