8.虛擬鍵盤實現
概述:
硬鍵盤就是物理鍵盤,平時敲的那種。軟鍵盤是虛擬的鍵盤,不是在鍵盤上,而是在"屏幕"上。虛擬按鍵就是虛擬鍵盤的一部分,根據功能需求,提供部分按鍵效果的UI可操控按鈕,尤爲是在平板電腦、觸控手機上,虛擬按鍵獲得了更多的應用。在觸控平臺上的遊戲,一部分經過手指在屏幕上相應的滑動產生相應的指令;還有一部分增設虛擬按鍵,完成對遊戲的操控。 ide
實現原理:
UI基本製做->功能實現 函數
實現方法:
步驟1: 網站
按照7UI的製做方法,完成UI的製做,最終效果圖,如8-1-1所示。左側爲搖桿按鈕,爲雙側的BUTTON,一層作搖桿的底部按鈕背景,一層與用戶交互發生相應事件。右側圍控制攻擊和跳躍的按鈕。 spa
圖8-1-1
步驟2: 3d
腳本實現按鈕功能。 遊戲
初始化虛擬按鍵UI。 事件
04 |
GUI.RegisterLayout(_attackWindowName, @"Layout\AttackButton.layout", false, true); |
05 |
//註冊按鈕點擊事件 1.layout名字 2.控件名字 3.回調函數 4.事件控制類型 |
06 |
GUI.UIWidget.SetEventMouseButtonClick(_attackWindowName, "AttackBtn", OnAttackBtnClick, EventControl.Add); |
09 |
GUI.RegisterLayout(_jumpWindowName, @"Layout\JumpButton.layout", false, true); |
10 |
//註冊按鈕點擊事件 1.layout名字 2.控件名字 3.回調函數 4.事件控制類型 |
11 |
GUI.UIWidget.SetEventMouseButtonClick(_jumpWindowName, "JumpBtn", OnJumpBtnClick, EventControl.Add); |
15 |
IntSize screenSize = GUI.GetScreenSize(); |
16 |
IntPoint AtkBtnUIpos = new IntPoint((int)(screenSize.width - GUI.UIWidget.GetSize(_attackWindowName, "_Main").width * 2.5f), |
17 |
(int)(screenSize.height - GUI.UIWidget.GetSize(_attackWindowName,"_Main").height * 1.2f)); |
19 |
IntPoint JumpBtnUIpos = new IntPoint((int)(screenSize.width - GUI.UIWidget.GetSize(_attackWindowName, "_Main").width * 1.2f), |
20 |
(int)(screenSize.height - GUI.UIWidget.GetSize(_attackWindowName,"_Main").height * 1.2f)); |
21 |
GUI.UIWidget.SetPosition(_attackWindowName, "_Main", AtkBtnUIpos); |
22 |
GUI.UIWidget.SetPosition(_jumpWindowName, "_Main", JumpBtnUIpos); |
26 |
private void OnAttackBtnClick(FString sender) |
28 |
Logic.IputMgr.Instance.Attack_N(Code.J); |
31 |
private void OnJumpBtnClick(FString sender) |
33 |
Logic.IputMgr.Instance.Jump(); |
虛擬搖桿類 遊戲開發
01 |
public class AndroidJoystick |
05 |
GUI.RegisterLayout(_joystickWindowName, @"Layout\JoyStickBtn.layout", false, true); |
07 |
GUI.UIWidget.SetEventMouseButtonPressed(_joystickWindowName, "JoystickBtn", OnJSBtnPressed, EventControl.Add); |
09 |
GUI.UIWidget.SetEventMouseButtonReleased(_joystickWindowName, "JoystickBtn", OnJSBtnReleased, EventControl.Add); |
11 |
GUI.UIWidget.SetEventMouseDrag(_joystickWindowName, "JoystickBtn", OnJSBtnDrag, EventControl.Add); |
13 |
GUI.UIWidget.SetEventTick(_joystickWindowName, "JoystickBtn", Tick, EventControl.Add); |
14 |
IntSize screenSize = GUI.GetScreenSize(); |
15 |
IntPoint JoystickBtnUIpos = new IntPoint((int)(GUI.UIWidget.GetSize(_joystickWindowName,"_Main").width * 0.2f), |
16 |
(int)(screenSize.height - GUI.UIWidget.GetSize(_joystickWindowName, "_Main").height * 1.5f)); |
17 |
GUI.UIWidget.SetPosition(_joystickWindowName, "_Main", JoystickBtnUIpos); |
18 |
GUI.SetLayoutVisible(_joystickWindowName, true); |
19 |
jsBtnPos = GUI.UIWidget.GetPosition(_joystickWindowName, "JoystickBtn"); |
22 |
private void OnJSBtnDrag(FString sender, int value, int value2, MouseButton btn) |
28 |
//跟上一幀做比較,大於0爲右移,小於0爲左移 |
29 |
int xOffset = value - lastX; |
32 |
Debug.Dbgout("IsRightSlide"); |
33 |
IntPoint JoystickBtnUIpos = new IntPoint(150, jsBtnPos.top); |
35 |
GUI.UIWidget.SetPosition(_joystickWindowName, "JoystickBtn", JoystickBtnUIpos); |
36 |
Logic.LogicMgr.Instance.SetDirection(Logic.Direction.Forward); |
37 |
Logic.LogicMgr.Instance.CurPlayer.State = Logic.CharacterState.Running; |
41 |
Debug.Dbgout("IsLeftSlide"); |
42 |
IntPoint JoystickBtnUIpos = new IntPoint(0, jsBtnPos.top); |
44 |
GUI.UIWidget.SetPosition(_joystickWindowName, "JoystickBtn", JoystickBtnUIpos); |
45 |
Logic.LogicMgr.Instance.SetDirection(Logic.Direction.Backward); |
46 |
Logic.LogicMgr.Instance.CurPlayer.State = Logic.CharacterState.Running; |
52 |
private void OnJSBtnPressed(FString sender, int value, int value2, MouseButton btn) |
56 |
Debug.Dbgout("isCtrl"); |
59 |
private void OnJSBtnReleased(FString sender, int value, int value2, MouseButton btn) |
63 |
Debug.Dbgout("Released"); |
66 |
private void Tick(FString sender, float gameTime, float frameTickTime) |
71 |
GUI.UIWidget.SetPosition(_joystickWindowName, "JoystickBtn", jsBtnPos); |
72 |
if (Logic.LogicMgr.Instance.CurPlayer.State == Logic.CharacterState.Running) |
74 |
Logic.LogicMgr.Instance.CurPlayer.State = Logic.CharacterState.Idle; |