我已经嵌套if / else,这取决于几个布尔值 它的游戏引擎更新功能和它叫做每个milisecound左右 现在我有几个运动的条件 它就是这样的:
function update()
{
if(b_layer_1 == true)
{
b_layer_1->posY(-2)
if(b_layer_1->posY() = 150)
{
b_layer_1 = false ;
b_layer_2 = true ;
b_layer_3 = false ;
}
}
if(b_layer_2 == true)
{
b_layer_2->posY(-2)
if(b_layer_2->posY() = 400)
{
b_layer_1 = false ;
b_layer_2 = false ;
b_layer_3 = true ;
}
}
if(b_layer_3 == true)
{
b_layer_3->posY(-2)
if(b_layer_3->posY() = 700)
{
b_layer_1 = false ;
b_layer_2 = false ;
b_layer_3 = false ;
// ... Here i can have more layers boolean's
//...
}
}
//.. it can continue up to 20 layers to control with booleans ...
}
}
我正在寻找一些(我不确定)状态模式来摆脱这个布尔地狱
答案 0 :(得分:1)
状态模式更多地基于应用程序的独占状态。在你的情况下,它不是A或B或C,而是A,也许是B,也许是C.看起来你会使用某种密钥和对的集合(我不知道c和c ++,有什么东西吗?像C#中的Dictionary<TKey, TValue>
一样?)其中键是你的图层对象,值是一个自定义类型,包含有关当“图层为真”时应该发生的设置和动作的信息。在伪代码中
for all layers in layers_collection
if layer is true then
layer.pos(-2)
if layer.post == layer.settings.expectedPosition
layer.setMyBools
这就是我要做的。我实际上可以给你写一个C#代码,但我想这不会比你说的多得多。也许考虑使用特定的语言标记来标记您的问题?