我有以下代码:
if(pickedUp == true){
trace("released and picked up" + pickedUpNum);
this.storedClick = false;
this.onMouseMove = null;
this.onMouseDown = null;
this.onMouseUp = null;
this.onEnterFrame = this.refresh;
pickedUpNum++;
if( pickedUpNum > 60) pickedUp = false;
}
if(pickedUp == false){
trace("released and not picked up");
this.storedClick = false;
this.onEnterFrame = this.refresh;
this.onMouseDown = this.onStoreDrag;
this.onMouseUp = this.onClearStoreDrag;
this.onMouseMove = null;
}
我得到的输出大约是60:
released and picked up59
released and picked up60
released and not picked up
released and picked up61
released and not picked up
这怎么可能?我必须遗漏一些简单的东西。
我正在研究的项目实际上是试图模拟拾取一张纸并将其移动,然后将其重新设置。我正在尝试修改flash页面翻转代码以创建此效果。
答案 0 :(得分:4)
查看初始条件的跟踪(pickedUpNum
,pickedUp
)=(59
,true
)。我们将执行第一个条件,并将1
添加到pickedUpNum
。添加1
,pickedUpNum = 60
后,我们不执行内部条件,pickedUp
仍设置为true
。使用此值,我们跳过第二个条件。
所以我们在(pickedUpNum
,pickedUp
)=(60
,true
)。我们再次执行第一个条件,并将1
添加到pickedUpNum
。现在,pickedUpNum = 61
,我们执行内部条件并设置pickedUp = false
。使用此新值,将执行第二个条件。
(对不起,如果我是迂腐,有时候最好是明确的:))
编辑:感谢David,因为我的逻辑错误
答案 1 :(得分:3)
我不确定我是否完全理解你要完成的任务,因为你没有解释你期望发生的事情。但你不是故意这样做吗?
if(pickedUp == true){
}
else
if(pickedUp == false){
}
答案 2 :(得分:2)
好的,有几件事。首先,你不需要对布尔值说“== true”。其次,一般不要使用“== false”使用“!” (NOT符号),但在你的情况下只使用“else”
if(pickedUp){
trace("released and picked up" + pickedUpNum);
this.storedClick = false;
this.onMouseMove = null;
this.onMouseDown = null;
this.onMouseUp = null;
this.onEnterFrame = this.refresh;
pickedUpNum++;
if( pickedUpNum > 60) pickedUp = false;
} else {
trace("released and not picked up");
this.storedClick = false;
this.onEnterFrame = this.refresh;
this.onMouseDown = this.onStoreDrag;
this.onMouseUp = this.onClearStoreDrag;
this.onMouseMove = null;
}
答案 3 :(得分:2)
如果你编写的代码是循环的,那么在检查(pickedUp == false)之后,pickUp会被设置为true。那么,下一次通过循环会发生什么(例如当pickUpNum == 61时),pickUp将为true,真正的语句将运行,然后pickUp将再次设置为false(在“true”结束时)检查)允许运行错误检查语句。
确保您在错误检查后没有将pickedUp重置为true(并且根据您的代码,当pickUpNum> 60时),它应该按照您的意图运行。
答案 4 :(得分:0)
我怀疑你的代码每次循环都会重置标志。
wile (true)
{
boolean pickedUp = true // Move this outside the loop ^^
if (pickedUp == true)
....
}
答案 5 :(得分:0)
当它达到61并执行第二个条件时应该做什么?
如果你的代码不在循环中,请检查pickUp和pickedUpNum是否在第一个条件中的其他地方被更改。
答案 6 :(得分:0)
回答所有问题
是的,代码处于循环中。 (的onEnterFrame)
我知道我可以使用“else if”,但如果我确实使用了else,则第二个条件将永远不会执行。
我知道我不需要使用==并且可以使用not operator(!),但由于我遇到了问题,我决定明确
我不明白Kyle如何解释他的代码中的解决方案以及为什么其他人认为这是一个解决方案(+2)。
问题仍然是如何满足条件(pickUp是真和假) 一旦pickedUpNum达到61并且pickedUp设置为false ..
答案 7 :(得分:0)
released and picked up60
released and not picked up
问题是在之后发生了什么。乍一看,你的问题被误解了,作为一个错误的教科书例子,一个人可能会与条件有关。 Micheal似乎有正确的想法,因为代码中没有任何内容可以解释它,但我还想补充一点,Flash IDE中的调试器虽然不完美,但对于追踪这类事物来说非常棒。
答案 8 :(得分:0)
方式不使用调试器? 使用flex builder构建代码并使用友好的编程环境(eclipse) 有一种简单的方法来调试代码
答案 9 :(得分:0)
我同意Shvilam。学习如何使用逐步调试器是一项非常有价值的技能,它可以使错误更容易诊断。我建议使用Flex的调试器而不是Flash,但要么比没有好。