当前位置: 首页 > wzjs >正文

做五金国际网站哪个好网页设计代码是怎么加链接

做五金国际网站哪个好,网页设计代码是怎么加链接,小程序定制开发哪家好,农业信息网站建设概念三角新按键控制运动事件 本项目是基于qt6和OpenGL实现,对之前项目新增了键盘鼠标事件,实现控制图形大小移动等变换操作 键盘按键移动三角形事件 再刚开始设计事件的时候,我想的是设置一个固定的步长,按w按键就会向上移动&#x…

三角新按键控制运动事件

本项目是基于qt6和OpenGL实现,对之前项目新增了键盘鼠标事件,实现控制图形大小移动等变换操作

键盘按键移动三角形事件

再刚开始设计事件的时候,我想的是设置一个固定的步长,按w按键就会向上移动(原坐标+step步长),其他同理。代码如下:

//mywediget.h新增private成员变量//键盘鼠标事件参数float mscarefactor=1.0f;//缩放float mposition_X=0.0f;//xfloat mposition_Y=0.0f;//y

键盘按下事件处理,原理就是向上移动就再原有基础上加上步长,有一个判定,因为我们是根据三角形的中心点判断位置实现移动的,我们不希望三角形越界,只能再视口内移动,就判断中心点坐标+halfsize(半高)是否触碰到视口边界,视口边界x(-1,1)y(-1,1),如果触碰到边缘就让中心点只能=1.0f-halfsize 

float step =0.1f;float newx=mposition_X;float newY=mposition_Y;float halfsize=0.5f*mscarefactor;//根据三角形中心点位置判断,因为三角形可能放大缩小switch (event->key()) {case Qt::Key_W:newY += step;if(newY+halfsize>1.0f){ newY=1.0f-halfsize;}break;case Qt::Key_A:newx -= step;if(newx-halfsize<-1.0f){ newx=-1.0f+halfsize;}break;case Qt::Key_D:newx += step;if(newx+halfsize>1.0f){ newx=1.0f-halfsize;}break;case Qt::Key_S:newY -= step;if(newY-halfsize<-1.0f){ newY=-1.0f+halfsize;}break;}mposition_X=newx;mposition_Y=newY;update();//触发重绘

另外要注意个问题,在绘制程序中要先绘制移动在绘制缩放,不然会出现缩放以后三角形无法移动到视口边缘,放大后会越界,原因还要研究下,知道的人可以点播一下。

接下来有一个新的需求,按照步长移动三角形移动是一顿一顿的,不够平滑,为了解决这个问题,改用了按照时间变化控制运动,获取系统时间变化*移动速度代替原来的步长设计。

加入新的成员变量

// 新增移动状态bool m_moveUp = false;bool m_moveDown = false;bool m_moveLeft = false;bool m_moveRight = false;float m_lastFrameTime = 0.0f;float m_moveSpeed = 1.0f; // 移动速度系数

新增按键释放事件并修改按键按下事件,当按键触发的时候,修改他们的状态对应上面的成员变量

//键盘按下事件处理
void myWediget::keyPressEvent(QKeyEvent *event)
{//常规按照步长移动机制使得三角形运动不够平滑并且受帧率影响速度不一样,现改用daltertime机制替代switch (event->key()) {case Qt::Key_W: m_moveUp = true; break;case Qt::Key_S: m_moveDown = true; break;case Qt::Key_A: m_moveLeft = true; break;case Qt::Key_D: m_moveRight = true; break;default: QOpenGLWidget::keyPressEvent(event);}
}
//键盘按键按下事件处理
void myWediget::keyReleaseEvent(QKeyEvent *event)
{switch (event->key()) {case Qt::Key_W: m_moveUp = false; break;case Qt::Key_S: m_moveDown = false; break;case Qt::Key_A: m_moveLeft = false; break;case Qt::Key_D: m_moveRight = false; break;default: QOpenGLWidget::keyReleaseEvent(event);}
}

这样我们绘制的时候就可以根据按键状态控制三角形的移动,velocity就是daltatime变换时间*运动速度,currentTime是当前的系统时间,m_lastFrameTime是上一次的时间,他们相减就是daltatime,乘以速度后也可以理解为之前的步长

// 计算时间差float currentTime = m_time;float deltaTime = currentTime - m_lastFrameTime;m_lastFrameTime = currentTime;// 基于时间的运动计算float velocity = m_moveSpeed * deltaTime;if(m_moveUp)    mposition_Y += velocity;if(m_moveDown)  mposition_Y -= velocity;if(m_moveLeft)  mposition_X -= velocity;if(m_moveRight) mposition_X += velocity;// 边界限制(保持原有逻辑)float halfsize = 0.5f * mscarefactor;mposition_X = qBound(-1.0f + halfsize, mposition_X, 1.0f - halfsize);mposition_Y = qBound(-1.0f + halfsize, mposition_Y, 1.0f - halfsize);

三角行大小变换

angleDelta().y()>0就是滚轮向上滚动,<0就是向下滚动。mscarefactor是缩放比例,初始为1.0f就是他自己大小,向上滚动就加step步长

void myWediget::wheelEvent(QWheelEvent *event)
{float step =0.1f;//步长//滚轮向上if(event->angleDelta().y()>0){mscarefactor += step;}else{mscarefactor -= step;}//mscarefactor=qMax(0.1f,mscarefactor);//防止缩小为负数mscarefactor=qBound(0.1f,mscarefactor,1.5f);update();
}

这样三角形移动缩放事件就做好了,效果图如下:

视频晚点过审再传

http://www.dtcms.com/wzjs/550457.html

相关文章:

  • 提供佛山网站制作交互设计考研太难了
  • wordpress适用于任何网站吗网站服务器配置
  • 合同网站开发 设计 后期维护app软件做得比较好的公司
  • 网站右侧悬浮代码吴江网站建设公司
  • 云服务器 做网站wordpress图片间隙
  • 汕头网站设计浩森宇特上海莱布拉网站建设
  • 微信端网站开发模板河北建设工程信息网可登录中项网
  • 深圳建设网站制作游戏介绍网站模板
  • 哪家网站遴选做的比较好已备案域名30元购买平台
  • 建设局网站策划书海外服务器租用的价格
  • 网站的功能需求分析福州直播app开发公司
  • 怎样制作一个网站步骤江西网站备案
  • 沭阳网站建设托管wordpress tag找不到
  • 国内专业网站制作乡村建设的网站
  • 上海工作网站龙岗建网站
  • 网站开发排行榜深圳定制开发网站
  • 廊坊市网站推广vps服务器中的网站不显示图片
  • 瑞安网站建设中国有多少家做外贸网站设计的公司
  • 网站拒绝了您的访问网站后台 清理缓存
  • 当当网网站内容建设的分析wordpress列表自定义数据表
  • 网站建设基本步骤包括哪些汕头营销网络公司
  • 中国建设银行总行官方网站技术外包
  • 网站建设存在的具体问题wordpress 页面调用标签
  • 东莞网站推广公司黄页我有一个网站怎么做外贸
  • 用腾讯云做购物网站视频网站建设公司方维
  • 做算命网站南昌市建设工程质量监督网站
  • 专门做钣金的网站深圳企业信用网
  • wordpress 重新生成缩略图网站怎么做seo排名
  • win8风格网站 源码小程序开发费用一览表含价格
  • 宿州网站建设大连制作网站报价