我一直用C++编写一个用C++编写的游戏.今天在改变我的玩家角色类的工作方式时,我遇到了一个非常令人费解的问题.以下代码构成了我的逻辑的一部分,允许玩家发射子弹.控制变量b_canFire和b_shouldFire(我计划重命名这些以使其更有意义),在类的其他地方设置,以允许在用户按下键时执行此功能.
bool PlayerChar::DoFiring()
{
if(b_canFire && b_shouldFire)
{
Fire(box.x + 22, box.y); // This fires a bullet
b_canFire = false; // Does not work
b_shouldFire = false; // Does not work
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
当我使用调试器逐步执行此代码时,b_canFire和b_shouldFire的值不会被if语句中的赋值更改为false.但是,如果我将代码更改为以下内容:
bool PlayerChar::DoFiring()
{
if((b_canFire) && (b_shouldFire))
{
Fire(box.x + 22, box.y); // This fires a bullet
b_canFire = false; // Works
b_shouldFire = false; // Works
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
要么
bool PlayerChar::DoFiring()
{
if(b_canFire == true && b_shouldFire == true)
{
Fire(box.x + …
Run Code Online (Sandbox Code Playgroud) 我正在开发用于HTML5画布的基本光线投射引擎,作为学习练习/爱好项目,该引擎用于诸如Wolfenstein 3D和Doom之类的游戏。我已经到了要在画布上使用纹理贴图渲染墙壁的位置,经过大量的工作才能正确完成交点测试功能,该效果很好。
我正在校正“鱼缸” /“鱼眼”变形效果(由于与屏幕中心的夹角增加而导致到相交点的距离增加),但是边缘仍然有非常轻微但明显的弯曲变形屏幕的 可以在下图中看到(我画了红色的直线,使效果更明显):
谁能弄清楚这种失真的根源是什么?这不是一个大问题,但我无法找出原因,因此我显然缺少了一些东西,并且我敢肯定有人必须知道答案。我已经广泛搜索了该问题,并且在线上没有太多信息,但是我确实在论坛帖子中找到了以下代码段:
“使用恒定角度增量而不是地平线投影而引起的翘曲完全是另一回事-那是横向拉伸/聚束效果,尽管通常情况下,这只是勉强可以察觉的效果(对于合理的FOV,尽管您可以定义999999度FOV的事实应该敲响钟声),根本没有任何合理的方法可以补偿,除了正确的开始。使用固定的增量,角度是错误的,仅此而已。”
听起来好像是我遇到的相同失真,但是除了提示固定角度增量是问题的根源(它是弯曲失真,向屏幕边缘逐渐增加)以外,它并没有提供太多帮助或见解。 ,这似乎符合此建议)。我用来纠正失真的函数是:
function m_CorrectRayLengthDistortion( dist, angleFromCentre ){
return dist * Math.cos( MOD_Maths.degToRad( angleFromCentre ) );
}
Run Code Online (Sandbox Code Playgroud)
MOD_Maths是一个实用程序模块(在这种情况下,用于将角度从度转换为弧度,以便余弦函数可以使用它)。
非常感谢您提供任何帮助,并且如果有人回答此问题,则由于在线上缺少有关该主题的信息,因此希望将来对遇到此问题的任何人提供指导。
谢谢 :)