#actionscript-3 #flash-cs6 #flashdevelop
#actionscript-3 #flash-cs6 #flashdevelop
Вопрос:
Привет всем, итак, я пытаюсь получить доступ к логическим переменным из отдельного класса, вызываемого mcPressMachine
с помощью моего основного класса SmashyFoodEngine
. Что я хочу сделать, так это когда оценка > = 6, затем измените логические значения следующим образом в моем основном классе движка Введите событие кадра:
if (nScore >= 6)
{
for each(var AllPresses:mcPressMachine in aPressMachineArray)
{
AllPresses.level_1 = false;
AllPresses.level_2 = true;
}
}
в моем mcPressMachine
классе у меня есть логические значения, настроенные для управления тем, какие кадры этого класса видеороликов на временной шкале будут воспроизводиться следующими. Итак, в основном, если значение level_1 равно true, тогда воспроизводите случайные кадры из (1,8), если значение level_2 равно true, тогда кадры (9,13) и т.д… Который настроен таким образом в классе pressMachine:
public var level_1:Boolean = true;
public var level_2:Boolean = false;
private function init():void
{
if (level_1)
{
var randomFrameLevel_1:Number = randomNumber(1, 8);
this.gotoAndStop(randomFrameLevel_1);
}
if (level_2)
{
var randomFrameLevel_2:Number = randomNumber(9, 13);
this.gotoAndStop(randomFrameLevel_2);
}
}
поэтому, когда я отслеживаю его, и оценка равна> = 6, логические значения меняются идеально, но на экране ничего не происходит. Видеоклипы точно такие же и не меняются на кадры level_2 (9-13);
Кроме того, это видеоролик в моем основном классе, который добавляется на сцену, и я пытаюсь изменить:
private function addNewPressMachines():void
{
//have array of press machines come out 5 at a time.
for (var i:int = 0; i < 2; i )
{
//trace(aPressMachineArray.length "PRESS MACHINES");
pressMachine = new mcPressMachine();
pressMachine.x = startPoint.x (xSpacing * i);
pressMachine.y = (stage.stageHeight / 2);
stage.addChildAt(pressMachine, 1);
aPressMachineArray.push(pressMachine);
pressMachine.inner.top.visible = false;
pressMachine.inner.top.topText.text = " " sharedObjectHighScore.data.highScore;
}
}
Кто-нибудь может увидеть, делаю ли я что-то не так? Я не получаю никаких ошибок, просто не работает должным образом. Любой совет был бы потрясающим. Спасибо!
Комментарии:
1. Вы выполняете этот код в init(), который вызывается один раз при создании экземпляра машины, да?
2. Да, это правильно
3. Являются ли логические значения в машинном классе просто сбрасываемыми каждый раз, когда добавляется новый из моего основного класса?
4. ДА. Вы объявляете свои переменные как true и false в коде конструктора. Затем вы используете условие, которое зависит от этих значений, но они всегда будут одинаковыми. Вам нужно изменить логические значения, а затем снова вызвать функцию init() . Я бы, вероятно, сделал это немного по-другому. Я опубликую ответ, если у меня будет время. Но в краткосрочной перспективе попробуйте сделать то, что я только что предложил. И вам нужно будет сделать это общедоступной функцией, а не частной (именно поэтому я бы сделал это по-другому… В принципе, я бы просто включил эти значения в качестве аргументов в конструкторе).
5. О, хорошо. Я полагаю, что знаю, что вы получаете. Да, в то же время я попытаюсь поработать над этим. Спасибо за быстрый ответ. Я дам вам знать, как это происходит, если у меня получится
Ответ №1:
Это лучшее, что я могу сделать на данный момент.
var _var1:Boolean;
var _var2:Boolean;
public function MyClass(first:Boolean,second:Boolean):void{
this._var1 = first;
this._var2 = second;
if (_var1 == true) {
// stuff
}
if (_var2 == true){
// etc.
}
Это передает ваши аргументы из в код конструктора и сохраняет значения в свойствах этого экземпляра класса.
Или еще проще
var _level:int;
public function MyClass(lev:int=1):void{
this._level = lev;
if (lev == 1){
// do stuff
} else if (lev==2){
// etc
}
Здесь вы заметите, что я установил _level
значение, равное lev
аргументу. Это действительно необходимо только в том случае, если вам нужно, чтобы экземпляр этого класса имел _level
свойство для других вещей. Видите ли, я мог бы с таким же успехом сделать это:
public function MyClass(lev:int=1):void{
if (lev == 1){
// do stuff
} else if (lev==2){
// etc
}
в котором я не указываю объявление _level
свойства как в определении класса, так и в коде конструктора. Это означает, что вы можете передавать переменные в конструктор без постоянного хранения этой информации в этом конкретном экземпляре класса, но при этом эти параметры будут постоянно влиять на результат.
А затем, когда вы создаете новый экземпляр этого класса, просто выполните
var myInstance = new MyClass(true, false); // using the first example
или в моей лучшей, более простой версии
var myInstance:MyClass = new MyClass(2); // for the second example
Комментарии:
1. Это то, что я пытался выяснить, как это сделать. Все еще борюсь, но я продолжаю пробовать новые способы. Я дам вам знать, как это происходит. итак, в моем машинном классе я создаю эти переменные. Тогда я смогу изменить их в своем основном классе, когда добавлю новую машину?
2. Эй, я все понял. Спасибо, чувак, я ценю всю помощь и быстрые ответы.
3. Никаких проблем. Приятно слышать, что вы разобрались.