【发布时间】:2014-08-07 11:58:45
【问题描述】:
我正在用 C++ 制作一个小游戏,我想知道如何优化我的分支。看这段代码:
if (
isUpPressed ||
isDownPressed ||
isLeftPressed ||
isRightPressed ||
isSpacePressed
) {
if (isUpPressed)
state |= State::MoveUp;
if (isDownPressed)
state |= State::MoveDown;
if (isLeftPressed)
state |= State::MoveLeft;
if (isRightPressed)
state |= State::MoveRight;
if (isSpacePressed)
state |= State::Jump);
} else
state = State::Still;
我想要实现的是:如果按下了上、下、左、右或空格,则将state设置为适当的值。如果这些条件没有为真,则将状态设置为State::Still。我的代码有效,但感觉好像我做错了。一定会有更好的办法。我的问题是:
如何仅在 所有 指定条件失败时执行块,如果一个或多个条件为真,则执行特定于每个条件的块,而不使用像我一样嵌套if 和很多|| 运算符?
【问题讨论】:
-
除了冗余。
-
冗余正是问题所在。
-
我没有看到冗余。如果我正确理解您的代码,您必须以某种方式将事件映射到状态。
-
对,但我想检查一个键是否被按下一次且仅一次。不需要检查两次。
-
@filsmick 我认为这是必要的,因为您要问两个不同的问题(“按键”与“按下”)。当然你可以使用向量+哈希图,但最终你会以相同的冗余结束,只是在不同的地方。根据您提供给我们的信息(
State::Still == 0,您可以使用 Chnossos 的技巧)我怀疑您可以做得更好。
标签: c++ conditional-statements or-operator