当前位置:编程学习 > wap >>

分享我用Qt写的反应测试游戏源码

--------------------编程问答-------------------- 。。怎么样? --------------------编程问答-------------------- 深夜看到此分享很开心!我学习一下!
qAbs() 和 abs() 你选择了abs() 
虽然不是什么致命错误,但是我还是想提一下,不同API层级的跳跃调用,会带来不必要的消耗开销,即使仅仅一条语句仅被调用一次,微乎其微不会造成多大影响,那也是不必要的…… --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- 也在学习QT,学习下! --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- 不错 不错。。 学习,。 --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答--------------------
引用 2 楼  的回复:
深夜看到此分享很开心!我学习一下!
qAbs() 和 abs() 你选择了abs() 
虽然不是什么致命错误,但是我还是想提一下,不同API层级的跳跃调用,会带来不必要的消耗开销,即使仅仅一条语句仅被调用一次,微乎其微不会造成多大影响,那也是不必要的……

学习了..习惯用stl的标准了 --------------------编程问答--------------------
引用 2 楼  的回复:
深夜看到此分享很开心!我学习一下!
qAbs() 和 abs() 你选择了abs() 
虽然不是什么致命错误,但是我还是想提一下,不同API层级的跳跃调用,会带来不必要的消耗开销,即使仅仅一条语句仅被调用一次,微乎其微不会造成多大影响,那也是不必要的……

还是小茜姐厉害啊:) --------------------编程问答-------------------- 虽然不是什么致命错误,但是我还是想提一下,不同API层级的跳跃调用,会带来不必要的消耗开销,即使仅仅一条语句仅被调用一次,微乎其微不会造成多大影响,那也是不必要的…… --------------------编程问答-------------------- 谢谢分享 --------------------编程问答-------------------- 感谢分享 --------------------编程问答-------------------- 帅呆了。 --------------------编程问答-------------------- --------------------编程问答-------------------- 谢谢分享 --------------------编程问答-------------------- 学习了,谢谢楼主。 --------------------编程问答-------------------- 好久没来了,加油哈~ --------------------编程问答-------------------- 不错  学习了 --------------------编程问答-------------------- --------------------编程问答-------------------- 不错!!! --------------------编程问答-------------------- 不知道qt行不行 --------------------编程问答-------------------- --------------------编程问答-------------------- 感谢楼主分享,学习下! --------------------编程问答-------------------- 感谢楼主分享,学习下! --------------------编程问答-------------------- 搂住好厉害阿 --------------------编程问答-------------------- 不错 值得学习 --------------------编程问答-------------------- 我也很喜欢cs,支持楼主一把! --------------------编程问答-------------------- 期待LZ再次分享啊  --------------------编程问答--------------------
引用 2 楼  的回复:
深夜看到此分享很开心!我学习一下!
qAbs() 和 abs() 你选择了abs() 
虽然不是什么致命错误,但是我还是想提一下,不同API层级的跳跃调用,会带来不必要的消耗开销,即使仅仅一条语句仅被调用一次,微乎其微不会造成多大影响,那也是不必要的……

严重的不同意
类似这些算术运算符,本身就是跨平台的,没必要什么都用qt给封装好的.
QT本身只是个还不错的界面库,而不是底层库,不要越俎代庖.
能用标准库的东西 尽量用标准库 --------------------编程问答--------------------
引用 38 楼  的回复:
引用 2 楼  的回复:

深夜看到此分享很开心!我学习一下!
qAbs() 和 abs() 你选择了abs()
虽然不是什么致命错误,但是我还是想提一下,不同API层级的跳跃调用,会带来不必要的消耗开销,即使仅仅一条语句仅被调用一次,微乎其微不会造成多大影响,那也是不必要的……

严重的不同意
类似这些算术运算符,本身就是跨平台的,没必要什么都用qt给封装好的.
QT本身只是个……


你反驳我的观点的理由是:能用标准库的东西 尽量用标准库??  
有点牵强了  --------------------编程问答--------------------
引用 38 楼  的回复:
引用 2 楼  的回复:

