《Genesis-3D開源遊戲引擎--橫版格鬥遊戲製做教程08:虛擬鍵盤實現》完結

8.虛擬鍵盤實現

概述:

硬鍵盤就是物理鍵盤,平時敲的那種。軟鍵盤是虛擬的鍵盤,不是在鍵盤上,而是在"屏幕"上。虛擬按鍵就是虛擬鍵盤的一部分,根據功能需求,提供部分按鍵效果的UI可操控按鈕,尤爲是在平板電腦、觸控手機上,虛擬按鍵獲得了更多的應用。在觸控平臺上的遊戲,一部分經過手指在屏幕上相應的滑動產生相應的指令;還有一部分增設虛擬按鍵,完成對遊戲的操控。 ide

實現原理:

UI基本製做->功能實現 函數

實現方法:

步驟1: 網站

按照7UI的製做方法,完成UI的製做,最終效果圖,如8-1-1所示。左側爲搖桿按鈕,爲雙側的BUTTON,一層作搖桿的底部按鈕背景,一層與用戶交互發生相應事件。右側圍控制攻擊和跳躍的按鈕。 spa


圖8-1-1

步驟2: 3d

腳本實現按鈕功能。 遊戲

初始化虛擬按鍵UI。 事件

01 public void Init()
02 {
03  //註冊攻擊按鈕layout文件
04  GUI.RegisterLayout(_attackWindowName, @"Layout\AttackButton.layout", false, true);
05  //註冊按鈕點擊事件 1.layout名字 2.控件名字 3.回調函數 4.事件控制類型
06  GUI.UIWidget.SetEventMouseButtonClick(_attackWindowName, "AttackBtn",  OnAttackBtnClick, EventControl.Add);
07  
08  //註冊跳躍按鈕layout文件
09  GUI.RegisterLayout(_jumpWindowName, @"Layout\JumpButton.layout", false, true);
10  //註冊按鈕點擊事件 1.layout名字 2.控件名字 3.回調函數 4.事件控制類型
11  GUI.UIWidget.SetEventMouseButtonClick(_jumpWindowName, "JumpBtn", OnJumpBtnClick, EventControl.Add);
12  
13  
14  //根據屏幕尺寸設定按鈕位置
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));
18  
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);
23 }
24  
25 //攻擊點擊回調函數
26 private void OnAttackBtnClick(FString sender)
27 {
28  Logic.IputMgr.Instance.Attack_N(Code.J);
29 }
30 //跳躍點擊回調函數
31 private void OnJumpBtnClick(FString sender)
32 {
33  Logic.IputMgr.Instance.Jump();
34 }

虛擬搖桿類 遊戲開發

01   public class AndroidJoystick
02   {
03    public void Init()
04    {
05     GUI.RegisterLayout(_joystickWindowName, @"Layout\JoyStickBtn.layout", false, true);
06     //註冊按鈕按下事件
07     GUI.UIWidget.SetEventMouseButtonPressed(_joystickWindowName, "JoystickBtn", OnJSBtnPressed, EventControl.Add);
08     //註冊按鈕擡起事件
09     GUI.UIWidget.SetEventMouseButtonReleased(_joystickWindowName, "JoystickBtn", OnJSBtnReleased, EventControl.Add);
10     //註冊按鈕的拖拽事件
11     GUI.UIWidget.SetEventMouseDrag(_joystickWindowName, "JoystickBtn", OnJSBtnDrag, EventControl.Add);
12     //註冊按鈕的Tick事件
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");
20     _isCtrl = false;
21    }
22    private void OnJSBtnDrag(FString sender, int value, int value2, MouseButton btn)
23    {
24     if (lastX == -1)
25     {
26      lastX = value;
27     }
28     //跟上一幀做比較,大於0爲右移,小於0爲左移
29     int xOffset = value - lastX;
30     if (xOffset > 0)
31     {
32      Debug.Dbgout("IsRightSlide");
33      IntPoint JoystickBtnUIpos = new IntPoint(150, jsBtnPos.top);
34      //移動按鈕位置
35      GUI.UIWidget.SetPosition(_joystickWindowName, "JoystickBtn", JoystickBtnUIpos);
36      Logic.LogicMgr.Instance.SetDirection(Logic.Direction.Forward);
37      Logic.LogicMgr.Instance.CurPlayer.State = Logic.CharacterState.Running;
38     }
39     else if (xOffset < 0)
40     {
41      Debug.Dbgout("IsLeftSlide");
42      IntPoint JoystickBtnUIpos = new IntPoint(0, jsBtnPos.top);
43      //移動按鈕位置
44      GUI.UIWidget.SetPosition(_joystickWindowName, "JoystickBtn", JoystickBtnUIpos);
45      Logic.LogicMgr.Instance.SetDirection(Logic.Direction.Backward);
46      Logic.LogicMgr.Instance.CurPlayer.State = Logic.CharacterState.Running;
47     }
48    lastX = value;
49    lastY = value2;
50   }
51  
52 private void OnJSBtnPressed(FString sender, int value, int value2, MouseButton btn)
53 {
54 //控制控件是否被操做
55 _isCtrl = true;
56 Debug.Dbgout("isCtrl");
57 }
58  
59 private void OnJSBtnReleased(FString sender, int value, int value2, MouseButton btn)
60 {
61 //控制控件是否被操做
62 _isCtrl = false;
63 Debug.Dbgout("Released");
64 }
65  
66 private void Tick(FString sender, float gameTime, float frameTickTime)
67 {
68 if (!_isCtrl)
69 {
70 //在非操做狀態,設置爲初始狀態
71 GUI.UIWidget.SetPosition(_joystickWindowName, "JoystickBtn", jsBtnPos);
72 if (Logic.LogicMgr.Instance.CurPlayer.State == Logic.CharacterState.Running)
73 {
74 Logic.LogicMgr.Instance.CurPlayer.State = Logic.CharacterState.Idle;
75 }
76 }
77 }

引擎官方網站:http://www.genesis-3d.com.cn/ 開發

官方論壇:http://bbs.9tech.cn/genesis-3d/ get

官方千人大羣:59113309   135439306

YY頻道-遊戲開發大講堂(徹底免費,按期開課):51735288 

Genesis-3D開源遊戲引擎:遊戲起源,皆因有我!!!

相關文章
相關標籤/搜索