Algorithm 博弈的运动算法
我目前正在为COD4中的地图开发一个脚本。我认为这种语言非常简单,我把它标记为语言不可知论,因为问题在于这种情况下的算法 有一个房间宽960个单元。在里面有一个物体在中间,我们将被视为轴。球应该在每次被击中时移动到一个随机位置,但不应该超过墙壁。下面是一张图表: 据我所知,游戏的API只允许对象相对于它的位置移动,所以下面是我编写的代码。问题是,在第二次调用head_move()之后,它开始产生意外的结果,这让我的脑袋崩溃。谁能帮帮我吗 movementThink(): 编辑:只是澄清一下。当用户投篮时,球的位置会改变到某个值。现在,如果他再次击球,随机整数生成器的最小值和最大值应该改变,以防止球移动到墙外。例如:Algorithm 博弈的运动算法,algorithm,scripting,language-agnostic,game-physics,Algorithm,Scripting,Language Agnostic,Game Physics,我目前正在为COD4中的地图开发一个脚本。我认为这种语言非常简单,我把它标记为语言不可知论,因为问题在于这种情况下的算法 有一个房间宽960个单元。在里面有一个物体在中间,我们将被视为轴。球应该在每次被击中时移动到一个随机位置,但不应该超过墙壁。下面是一张图表: 据我所知,游戏的API只允许对象相对于它的位置移动,所以下面是我编写的代码。问题是,在第二次调用head_move()之后,它开始产生意外的结果,这让我的脑袋崩溃。谁能帮帮我吗 movementThink(): 编辑:只是澄清一下。当
只是一个例子。我认为有些东西是反向的,这些计算是不正确的。我对编程环境不太了解,但这行
head_origin thread head_move();
他涉嫌制造麻烦。这些代币是什么?任何表示线程的内容都可能会复制数据结构并将局部变量引入歧途
为什么x_min和x_max会改变?尤敏和尤马克斯在哪里 在这行中有些地方看起来不对劲:
x_max = x_min - 960;
最大值真的是最小值减去960吗?根据你的描述,听起来应该是一个“+”符号
编辑:
在你的附加评论中,减号不允许这些事实:
注释1和3指向需要是“+”符号的符号。只有当self.prevx包含从起始位置(即绝对位置)的位移时,代码才起作用。然而,您存储的是您当前位置的位移。它在前两次起作用,因为位移恰好与你的绝对位置相同,但一旦你再次移动,你就失去了你所处位置的所有轨迹 你应该做的是去掉最小值和最大值,从计算边界内的一个随机绝对位置开始。然后使用先前存储的绝对位置计算到达该位置所需的相对运动,并存储新的绝对位置
head_move()
{
new_x = RandomIntRange( -480, 480 ); //create a random location
delta_x = new_x - level.prev; //determine relative movement needed to get there
self movex (delta_x , level.movespeed); //move to new position
level.prevx = new_x; //store new position
}
这基本上是:“在新线程的实体head_原点上调用head_move()。head_origin是一个连接球和命中检测器的对象,所以我只需要移动一个东西,但这并不重要。在这种情况下,创建一个新线程不是问题,它结束得如此之快,以至于不可能调用两次。这里没有Y和Z,因为我现在只想让它在X轴上移动。但是你是对的,创建一个新线程确实会导致可能的错误。谢谢你的提醒!
head_move()
{
new_x = RandomIntRange( -480, 480 ); //create a random location
delta_x = new_x - level.prev; //determine relative movement needed to get there
self movex (delta_x , level.movespeed); //move to new position
level.prevx = new_x; //store new position
}