2011-08-21 170 views
0

在我的节目,我有一系列的if-else语句看起来像这样:if-else语句没有执行?

if ((int)([currentTouch locationInView:self].y/16)<[player y]-1) { 
     direction = 1; 
    } 
    else if ((int)([currentTouch locationInView:self].y/16)>=[player y]-1 && (int)([currentTouch locationInView:self].y/16)<=[player y]+1) { 
     direction = 0; 
    } 
    else if ((int)([currentTouch locationInView:self].y/16)>([player y]+1)) { 
     direction = -1; 
    } 

尽我所知,这些应该是只有三种选择,却没有一个人被评估为真。我在运行时设置了一个断点,并比较了两个值,第一个大于第二个。然而,第三个if语句被忽略,就好像它是假的。我感觉我好像错过了一些显而易见的事情。有任何想法吗?

+1

与您的问题无关,但您应该只调用一次这些方法,并将结果存储在局部变量中以进行比较。 – Thilo

+0

您检查您尝试的条件是否属实。 – rptwsthi

回答

1

您缺少一些括号。我把它改写这样的:

int y16 = [currentTouch locationInView:self].y/16.0f; 
if (y16 < ([player y]-1)) { 
    direction = 1; 
} 
else if ((y16 >=([player y]-1)) && (y16 <= ([player y]+1))) { 
    direction = 0; 
} 
else if (y16 > ([player y]+1)) { 
    direction = -1; 
} 

甚至

int y16 = [currentTouch locationInView:self].y/16.0f; 
if (y16 < ([player y]-1)) { 
    direction = 1; 
} 
else if ((y16 >=([player y]-1)) && (y16 <= ([player y]+1))) { 
    direction = 0; 
} 
else { 
    direction = -1; 
} 
+0

不是直接的解决方案,但事实证明,我没有包含正确的标题,所以它以某种方式调用了错误的方法。这样清理起来就更加明显了。谢谢! – Jumhyn

1

我不确定,但我认为演员阵容并没有像你期望的那样工作..你可以为第一个和其他人尝试这个吗?

((int)([currentTouch locationInView:self].y/16))<([player y]-1)) 
0

为什么不通过在顶部以外进行铸造来读取它更容易。最终代码较少:-)

0

正如其他人所说,你可以让你的代码更容易一点保持如果你让投一次。如果您确实知道您需要这3个结果并且只有这3个结果,您还可以更改您的if...elseif声明。

事情是这样的......

if (currentY < lowerBound) { 
    direction = 1; 
}else if (currentY > upperBound) { 
    direction = -1; 
}else{ //no need to do 'else if' here because it already failed our other 2 conditions 
    direction = 0; 
} 

你肯定currentTouchplayer y是有效的号码?我在一段时间内没有碰过任何iPhone开发者,所以我不确定这是否是一个问题,但这是首先想到的事情滑倒了所有3个条件。