为什么我的if语句没有正确检查我的函数值?

时间:2017-03-10 00:44:57

标签: c# if-statement unity3d

我在其他地方有代码,它根据Stats[lifeStatus]值将指针放在一个位置。我还有一些代码可以使用Target数组引用确定我的字符是否已死,其中0表示死,1表示活着。

我希望else if (state == CHARACTER1TARGETCHOICE) { attackButton.enabled = false; abilitiesButton.enabled = false; itemButton.enabled = false; defendButton.enabled = false; fleeButton.enabled = false; if (pointer.GetComponent<SpriteRenderer> ().enabled == false) { pointer.GetComponent<SpriteRenderer> ().enabled = true; } if (Input.GetKeyDown (KeyCode.UpArrow)) { character1AttackInfo.Target -= 1; bool checkTargetAlive = false; while (checkTargetAlive) { if (enemy1Stats [lifeStatus] == 0 && character1AttackInfo.Target == 1) { character1AttackInfo.Target -= 1; } else if (enemy2Stats [lifeStatus] == 0 && character1AttackInfo.Target == 2) { character1AttackInfo.Target -= 1; } else if (enemy3Stats [lifeStatus] == 0 && character1AttackInfo.Target == 3) { character1AttackInfo.Target -= 1; } else if (enemy4Stats [lifeStatus] == 0 && character1AttackInfo.Target == 4) { character1AttackInfo.Target -= 1; } else if (character1AttackInfo.Target == 0) { character1AttackInfo.Target = 4; } else { checkTargetAlive = false; } } } 跳过死角的值,这样你才能选择要攻击的生命角色。但是,它似乎没有效果。

为什么不起作用?

import arcpy
import os
import tempfile
import shutil
shpFileArray = []
print "\n"
arcpy.env.overwriteOutput = True

newFolder = "destinationpath"
if os.path.exists(newFolder):
    tmp = tempfile.mktemp(dir=os.path.dirname(newFolder))
    shutil.move(newFolder, tmp)
    shutil.rmtree(tmp)
os.makedirs(newFolder)

arcpy.env.workspace = newFolder

for file in os.listdir("sourcepath"):
    layerName = file[:-4]
    fileSHP = layerName+".shp"



for file in os.listdir("sourcepath"):
       if file.endswith(".txt"):
            xyTable = (os.path.join("destinationpath", file))


            arcpy.MakeXYEventLayer_management(table= xyTable, in_x_field="EastingM", in_y_field="NorthingM", out_layer="layerName",...continues...


            arcpy.FeatureClassToFeatureClass_conversion(in_features="layerName", out_path="destinationpath", out_name= fileSHP,....continues....

在剧本的这一部分中,敌人的数字越低,他们在屏幕上的数字越高。因此,当按下向上箭头时,目标的数字会下降,因此光标将向上移动。移动到角色上方不同位置的光标已经完美运行。由于某种原因,目标不会跳过。一旦敌人死亡,因此enemy1Stats == 0为真且Target也为1,它仍然不会跳过。

2 个答案:

答案 0 :(得分:1)

不会调用该代码块:

while (checkTargetAlive)

接着是

{{1}}

作为一般性评论,我不太了解你的游戏逻辑应该如何工作,但问题中的那个块有一些明确的代码味道。这可能是实现游戏逻辑的最简洁方法。

答案 1 :(得分:0)

所以我不小心提前将checkTargetAlive设置为false。这使得while循环从未运行,这使得光标无法正常工作。只是提前将其设置为真,使它像魅力一样工作:

else if (state == CHARACTER1TARGETCHOICE) {
    attackButton.enabled = false;
    abilitiesButton.enabled = false;
    itemButton.enabled = false;
    defendButton.enabled = false;
    fleeButton.enabled = false;
    if (pointer.GetComponent<SpriteRenderer> ().enabled == false) {
        pointer.GetComponent<SpriteRenderer> ().enabled = true;
    }
    if (Input.GetKeyDown (KeyCode.UpArrow)) {
        character1AttackInfo.Target -= 1;
        bool checkTargetAlive = true;
        while (checkTargetAlive) {
            if (enemy1Stats [lifeStatus] == 0 && character1AttackInfo.Target == 1) {
                character1AttackInfo.Target -= 1;
            } else if (enemy2Stats [lifeStatus] == 0 && character1AttackInfo.Target == 2) {
                character1AttackInfo.Target -= 1;
            } else if (enemy3Stats [lifeStatus] == 0 && character1AttackInfo.Target == 3) {
                character1AttackInfo.Target -= 1;
            } else if (enemy4Stats [lifeStatus] == 0 && character1AttackInfo.Target == 4) {
                character1AttackInfo.Target -= 1;
            } else if (character1AttackInfo.Target == 0) {
                character1AttackInfo.Target = 4;
            } else {
                checkTargetAlive = false;
            }
        }
    }