Есть ли простой способ сделать так, чтобы мувиклип идентифицировал себя во Flash? (AS2)

Я делаю очень простую пошаговую игру с использованием ActionScript 2.0.

Я ОЧЕНЬ новичок в коде, обладаю лишь очень ограниченными знаниями Visual Basic, поэтому, к счастью, я не знаю, что на самом деле делаю. У меня есть начало, но я решил переписать все это, потому что я не смог бы легко перемещать врагов и уровни.

Я породил одного и того же врага дважды, используя _root.attachMovie, и идентифицировал их как Enemy1 а также Enemy2, После их появления я попытался заставить их идентифицировать себя с:

_root.Enemy1.identify = "Enemy1"
_root.Enemy1.identify = "Enemy1"

Используя отладчик, это, очевидно, работает (в мувиклипе у них есть переменная с именем identifier, которая правильно их помечает), но когда я пытаюсь использовать оператор if, чтобы я мог поместить их в свои отдельные позиции, он просто не работает; он скользит прямо. Код, который у меня есть в клипах:

 if (identify == "Enemy1") {

    function poschange() {

        _root.Enemy1._x = _root.Enemy1.POSX;

        _root.Enemy1._y = _root.Enemy1.POSY;

        _root.Enemy1.swapDepths(_root.Enemy1.POSY);

    }

} else if (identify == "Enemy2") {

    function poschange() {

        _root.Enemy2._x = _root.Enemy2.POSX;

        _root.Enemy2._y = _root.Enemy2.POSY;

        _root.Enemy2.swapDepths(_root.Enemy2.POSY);

    }

}

poschange();

Функции poschange отлично работают с персонажами игрока, просто это оператор if для определения того, какой враг ему явно не удался.

Есть ли какой-нибудь более простой способ для видеоклипа идентифицировать свой собственный идентификатор, чтобы мне не приходилось использовать этот метод, или в моем коде просто что-то не так?

4 ответа

Решение

Лично я бы не использовал встроенную функцию таким образом. Я бы написал функцию poschange, которая принимает врага, вот так,

function poschange(enemy) {
    enemy._x = enemy.POSX;
    enemy._y = enemy.POSY;
    enemy.swapDepths(enemy.POSY);
}

И вы бы назвали это из своего заявления if, как,

if (identify == "Enemy1") {
    poschange(_root.Enemy1);
}
else if(identify == "Enemy2") {
    poschange(_root.Enemy2);
}

Но это не обязательно может быть, ни решить вашу проблему. Во время заявления if, откуда вы берете свойство "идентифицировать"? Если вы получаете его от реального вражеского объекта, почему бы не забыть об операторе if и запустить poschange(curEnemy) или что-то подобное?

Недвижимость, которую вы ищете _name, Он будет содержать имя экземпляра, которое вы установили при прикреплении мувиклипа.

Будучи программистом для AS 3, позвольте мне добавить все, что я вижу в качестве решения, во-первых, если мы хотим идентифицировать идентификатор или имя MovieClip, мы должны иметь возможность сказать что-то вроде this.name.

Снова после просмотра кода я немного запутался, если мы на самом деле вызываем функцию poschange() или вы дали ее таким образом для нашей справки.:?

В будущем ответом на этот вопрос будет: Да, в AS 3.0.

Использование root - это действительно плохая практика, но почему бы вам просто не сделать это?

if (identify == "Enemy1") {

            _root.Enemy1._x = _root.Enemy1.POSX;

            _root.Enemy1._y = _root.Enemy1.POSY;

            _root.Enemy1.swapDepths(_root.Enemy1.POSY);

    } else if (identify == "Enemy2") {

            _root.Enemy2._x = _root.Enemy2.POSX;

            _root.Enemy2._y = _root.Enemy2.POSY;

            _root.Enemy2.swapDepths(_root.Enemy2.POSY);

    }

если хотите сделать это по-своему, попробуйте _root.postchange = function(){..} (чувствую себя действительно грязно, когда пишу это)

Другие вопросы по тегам