gpt4 book ai didi

java - 循环中的 40 个 If 语句,如何避免?

转载 作者:行者123 更新时间:2023-12-01 20:57:06 26 4
gpt4 key购买 nike

我正在使用 JInput 库来检测 java 游戏中的 Controller 输入。然而,为了获得轴移动的方向,我使用这个:

gamePadContr.getComponent(Identifier.Axis.X).getPollData();

这给了我一个 -1 到 1 之间的小数,它告诉了方向。我希望玩家能够移动的不仅仅是上、下、左、右,因此我的游戏循环中有 40 个 if 语句,用于检查数字是否是一组特定的数字,并增加 x 和 y 坐标因此。这是一个例子:

if(x > .1 && x < .2 && y == 1){
// do stuff
} else
if(x > .2 && x < .3 && y == 1{
// do stuff
}

我必须检查每一个,以确保考虑到大多数方向。

我的观点是,40 个 if 语句是滞后的。 我可以做些什么来优化它吗?

一些编辑来回答问题:

  1. 认为这不相关,但 0.1 的增量有 40 个不同的 if 语句的原因是因为我正在检查操纵杆的 X 和 Y 轴。可能的组合是 (1, -1) (1, 1) (-1, 1) (-1, -1),以 0.1 的增量给出 40 种不同组合中的负值和正值。 (我不知道这是否有意义。

  2. //do stuff 只是将玩家的 x 和 y 坐标增加一定的量。

最佳答案

最好的方法可能是发现一个规则,您可以通过该规则直接从操纵杆坐标直接计算玩家的坐标变化。为此,我们需要每个分支的 //do stuff 的详细信息。

另一种可能性(如果您没有简单的关系)是很好的,那就是通过转换 xy 值将测试转换为查找到数组索引

int xIndex = (int) (10 * x + 10); // an int between 0 and 20
int yIndex = (int) (10 * y + 10); // ditto

然后您可以在提前计算过的二维数组中查找玩家的坐标变化。更一般地说,您可以拥有一个 Runnable 对象数组,根据索引查找适当的 Runnable 对象,然后运行它。

附注如果每个操纵杆坐标可以落入 20 个不同范围中的任何一个,那么您就有 400 种情况,而不是 40 种。也就是说,除非您总是忽略其中一个轴。

关于java - 循环中的 40 个 If 语句,如何避免?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42185281/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com