Actionscript 3 if语句的多个条件?(代码不起作用)

Actionscript 3 if语句的多个条件?(代码不起作用),actionscript-3,flash,Actionscript 3,Flash,这是一款类似拼图的益智游戏。我想要它,所以它直接进入下一个场景后,所有的作品都到位。因此,在每一张地图旁边都有坐标,它将位于适当的位置 但是//惊奇//它不起作用:c甚至有可能把这么多的条件放在首位吗 谢谢你阅读c:justABeginner if (map1.x== 259.45 && map1.y== 77.05 && map2.x== 368.3 && map2.y== 69.45 && map3.x== 445.30

这是一款类似拼图的益智游戏。我想要它,所以它直接进入下一个场景后,所有的作品都到位。因此,在每一张地图旁边都有坐标,它将位于适当的位置

但是//惊奇//它不起作用:c甚至有可能把这么多的条件放在首位吗

谢谢你阅读c:justABeginner

if (map1.x== 259.45 && 
map1.y== 77.05 &&

map2.x== 368.3 &&
map2.y== 69.45 && 

map3.x== 445.30 &&
map3.y== 90.4 &&

map4.x== 288.5 &&
map4.y== 207.15 &&

map5.x== 325.75 &&
map5.y== 164.65 &&

map6.x== 436.20 &&
map6.y== 187.65)

{
gotoAndStop (1, "Scene 3");
}

代码在我看来很好。如果条件的计算结果不是真的,那么实际上可能是不同的值。在像printf这样的If语句之前执行一个简单的调试步骤,检查值是否完全相同

有时,精度将在此类If语句中扮演重要角色


快乐编码:

您可能会发现它不起作用,因为它特别难以将对象与亚像素精度对齐。正因为如此,你可能想考虑地板或舍入你的数字。我建议使用地板,以避免将其四舍五入到下一个值

if (Math.floor(map1.x) == 259 && Math.floor(map1.y) == 77 &&
    Math.floor(map2.x) == 368 && Math.floor(map2.y) == 69 && 
    Math.floor(map3.x) == 445 && Math.floor(map3.y) == 90 &&
    Math.floor(map4.x) == 288 && Math.floor(map4.y) == 207 &&
    Math.floor(map5.x) == 325 && Math.floor(map5.y) == 164 &&
    Math.floor(map6.x) == 436 && Math.floor(map6.y) == 187)
{
    gotoAndStop (1, "Scene 3");
}
这样做会给你一个更模糊的比较,应该更容易排列拼图块。另外,您可能需要考虑通过添加一个管理单元来帮助用户……

function inrange(targetX, targetY, mapX, mapY, strength) {
    targetX -= (strength / 2);
    targetY -= (strength / 2);
    return (mapX >= targetX && mapX <= (targetX+strength) &&
        mapY >= targetY && mapY <= (targetY+strength));
}

//snap map piece into place if within 3 pixels
if (inrange(259, 77, map1.x, map1.y, 3)) {
  map1.x = 259;
  map1.y = 77;
}

作为一条一般性建议,您永远不应该将等式检查==与浮点数一起使用。在某个时刻,你会发现你不能相信0.5+0.2等于0.7。最终可能等于0.700000001或0.699999999


正如其他人所提到的,尝试将数字四舍五入,或者更好的是,尝试一个小范围,在这个范围内,工件被捕捉到位,比如说正负10个像素?

是的,您可以根据需要设置任意多个条件。但正如阿克莫佐所说,这种情况非常……具体。当map1的x值为259.44时会发生什么情况?准确地说,没有什么。从技术上讲,你的if是好的,但是你使用了很多非常精确的值,所以我不确定你是否能让它工作!相反,您可以尝试使用和/或。如果需要,您还可以创建一个方法来验证所有这些条件或更多条件,并返回true或false。因此,您的if语句将是清晰易读的。类似于:if verifyMapPositions{gotoAndStop 1,Scene3;}。因此,在这个函数中,您可以添加和注释必要的内容,并且很容易理解导致返回“false”的原因并修复它。这是一个很好的建议,但AS3/Flash不使用printf。它使用一个名为trace的函数。。。