Привет всем, сейчас я работаю над игрой, и цель состоит в том, чтобы пользователь нажимал на объекты на сцене. Но пользователь должен сначала щелкнуть самые большие объекты, прежде чем пользователь щелкнет по меньшим объектам. Я хотел сделать так, чтобы если пользователь сначала нажимал на меньший объект, а не на больший, то игра заканчивалась. Я думал, что могу настроить это с помощью логических значений для каждого объекта на сцене, но мои операторы 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.
Вот мои операторы if, привязанные к моему основному слушателю ENTER_FRAME:
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 имеет значение true, что означает, что на него нажали, а на 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();
}
}
}