QT 模仿Android游戏中虚拟摇杆(2)限定摇杆拖动范围
来源:互联网 发布:java 内存缓存 编辑:程序博客网 时间:2024/05/16 04:39
上一篇博客介绍了如何解决在摇杆跟随鼠标拖动的时候,鼠标与摇杆不能对齐的问题,链接如下:
http://blog.csdn.net/qq_27385759/article/details/52304620
废话不多说了,下面就实现第二步,如何限定摇杆在一个圆中活动呢?
首先,我们要定义摇杆圆心的位置,这里用一个全局变量来保存圆心位置:
QPoint centerPoint; //圆心位置double r; //半径
LeftButton::LeftButton(QWidget *parent) : QPushButton(parent){ centerPoint.setX(200); //设置圆心X坐标 centerPoint.setY(200); //设置圆心Y坐标 r = 100; //设置圆的半径}再来,思考一下,让一个点无法离开一个圆的原理是什么?其实就是这个点到圆心的距离R不能超过圆的半径r,接下来就是简单的解方程,已知半径r,我们列出R的解析式:
摇杆到圆心的距离R = sqrt(pow(abs(摇杆X坐标 - 圆心X坐标) , 2) + pow(abs(摇杆Y坐标 - 圆心Y坐标) , 2))
这里的摇杆坐标其实就是鼠标相对于窗口的坐标,关于如何求这个坐标我已经在上一篇博客中介绍过了,这里不多赘述,下面是mousemove事件的具体代码:
<span style="font-size:14px;">void LeftButton::mouseMoveEvent(QMouseEvent *e){ QPoint bpoint=e->globalPos()-windowPoint; if(sqrt(pow(abs(bpoint.rx()-centerPoint.rx()),2) + pow(abs(bpoint.ry()-centerPoint.ry()),2)) < r) { move(bpoint); }}</span>加入这个代码之后,就实现了鼠标只能在半径为100像素的范围内移动摇杆,但是做到这一步还是不够的,因为照着这个代码实现了程序的同学一定也看到了,实际上鼠标控制摇杆离开圆的半径之后,摇杆就不会动了,但是Android游戏中的虚拟摇杆都是手指离开了圆的范围之后,摇杆依然会朝着手指的方向移动的,而且摇杆始终在圆的外围移动,实现这个功能就在下一篇博客上实现吧,今天就这样了,2016年08月25日打卡!
0 0
- QT 模仿Android游戏中虚拟摇杆(2)限定摇杆拖动范围
- QT 模仿Android游戏中虚拟摇杆(1)让摇杆跟着鼠标飞
- QT 模仿Android游戏中虚拟摇杆(3)让圆随着角度移动
- android 虚拟摇杆绘制
- android 虚拟摇杆绘制
- Android手机游戏摇杆
- 虚拟摇杆
- 对游戏开发中虚拟摇杆的封装
- android 虚拟摇杆图片版
- 游戏开发学习笔记(四)虚拟摇杆的制作
- Unity3d_UGUI虚拟摇杆(简易)
- 摇杆
- 摇杆
- android虚拟手柄摇杆的实现
- EasyTouch中虚拟摇杆的使用EasyJoystick
- Unity3d中利用NGUI实现虚拟摇杆
- Unity中虚拟摇杆的简单实现
- android游戏引擎andengine学习系列三:绘制游戏虚拟摇杆
- THE STORIED LIFE OF A.J.FIKRY
- [SCOI2005]王室联邦
- Android studio 删除 导入的module
- eclipse如何修改背景颜色、字体颜色、字体大小
- 服务器文件部署操作(个人总结)
- QT 模仿Android游戏中虚拟摇杆(2)限定摇杆拖动范围
- JavaSE 多线程(2)同步函数
- js实现淘宝放大镜效果
- Android中的消息机制(MessageQueue, Looper, Handler)总结
- Socket和ServerSocket学习笔记
- Vijos P1303 导弹拦截
- 为什么要有心跳包的机制
- 五十道编程小题目 --- 24 java
- Android studio 解决AndroidRuntime: java.lang.VerifyError