深夜看到此分享很开心!我学习一下!
qAbs() 和 abs() 你选择了abs()
虽然不是什么致命错误,但是我还是想提一下,不同API层级的跳跃调用,会带来不必要的消耗开销,即使仅仅一条语句仅被调用一次,微乎其微不会造成多大影响,那也是不必要的……

严重的不同意
类似这些算术运算符,本身就是跨平台的,没必要什么都用qt给封装好的.
QT本身只是个……

或者你能解释一下Qt封装qAbs() 和 qMath的方法的意义是什么么?按你的理论一无是处了 --------------------编程问答-------------------- 值得学习支持分享。 --------------------编程问答--------------------
引用 40 楼  的回复:
引用 38 楼  的回复:

引用 2 楼  的回复:

深夜看到此分享很开心!我学习一下!
qAbs() 和 abs() 你选择了abs()
虽然不是什么致命错误,但是我还是想提一下,不同API层级的跳跃调用,会带来不必要的消耗开销,即使仅仅一条语句仅被调用一次,微乎其微不会造成多大影响,那也是不必要的……

严重的不同意
类似这些算术运算符,本身就是跨平台的,没必要什么都用……

我不觉得我的理由牵强,相反,我觉得你说的不同API层级的跳跃调用,会带来不必要的消耗开销这才是牵强.
qAbs和qMath我觉得是个过渡设计的接口,在我看来就是一无是处的 --------------------编程问答-------------------- 上面打错了,是过度设计
qAbs就是个重复制造的轮子 --------------------编程问答--------------------
引用 42 楼  的回复:
引用 40 楼  的回复:

引用 38 楼  的回复:

引用 2 楼  的回复:

深夜看到此分享很开心!我学习一下!
qAbs() 和 abs() 你选择了abs()
虽然不是什么致命错误,但是我还是想提一下,不同API层级的跳跃调用,会带来不必要的消耗开销,即使仅仅一条语句仅被调用一次,微乎其微不会造成多大影响,那也是不必要的……

严重的不同意
类似这些算术运算符……


好吧,我表示无语 --------------------编程问答--------------------
引用 43 楼  的回复:
上面打错了,是过度设计
qAbs就是个重复制造的轮子


那你觉不觉得QStrig , QChar 等都很一无是处呢? --------------------编程问答-------------------- 那你觉不觉得QString , QChar 等都很一无是处呢? --------------------编程问答-------------------- 我觉得,Qt低层也C++标准库,很多地方反而是调用Qt的东西多了一次跳转,QString,QChar确实对于移植性有用,而qAbs之类,我也觉得是为了Qt接口统一和完整而设计的。
错了请大家指出。 --------------------编程问答--------------------
引用 47 楼  的回复:
我觉得,Qt低层也C++标准库,很多地方反而是调用Qt的东西多了一次跳转,QString,QChar确实对于移植性有用,而qAbs之类,我也觉得是为了Qt接口统一和完整而设计的。
错了请大家指出。


我前面提到的不同API层级的跳跃调用,是要看qAbs的上下文,而不是看封装层数,Qt API明显是再封装的,这个没有什么好争辩。
我们常用计算机的硬件配置比智能终端嵌入式设备要高很多,作嵌入式开发,要求必须对程序执行效率,系统开销作严格优化,才能提高体验满意度和系统稳定性。 --------------------编程问答-------------------- QString,在qt内部有大量的使用,导致很多时候不得不用.
当然它确实也有它方便的一面,这就是它存在的价值.
但是,真的必须用QString,QChar不可吗?
回到qAbs上,情况和QString不同,QString是个类型,而qAbs只是个单纯的API. --------------------编程问答--------------------
引用 49 楼  的回复:
QString,在qt内部有大量的使用,导致很多时候不得不用.
当然它确实也有它方便的一面,这就是它存在的价值.
但是,真的必须用QString,QChar不可吗?
回到qAbs上,情况和QString不同,QString是个类型,而qAbs只是个单纯的API.


