开发框架——横版格斗——8.虚拟键盘实现
来源:互联网 发布:淘宝联盟里的优惠卷 编辑:程序博客网 时间:2024/05/01 12:24
8.虚拟键盘实现
概述:
硬键盘就是物理键盘,平时敲的那种。软键盘是虚拟的键盘,不是在键盘上,而是在"屏幕"上。虚拟按键就是虚拟键盘的一部分,根据功能需求,提供部分按键效果的UI可操控按钮,尤其是在平板电脑、触控手机上,虚拟按键得到了更多的应用。在触控平台上的游戏,一部分通过手指在屏幕上相应的滑动产生相应的指令;还有一部分增设虚拟按键,完成对游戏的操控。
实现原理:
UI基本制作->功能实现
实现方法:
步骤1:
按照7UI的制作方法,完成UI的制作,最终效果图,如8-1-1所示。左侧为摇杆按钮,为双侧的BUTTON,一层做摇杆的底部按钮背景,一层与用户交互发生相应事件。右侧围控制攻击和跳跃的按钮。
图8-1-1
步骤2:
脚本实现按钮功能。
初始化虚拟按键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
}
0 0
- 开发框架——横版格斗——8.虚拟键盘实现
- 开发框架——横版格斗——动作游戏教程
- 开发框架——横版格斗——1.资源导入
- 开发框架——横版格斗——2.关键帧动画导入与切割
- 开发框架——横版格斗——3.碰撞检测
- 开发框架——横版格斗——4.技能的输入与检测
- 开发框架——横版格斗——5.技能读表
- 开发框架——横版格斗——6.技能播放的逻辑关系
- 开发框架——横版格斗——7.UI
- 横版格斗——技能动作概念
- 横版格斗——openbor分析1_程序流程
- iOS之UITextView的使用——通过虚拟键盘的工具条关闭虚拟键盘
- Cocos2d—X游戏开发之CCEditBox(虚拟键盘高级篇)(十)
- 《30年代互动电影——格斗天王》(OpenGL+Cg)
- 虚拟键盘——gridLayout布局添加QSpacerItem的用法
- Android——华为虚拟键盘EditText被顶起
- Unity3D开发——安卓版的虚拟按键实现
- ionic开发——调用键盘搜索功能实现方法
- xcode5编译过的xib 如何在xcode4.6下打开
- 纯python处理时区的转换
- C++错误unresolved external symbol _WinMain@16
- 编写 windbg 扩展
- 大学那会儿,我读过的技术经典图书
- 开发框架——横版格斗——8.虚拟键盘实现
- 关于TableView中出现deallocated问题
- eclipse下window里没有AVD
- 关于jsp中tr鼠标移动变色,有底色如何变色
- uploadify上传出错信息自定义内容
- /usr/bin/ld: cannot find -lstdc++ /usr/bin/ld: cannot find -lm /usr/bin/ld: cannot find -lc
- vi set
- UML
- Codeforces Round #230 (Div. 2)