找回密码
 立即注册
收起左侧

俄罗斯方块

7
回复
6092
查看
[复制链接]
累计签到:7 天
连续签到:1 天
来源: 2014-1-10 13:24:24 显示全部楼层 |阅读模式

马上注册,查看详细内容!注册请先查看:注册须知

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
请教大家一个问题
我在学习Qt,编写俄罗斯方面这个历程
为什么会保留上一次的旋转变换呢

具体来说,比如我当前这个图像做了一次旋转90度操作,然后下一个图像出现的时候会默认也是旋转了90度的



这个要怎么解决。我按照教程上写的,分别进行了
oldTransform = transform();


setTransform(oldTransform);操作


回复

使用道具 举报

累计签到:7 天
连续签到:1 天
2014-1-10 14:37:41 显示全部楼层
我qDebug()查看了下oldTransform的值,确实是一个单位矩阵(1 0 0 0 1 0 0 0 1)当前这个图像做了一次旋转90度操作,然后下一个图像出现的时候会默认也是旋转了90度的?
回复 支持 反对

使用道具 举报

累计签到:894 天
连续签到:1 天
2014-1-10 14:50:46 显示全部楼层
是不是把oldTransform作为全局的了,所以以后的每一个都会产生90度的旋转了?我没有做过这个。
回复 支持 反对

使用道具 举报

累计签到:7 天
连续签到:1 天
2014-1-10 15:17:17 显示全部楼层
Syylc120317 发表于 2014-1-10 14:50
是不是把oldTransform作为全局的了,所以以后的每一个都会产生90度的旋转了?我没有做过这个。 ...

没有,这个值是一个成员变量,没有被static修饰
回复 支持 反对

使用道具 举报

累计签到:894 天
连续签到:1 天
2014-1-10 15:43:45 显示全部楼层
eden 发表于 2014-1-10 15:17
没有,这个值是一个成员变量,没有被static修饰

setTransform这个函数应该是设置的全局的吧?
回复 支持 反对

使用道具 举报

累计签到:7 天
连续签到:1 天
2014-1-10 16:08:05 显示全部楼层
我看帮助文档,没有提到这事设置全局啊?我是对单个图像项进行旋转,因为Qt5.2不再有rotate()函数,我就找到了setsetTransform() 函数。如果要对单个图形项进行旋转,应该怎么操作呢?
回复 支持 反对

使用道具 举报

累计签到:7 天
连续签到:1 天
2014-1-10 18:48:18 显示全部楼层
问题我解决了,setTransform(oldTransform); 我去掉了,改成setRotation(0)
回复 支持 反对

使用道具 举报

累计签到:11 天
连续签到:1 天
2017-1-15 22:50:42 显示全部楼层
本帖最后由 lwk 于 2017-1-15 23:38 编辑

       setTransform()是QTransform的函数,是设置当前变换的含义,rotate()也是QTransform的函数,是将坐标旋转变换;而setRotation()是QGraphicsItem的函数,是将当前图形项旋转。楼主应该是将坐标旋转变换rotate()和图形项旋转setRotation()弄混了。
      如果用rotate(),旋转变换代码为:
      case Qt::Key_Up:
             setTransform(transform().rotate(90));     
             }
             if(isColliding()){
                setTransform(transform().rotate(-90));        
             }      
            [//获取变换前的变换,并旋转90度后替换原来的变换,在需要创建新图形项时setTransform(oldTransform)恢复坐标系统。]
      
       如果用setRetation(),旋转变换代码为:
       case Qt::Key_Up:
               i+=1;
               setRotation(90*i);   
               if(isColliding()){
                    i-=1;
                    setRotation(90*i));
                }
       [//设置全局变量i=0,不然不能连续旋转90度(因为每次按Up键时坐标系统不旋转(
这里就可以去掉全局变量oldTransform了),只将最初的图形项旋转特定角度,而这个角度是只与坐标系统相干的,跟前一次旋转的角度无关),最后只需要创建新图形项的地方设i=0,setRotation(0)。]
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了