【发布时间】:2015-04-14 03:21:10
【问题描述】:
大家好,我目前正在开发一款游戏,目标是让用户点击舞台上的对象。但是在用户点击较小的对象之前,用户必须先点击最大的对象。我想让它如果用户先点击一个较小的对象而不是较大的对象,那么游戏就会结束。我想我可以为舞台上的每个对象设置布尔值,但我的 if 语句并没有把它剪在这里是我设置它的方式:
这是我使用的对象和布尔值:
//Add box references
public var box_1:MovieClip;
public var box_2:MovieClip;
public var box_3:MovieClip;
public var box_4:MovieClip;
//Booleans
private var b1:Boolean;
private var b2:Boolean;
private var b3:Boolean;
private var b4:Boolean;
现在我将所有布尔值设置为 false,如果用户单击其中一个对象,我将布尔值设置为 true。
这是与我的主要 ENTER_FRAME 侦听器相关联的 if 语句:
private function level_1():void
{
if (b1)
{
mainScreen.box_1.gotoAndPlay("B1GONE");
b1 = false;
}else
if (b2)
{
mainScreen.box_2.gotoAndPlay("B2GONE");
b2 = false;
}else
if (b3)
{
mainScreen.box_3.gotoAndPlay("B3GONE");
b3 = false;
}else
if (b2 && !b1)
{
endGameCondition();
}
}
关于此声明:
if (b2 && !b1)
{
endGameCondition();
}
我试图说明,如果 box_2 为真,表示它已被点击,而 box_1 尚未被点击,这是较大的对象,那么游戏现在结束了,因为用户没有先点击最大的对象。我将它设置为 box_1 是最大的对象,而其他对象是下一个尺寸。
谁能明白为什么这不能正常工作,或者是否有更好的方法来做到这一点?
**** 更新我的主要课程现在是如何设置的 **************
我添加所有电影剪辑和变量的位置:
public class boxTapEngine extends MovieClip
{
//Screens
private var mainScreen:mcMainScreen;
//Add box references
public var box_1:MovieClip;
public var box_2:MovieClip;
public var box_3:MovieClip;
public var box_4:MovieClip;
private var aBoxesArray:Array;
在我的构造函数中:
aBoxesArray = [box_1, box_2, box_3, box_4];
//AddMainScreen
mainScreen = new mcMainScreen();
mainScreen.x = (stage.stageWidth / 2);
mainScreen.y = (stage.stageHeight / 2);
stage.addChild(mainScreen);
//Initiate numbers
nLevel = 1;
for each(var box:MovieClip in aBoxesArray)
{
box.addEventListener(MouseEvent.CLICK, boxClick);
}
终于在boxClick函数上:
private function boxClick(e:MouseEvent):void
{
var box:MovieClip = e.currentTarget as MovieClip; //get a reference to one that was just clicked
box.mouseEnabled = false; //we'll use this as a flag to know if it's been clicked yet
box.gotoAndPlay("BGONE");
//check to see if previous boxes have been clicked.
//this will iterate through all the boxes in order
for (var i:int = 0; i < aBoxesArray.length; i++)
{
if(aBoxesArray[i] == box) return; //if we've reached the currently clicked box, all is good, no need to keep checking so let's exit this loop and function
if (!aBoxesArray[i].mouseEnabled)
{ //one of the previous boxes hasn't been clicked yet
endGameCondition();
}
}
}
【问题讨论】:
-
抱歉,我认为我可以接受这两个答案。它声明检查您是否接受或它作为解决方案的一部分有所帮助。我重新检查了你的谢谢 LDMS
-
不用担心,只要确保没有您认为有问题的地方
标签: actionscript-3 if-statement boolean flash-cs6 boolean-logic