难以避免许多“if语句”

时间:2016-03-24 10:13:10

标签: java performance

我的目标是优化代码的速度,因为它会每秒运行多次。我需要单独检查按下哪个箭头键并相应地执行代码。 如果箭头键应该导致对角线移动,我希望这个移动在每个轴上单独变慢,所以我不能单独考虑每个键,据我所知。

另外,如果持有三把钥匙,我希望能够忽略那两个会相互抵消的钥匙。

有没有简单的方法可以做到这一点?

例如,我的代码目前看起来如下:

if ( input.isKeyDown ( Input.KEY_UP ) && input.isKeyDown ( Input.KEY_RIGHT ) ) {
    // code
} 
if ( input.isKeyDown ( Input.KEY_DOWN ) && input.isKeyDown ( Input.KEY_RIGHT ) ) {
    // code
} 
...

if ( input.isKeyDown ( Input.KEY_LEFT ) ) {
    // code
}
etc.

感谢您的帮助!

编辑:我和我之前发布的上一个问题都得到了反对票。任何人都可以解释为什么我收到这些;有什么我想念的吗?

1 个答案:

答案 0 :(得分:1)

您仍然可以检查单个按键以获得一般指示,然后将其标准化并应用速度以获得最终移动目标。

示例:

从方向0/0开始。现在检查向上键,如果按下,则向y分量添加1,得到方向0/1。然后检查右键,如果按下则将1添加到x,从而得到1/1。

向下和向左重复相同(虽然你减去1),如果它们也被设置,你将再次获得方向0/0。

现在假设我们有方向1/1:规范化到长度1将导致方向0.7 / 0.7。用一些速度乘以,比方说5,你的目标位置是3.5 / 3.5。

当然,如果方向长度为0,则不应该做任何事情。

最后一点说明:这可能不会加速你的代码,但我怀疑你会遇到性能问题。它应该是相当快的(除非你正在做你没有分享的花哨的东西)并假设这是一个游戏,你将有其他领域可以获得更多的性能(算法,数据布局,渲染等)。 )。