所以我目前正在开发OpenGL中的一些FPS游戏编程(JOGL,更具体地说)只是为了好玩,我想知道创建类似FPS的摄像机的推荐方法是什么?
目前我基本上有一个玩家面向方向的矢量,按下"w"或前进键后,它将被添加到当前玩家位置.该向量的负数当然用于"s"或后向键.对于"a",left和"d",右边我使用方向向量的法线.(我知道这会让玩家飞起来,但目前这不是问题)
移动鼠标后,将使用三角学和矩阵旋转方向向量.当然,所有矢量都被标准化以便于速度控制.
这是常见的和/或好的方式还是有更简单/更好的方法?
这是问题所在:问题#78
这真让我抓狂.我一直工作在这几个小时,现在我已经能够减少寻找的方式堆叠数量的复杂n硬币O(n/2),但即使有这些改进,并从开始n的这p(n)接近一百万,我在一分钟之内仍然无法得到答案.实际上根本没有.
有什么提示可以帮助我吗?
请记住,我不想要一个完整的解决方案,这里不应该发布任何功能性解决方案,以免破坏其他人的问题.这就是我没有包含任何代码的原因.
我正在编写一个简单的游戏,并希望通过Java Graphics + Swing API显示它.当然,感觉有点慢,所以我测量了重画需要多长时间,大约是32毫秒.然后我读到了加速Java图形并使用了这里描述的方法:Space Invaders
然而,不知何故,这甚至更慢.现在需要大约98毫秒才能重绘.这是为什么?
请注意,我知道像LWGL和JOGL这样的库,但我不想使用完整的OpenGL包装器来制作这样一个图形简单的游戏.
使用C/C++或Python编程时,我有时会根据指定的键使用包含函数引用的字典.但是,我真的不知道如何在Java中使用相同的 - 或者至少是相似的 - 行为,从而允许我使用动态密钥功能(或Java方法中的方法)关联.
另外,我确实找到了有人建议的HashMap技术,但这是最优秀和最优雅的方式吗?我的意思是,为我想要使用的每个方法创建一个新类似乎很多.
我真的很感激每一个输入.
在我目前的项目中,我偶然发现了一个奇怪的现象,即嵌套的for循环只执行一次内循环然后停止.即使仔细检查了所涉及的所有变量,外部for循环仍然没有正当理由终止.使这个结构与我程序中包含的其他for循环不同的唯一因素是,计数器变量作为参数传递给包含循环的函数,并且从不复制到任何地方.
所以我决定测试是否可以重现问题:
#include <stdio.h>
void someFunction(int x, int y, int width, int length)
{
int endX = x+width;
int endY = y+length;
printf("x will not exceed: %i\n", endX);
printf("y will not exceed: %i\n", endY);
for(; x < endX; x++)
{
for(; y < endY; y++)
{
printf("(%i, %i)\n", x, y);
}
}
}
int main(int argc, const char *argv[])
{
someFunction(1, 1, 5, 5);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但是,在执行时,应用程序的输出与直观的预期不同:
x will not exceed: 6
y will not exceed: 6
(1, 1) …Run Code Online (Sandbox Code Playgroud) 所以这是人们可能做的最简单的事情之一:
Random rng = new Random();
int a = rng.nextInt(10);
int b = rng.nextInt(10);
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好.但我们希望避免使用相等的a和b,所以我们自然会这样做:
Random rng = new Random();
int a = rng.nextInt(10);
int b = rng.nextInt(10);
while (a == b){
b = rng.nextInt(10);
}
Run Code Online (Sandbox Code Playgroud)
然而 - 对我非常非常惊讶 - while循环永远不会退出.决不.
我理解,从理论上讲,随机数字可以包含一个数字的无限序列.但是我已经让这段代码运行了10分钟而且它还没有退出循环.
怎么了?我在最新的Linux Mint上运行JDK 6 Update 16.