当然不是非用不可。就是有人愿意用printf打印Log就是不用qDebug。
我一直在强调的是执行效率。  --------------------编程问答-------------------- OK,那么来说执行效率的问题.
再具体环境中,abs和qAbs哪个性能好我不敢打包票,一般的环境中它们因该是一个数量级的.
我认可函数调用的开销,并且在绝大多数的情况下这并不是问题,影响程序性能最大的地方是设计!!! --------------------编程问答-------------------- 我是来看2师兄的 --------------------编程问答-------------------- 这个是什么板块 我怎么才一个裤擦 --------------------编程问答-------------------- 推荐miniGUI --------------------编程问答-------------------- --------------------编程问答--------------------
引用 51 楼  的回复:
OK,那么来说执行效率的问题.
再具体环境中,abs和qAbs哪个性能好我不敢打包票,一般的环境中它们因该是一个数量级的.
我认可函数调用的开销,并且在绝大多数的情况下这并不是问题,影响程序性能最大的地方是设计!!!


这也是设计中的细节部分。
请注意我说的程序上下文,我相信Qt程序里大多数还都是使Qt API的,单拎出一行代码,谈效率有什么意义? --------------------编程问答--------------------
引用 56 楼  的回复:
引用 51 楼  的回复:

OK,那么来说执行效率的问题.
再具体环境中,abs和qAbs哪个性能好我不敢打包票,一般的环境中它们因该是一个数量级的.
我认可函数调用的开销,并且在绝大多数的情况下这并不是问题,影响程序性能最大的地方是设计!!!


这也是设计中的细节部分。
请注意我说的程序上下文,我相信Qt程序里大多数还都是使Qt API的,单拎出一行代码,谈效率有什么意义?……


下图是qt 4.8.0 qAbs的源码:


下图是vc9 stl abs的源码:



qt使用模板来实现,没有单纯封装abs,在编译器优化选项一样的情况下,效率没有差别,qAbs和abs最大的差别仅仅是前面多了一个'Q',至于程序的写法就仁者见仁了,谁也不能保证在使用Qt的项目里能完全不使用stl,Qt的目标也不是替代stl,所以说写abs也不为过。 --------------------编程问答-------------------- google编码风格里面一直强调一个东西就是程序风格统一性,有时候省去一点点优势也要保持程序风格统一性,所以我认为,如果QT已经封装好的东西,尽量使用它,保持风格统一性很重要。 不过这只是我个人意见。。 --------------------编程问答--------------------
引用 58 楼  的回复:
google编码风格里面一直强调一个东西就是程序风格统一性,有时候省去一点点优势也要保持程序风格统一性,所以我认为,如果QT已经封装好的东西,尽量使用它,保持风格统一性很重要。 不过这只是我个人意见。。


如果为了风格统一,在代码里面全部用qint32,qfloat之类的个人觉得还是比较蛋疼的。 --------------------编程问答--------------------
引用 57 楼  的回复:
引用 56 楼  的回复:

引用 51 楼  的回复:

OK,那么来说执行效率的问题.
再具体环境中,abs和qAbs哪个性能好我不敢打包票,一般的环境中它们因该是一个数量级的.
我认可函数调用的开销,并且在绝大多数的情况下这并不是问题,影响程序性能最大的地方是设计!!!


这也是设计中的细节部分。
请注意我说的程序上下文,我相信Qt程序里大多数还都是使Qt API的,……


你说:谁也不能保证在使用Qt的项目里能完全不使用stl。
没错。若项目里本身就使用stl,效率一致。但是不使用stl的情况就太多了。综合考虑,用qAbs是最好的。无论是可移植性、执行效率、还是代码整齐度。 --------------------编程问答-------------------- qt是很方便
但引入第三方库有时更方便
比如,xml我一般使用tinyXML
sqlite一般使用cppSqlite
还有curl,json 等库。
这些代码在windows,linux,mac,ios不用修改都可以直接运行, 所以就不用qt本身的类了。
什么东西都是过犹不及,所以设计c++的时候兼容c,java和c#语法看起来和c++也相似。没必要为了独立性就完全与其他人不同,能配合团队顺利完成项目就是最合适的。
综合上来讲,QT就是单纯做个界面,其他功能都由标准c/c++来完成。这样,可以很方便地切换到gtk,xcode,wxpython等平台。类似wtl,atl,mfc,bcb也通用。
--------------------编程问答--------------------
引用 61 楼  的回复:
qt是很方便
但引入第三方库有时更方便
比如,xml我一般使用tinyXML
sqlite一般使用cppSqlite
还有curl,json 等库。
这些代码在windows,linux,mac,ios不用修改都可以直接运行, 所以就不用qt本身的类了。
什么东西都是过犹不及,所以设计c++的时候兼容c,java和c#语法看起来和c++也相似。没必要为了独立性就完全与其他人不同,能配……

