跳轉至內容

跨平臺遊戲程式設計與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 - 這用於文字字元,因此不會因按下CtrlShift、箭頭鍵、HomeEnd等鍵而觸發。
  • key - 如果evtKEY_PRESSKEY_RELEASE,那麼key就是來自Keyboard::Key的鍵碼。如果evtKEY_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值是連續的。

一些平臺可能允許你在螢幕邊界之外觸控,所以負xy值是可能的。

你可以使用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);

遊戲手柄

[編輯 | 編輯原始碼]

加速度計

[編輯 | 編輯原始碼]
華夏公益教科書