我正在使用C进入CMAKE,实际上我正在创建两个非常小的静态库.
我的目标是:
-lnameoflib,这是一个编译器标志.好.我准备好了我的CMakeLists.txt,它实际上将*.a文件复制到/ usr/local/lib中.但是,为了能够在程序中使用它们,我还需要将它们的头文件复制到/ usr/include中,然后我可以轻松地将它们包含在内/usr/local/lib.这就是我现在理解的方式.我的问题是 - 如何使用CMAKE将头文件复制到/ usr/include文件夹中的正确方法是什么?我想在/usr/local/include执行时自动复制它们,比如*.a文件.
对于这两个库,我有一个熟悉的CMakeLists.txt:
project(programming-network)
add_library(programming-network STATIC
send_string.c
recv_line.c
)
INSTALL(TARGETS programming-network
DESTINATION "lib"
)
Run Code Online (Sandbox Code Playgroud) 我正在制作游戏,我希望有一个带有背景图像的主菜单.
但是,我觉得这个方法Graphics.DrawImage()真的很慢.我做了一些测量.我们假设MenuBackground是我的资源图像,分辨率为800 x 1200像素.我将它绘制到另一个800 x 1200位图上(我首先将所有内容渲染到缓冲区位图,然后我将其缩放并最终将其绘制到屏幕上 - 这就是我如何处理多个玩家分辨率的可能性.但它不应该影响它以任何方式,见下一段).
所以我测量了以下代码:
Stopwatch SW = new Stopwatch();
SW.Start();
// First let's render background image into original-sized bitmap:
OriginalRenderGraphics.DrawImage(Properties.Resources.MenuBackground,
new Rectangle(0, 0, Globals.OriginalScreenWidth, Globals.OriginalScreenHeight));
SW.Stop();
System.Windows.Forms.MessageBox.Show(SW.ElapsedMilliseconds + " milliseconds");
Run Code Online (Sandbox Code Playgroud)
结果让我感到惊讶 - Stopwatch两者之间的措施40 - 50 milliseconds.并且因为背景图像不是唯一要绘制的东西,所以整个菜单需要大约100毫秒才能显示,这意味着可观察到的延迟.
我试图将它绘制到Paint事件给出的Graphics对象,但结果是30 - 40 milliseconds- 没有太大的改变.
那么,这是否意味着,这Graphics.DrawImage()对于绘制更大的图像是不可用的?如果是这样,我该怎么做才能提高游戏性能?
我现在正在Linux上学习C语言,我遇到了一些奇怪的情况.
据我所知,标准C的char数据类型是ASCII,1字节(8位).它应该意味着它只能包含ASCII字符.
在我使用的程序中char input[],它由getchar像这个伪代码的函数填充:
char input[20];
int z, i;
for(i = 0; i < 20; i++)
{
z = getchar();
input[i] = z;
}
Run Code Online (Sandbox Code Playgroud)
奇怪的是它不仅适用于ASCII字符,而且适用于我想象的任何字符,例如@&@{??ž?¶'`[?????¶?^€~[?^ø{&}?ž输入.
我的问题是 - 怎么可能?它似乎是C中许多美丽的例外之一,但我真的很感激解释.这是操作系统,编译器,隐藏语言的附加超级功能吗?
谢谢.
我一直对我的简单游戏需要运行感兴趣所以我使用了Netbeans Java Profiler(Java 1.7),我可以在"Hot Spots"选项卡中看到"Self Time"和"Invocations"列.
例如,我的render方法有:
自拍时间:1025毫秒
调用:2311
所以,如果我理解得很好,它实际上是否意味着所有渲染方法调用的总时间一起给出了1025毫秒,一个方法执行的平均时间是1025/2311 = 0.44毫秒?
如果是这样,我可以强制IDE显示平均时间而不是总时间吗?
我在过去几年里一直在Blender做一些3D图形,我也尝试制作3D游戏(在Unity 3D中).我也玩电脑游戏,我很惊讶一件事:
与游戏渲染器相比,为什么3D应用程序的渲染器如此"慢"?
这不是一个令人反感的问题.我只是好奇.例如,我可以无缝地玩Crysis或NFS:The Run,但是如果我在Blender中创建了一个类似的场景,我相信一帧的渲染将永远.
我在互联网上发现了一些信息(例如"因为游戏渲染器使用了很多假货和黑客"),但我不是图形程序员,我真的很感谢专家的回答.
我今天正在学习缓冲区溢出,我遇到了许多易受攻击的程序示例.令我好奇的是,如果有任何理由使用这样的程序参数:
int main(int argc, char *argv[])
{
char argument_buffer[100];
strcpy(argument_buffer, argv[1]);
if(strcmp(argument_buffer, "testArg") == 0)
{
printf("Hello!\n");
}
// ...
}
Run Code Online (Sandbox Code Playgroud)
而不是简单地:
int main(int argc, char *argv[])
{
if(strcmp(argv[1], "testArg") == 0)
{
printf("Hello!\n");
}
}
Run Code Online (Sandbox Code Playgroud)
请注意我知道strcpy等等的缺点- 这只是一个例子.我的问题是 - 是否有任何真正的理由使用临时缓冲区来存储来自argv的参数?我假设没有,但我很好奇,为什么它出现在溢出的例子中,而在现实中它从未被使用过?也许是因为纯理论.
我现在正在工作,vector我有一个有趣的情况,我需要帮助.
我有一个矢量矢量,定义如下:
vector< vector<int> > list;
Run Code Online (Sandbox Code Playgroud)
我正在使用标准输入加载数字cin >> helpVar;,每当我得到0(零)时我想创建新的整数向量,这将被放入这个"主容器" list.
当然我不知道零号会出现多少次 - 这是用户所依赖的.所以我也不知道,程序会添加多少向量.
但我不知道,究竟是怎么做到的.如果我使用C#或其他类似垃圾收集的语言,我可能会写:
if(helpVar == 0)
{
list.push_back(new vector<int>);
}
Run Code Online (Sandbox Code Playgroud)
但是这种结构在C++中不起作用.
所以我的问题是,我应该如何应对这种情况才能使其发挥作用?或者我只是想错了,它应该以另一种方式完成?
谢谢你的回答.