十分赞同,这才是正真的良好的独立设计,带来的高移植性.
过分的依赖和迷信QT,过犹不及 --------------------编程问答--------------------
引用 60 楼  的回复:
综合考虑,用qAbs是最好的。无论是可移植性、执行效率、还是代码整齐度。

我怎么都看不出qAbs在可移植性,执行效率上是最好的.代码整齐度每个人见解不一样,我还是持保留意见.

--------------------编程问答-------------------- 争论好激烈。
不过我个人认为,像这种情况,如果说编译器正常优化的话,相同平台上生成的机器码效率是一样的。
但是对于阅读性,和方便移植,因为你用了Qt,主要写C++代码,因此,使用Qt提供的是比较好的。
至于c标准和qt标准,c规定的只是语言标准,而Qt则内含了跨平台的一些准则。 --------------------编程问答-------------------- --------------------编程问答-------------------- 作为此程序的开发者。我觉得。QT这样做只是为了保持代码风格的同一行。在编译的时候其实QT会优化掉这些繁琐的调用开销。我们对这些额外的调用开销不用太在意。因为当你编译完成的时候其实编译器已经帮你做了优化了。所以只能说是代码的风格的问题。并不能说明会带来说明性能上的损失。反正都是一个标准了。兼容性没什么大的问题 --------------------编程问答-------------------- 本人只能说是来学习的 --------------------编程问答-------------------- 你用QT编程,必然会用到QT带的类,比如QString,我相信,QString能跨的平台QAbs一样可以跨,qAbs不能跨的平台,我相信QString也很难跨,所以  LS说的 这样,可以很方便地切换到gtk,xcode,wxpython等平台。类似wtl,atl,mfc,bcb也通用。 如果QT本身不支持,你用QT去编程肯定也是不支持的。个人见解。还是从风格统一性我支持用QT封装好的。代码风格统一性很重要,你写的代码是给人读得,不是给机器读得,机器读你的代码只需要几秒钟,但是人读你的代码可能要几天时间。你不能要求别人读你的代码又要懂QT还必须要懂stl。 --------------------编程问答-------------------- --------------------编程问答-------------------- 作了下测试
abs花费时间:2 微妙
qAbs花费时间:7 微妙

测试平台:ARM 9下使用QT4.6测试

感谢LZ的抛砖引玉。代码写得很不错。
看了大家的回复,偶很倾向于编程中要保持代码的风格统一。
对于性能了,这个要看情况,在嵌入式中有时候1微妙也是非常重要的这也是事实。所以个人很认同 yiyaaixuexi 的观点。

引用 2 楼  的回复:
深夜看到此分享很开心!我学习一下!
qAbs() 和 abs() 你选择了abs() 
虽然不是什么致命错误,但是我还是想提一下,不同API层级的跳跃调用,会带来不必要的消耗开销,即使仅仅一条语句仅被调用一次,微乎其微不会造成多大影响,那也是不必要的……



我举个例子把有次在QT中使用sprintf花费的时间要比使用QT提供的函数要花费的时间要长。所以性能方面还要看各自的封装。
但我对不同API层级的跳跃调用,会带来不必要的消耗开销。这句话很感兴趣。不知道大家能不能解释下


