效果图:
实现方式:ImGui,使用语言:Lua
实现原理:
摇杆分为上下两个部分:上圆和下圆
下圆为基础圆,一旦确定,位置是不会动的,计算中的数据都是依照这个圆的Position和Size进行计算
上圆是依照手指在屏幕上的位置,进行显示。
然后因为两个圆不需要响应任何的逻辑,只需要在适当的位置进行显示,所以我使用的是ImGui::Image进行渲染。没有用ImageButton,实际上两个接口的参数差不多,只不过在使用ImageButton的时候,按键之后,就会有高亮显示,就有点突兀了,所以这个时候使用Image比较合适。
我们将显示下圆和上圆分别显示在两个窗口上,然后将两个窗口添加一下标志位:ImGuiWindowFlags_NoTitleBar(没有titlebar),ImGuiWindowFlags_NoResize(没有右下角的缩放按钮) ImGuiWindowFlags_NoScrollbar(没有拖动条),然后再这个窗口里面只显示一个Image,然后我们需要一个有透明度的两张Image,来作为上圆和下圆,这样就有了上面的一个静态的效果。
下圆一直在绘制,而上圆只有当手指在屏幕上按下的时候,再去绘制,因为我们可以拿到手指在屏幕上触摸的坐标,然后在坐标的位置绘制上圆,这样就会有上圆随着手指移动的效果了。
计算过程:
1、因为我们下圆的位置和大小是固定的。所以我们可以确定下圆的Pos和Size,所以我们可以通过函数GetBaseJoystickWindowCenterPos计算得出,下圆的圆心点:vBaseCenter(二维数组类型)
2、将下圆分成四个象限,因为屏幕的坐标方向是从左往右为正,从上往下为正,此时你在屏幕上按键就会被分在这四个象限(左上,右上,左下,右下)之中,
3、手指在屏幕上触摸之后,上圆显示的位置应该是触摸点B和圆心A连线在圆上的焦点C,这个位置应该是上圆显示的圆心位置