假设我有一个Qt应用程序,我在两个不同的命名空间中有两个具有相同名称的类:
namespace namespace1
{
class SomeClass;
}
namespace namespace2
{
class SomeClass;
}
Run Code Online (Sandbox Code Playgroud)
我根据它有一个项目目录结构:
-->src/
-->namespace1/
-->someclass.cpp
-->namespace2/
-->someclass.cpp
Run Code Online (Sandbox Code Playgroud)
当我使用qmake编译应用程序时,它将所有对象(.o)文件放在一个目录中 - 所以它首先创建someclass.o文件然后用第二个someclass.o重写它- 这是一个名称冲突所以它很糟糕.
为什么qmake没有考虑源文件的目录结构?为什么它不会创建像namespace1_someclass.o和namespace2_someclass.o这样的东西?
是的,我可以将我的类放到一个目录中,并将它们命名为namespace1_someclass.cpp和namespace2_someclass.cpp,并且不会发生名称冲突,但这会在查看Qt Creator中项目资源管理器中的源文件时造成很少的不便,因为当有在项目中有很多源文件,它的可读性远远低于我可以展开或折叠的目录结构.
另一个极端是拥有如下目录结构:
-->src/
-->namespace1/
-->namespace1_someclass.cpp
-->namespace2/
-->namespace2_someclass.cpp
Run Code Online (Sandbox Code Playgroud)
它解决了名称冲突,但它冗余地复制了命名空间名称 - 因此再次不太可读.
为什么qmake至少没有根据源文件将目标文件放到目录结构中的选项?Qt的创造者不知道这是一个重要的特征吗?
还有一件事 - 你可以建议我使用cmake工具而不是qmake,但是我发现使用cmake 要比qmake 困难得多,而qmake到目前为止它的工作非常出色 - 除了对象文件的放置.
我只是想做一些移动对象的简单动画(例如在C++中使用OpenGL) - 让我们说从左到右的方形的简单水平移动.
在OpenGL中,我可以使用"双缓冲"的方法,让我们假设一个用户(运行我与动画应用程序)打开了"垂直同步" - 这样我就可以调用一些功能每当显示器刷新本身时间(我能做到例如,使用Qt工具包及其功能"swapBuffers").
因此,我认为,我能够实现的"最流畅"的动画是"每次监视器刷新时移动方块例如1个像素(可以是其他值)",因此在每个"帧"处,方块进一步为1个像素 - "我已经测试了这一点,并且它的工作顺利进行".
但是当我想为"游戏逻辑"(向右移动1个像素的方块)和"动画"(在屏幕上显示正方形的当前位置)的"单独"线程时出现问题.因为我们说的游戏逻辑线程是一个while循环,我1个像素移动广场,然后在"睡眠"线程一段时间,例如10毫秒,而我的显示器刷新例如每16毫秒 - 广场的运动"将不会100%平滑",因为有时显示器将刷新两次,其中方块仅移动1个像素而不是2个像素(因为监视器和游戏逻辑线程有两个"不同"频率) - 以及移动会看起来"有点生涩".
所以,从逻辑上讲,我可以使用第一个超顺畅的方法,但是,它不能用于例如"多人游戏"(例如"服务器 - 客户端")游戏 - 因为不同的计算机具有不同的监视频率(所以我应该使用不同的游戏逻辑(在服务器上)和动画(在客户端上)的线程).
所以我的问题是: 是否有一些方法,使用不同的线程进行游戏逻辑和动画,它们会对某些移动物体进行"100%平滑"动画,如果存在,请在此处描述,或者当我刚才有一些"更复杂"时渲染的场景",我只是不会看到我现在看到的"小生涩的动作",当我横向移动一些简单的方形时,我深深地专注于它:)?
我在Visual Studio(2012)中创建了一个空的C++项目,在"属性"窗口中,当我在"解决方案资源管理器"中选择了某个文件时,我看不到"复制到输出目录"选项.为什么?