--------------------编程问答-------------------- 用标准库里面的东西, 不会影响代码一致性,一般也不需要考虑代码效率,绝大多数情况满足你的需求。QT是个库,不是个编译器,楼上很多搞混了,我用VC一样用QT库 --------------------编程问答-------------------- 我相信应用QT不是为了追求性能的极限,更多的是追求代码的夸平台性,感觉楼上有点跑题了,如果想追求性能极限,那用汇编好了! --------------------编程问答-------------------- 我只表述一个观点,你的代码是给人看的,你不能强制要求看你代码的人必须要懂QT又要懂STL。你写出的代码应该尽量让人看的懂,而不是加强看代码人的工作量,我看你的代码还必须先去把stl的函数给全学一遍在来看。 --------------------编程问答-------------------- stl是C++的基础,学STL的函数需要时间,学QT一样需要时间。另外标准库本身的价值之一就是跨平台,怀疑标准库跨平台能力的人,能举个例子QT能跨标准库不能跨的平台? --------------------编程问答-------------------- 纠正下,STL是C++的组成部分 --------------------编程问答-------------------- 有标准库最好用标准库,有C++的地方就有标准库,如果有一天QT库淘汰了,标准库还健在。比起你说的abs问题,个人认为,原代码的调用没有任何多余开销,都是基础类型的比较,何来API层级跳跃调用的开销?
另外一般情况下,越高级抽象的封装,效率较之会偏低,QT的封装效率不一定会是最优(但这些并不是此帖的主题☻)

从个人观点上说:楼主写出的这些代码,很不错,希望能再接再励,下面指出一些存在的缺陷:

从软件工程上说:
    楼主的代码把游戏逻辑耦合在UI中。
    楼主代码各种写死的数字和字符串,将是未来维护的麻烦处之一,例如你要对游戏升级增加关卡时,调整游戏的数值时等,代码就要各种改,而且改起来会很蛋痛。注释等还可以更有效。

    一些delete对象没有赋NULL,指针使用时,没有判断,因为释放资源后,还有可能被调用,这些都是隐患。
    载入资源和释放资源时,函数并没有对错误进行报告以及处理,不够严谨。
    给用户使用时,该程序不能很好以及快速的定位错误之处。
    C++中有智能指针,可以省去你维护指针的工作,让代码更简洁。

从编码技巧上说:
    能不new的东西尽量不要new,在堆上分配东西需要更大开销,并且如果你的程序为多线程的话,因为同步的关系,new多了效率必定下降。
    ...

引用 39 楼  的回复:
引用 38 楼  的回复:

引用 2 楼  的回复:

深夜看到此分享很开心!我学习一下!
qAbs() 和 abs() 你选择了abs()
虽然不是什么致命错误,但是我还是想提一下,不同API层级的跳跃调用,会带来不必要的消耗开销,即使仅仅一条语句仅被调用一次,微乎其微不会造成多大影响,那也是不必要的……

严重的不同意
类似这些算术运算符,本身就是跨平台的,没必要什么都用……
--------------------编程问答-------------------- 膜拜楼主 --------------------编程问答-------------------- 刚接触QT,来学习了~ --------------------编程问答-------------------- Qt的qAbs支持Qt内部的重载了操作符的类型, stl的就不可以。 --------------------编程问答-------------------- 学习了
引用 76 楼  的回复:
有标准库最好用标准库,有C++的地方就有标准库,如果有一天QT库淘汰了,标准库还健在。比起你说的abs问题,个人认为,原代码的调用没有任何多余开销,都是基础类型的比较,何来API层级跳跃调用的开销?
另外一般情况下,越高级抽象的封装,效率较之会偏低,QT的封装效率不一定会是最优(但这些并不是此帖的主题☻)

从个人观点上说:楼主写出的这些代码,很不错,希望能再接再励,下面指出一些存在的缺陷……
--------------------编程问答-------------------- --------------------编程问答-------------------- 其实你应该选择用QT的Graphicsview框架来做 --------------------编程问答-------------------- hmm 关于那个qchar qfloat什么的,应该跟opengl是一样的,里面也有很多GLfloat之类的。我的老师给的解释是,因为是跨平台的,没有人能保证你这个系统上的float和另一个系统上的float是完全一样的,有可能占用的字节数就不一样。Opengl 就用GLfloat保证了你的变量不受这些因数干扰(具体怎么实现的,不懂。。。)
所以我感觉用QT里面的这些变量也是一个道理,保证了在跨平台的时候变量的统一性,减少潜在问题。
这也只是老师告诉我的。。。也许有不同见解。 --------------------编程问答--------------------
学习中!!!!!! --------------------编程问答-------------------- 都是强人 --------------------编程问答-------------------- 出于SDK考虑,逻辑业务的东西,还是用c或者c++标准比较好一点。
补充:移动开发 ,  Qt
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,