开发者

Is there a simple way to make a movie clip identify itself in Flash? (AS2)

开发者 https://www.devze.com 2023-03-05 10:44 出处:网络
I\'m making a very simple turn based battle game using ActionScript 2.0. I\'m VERY new to code, with only very limited Visual Basic knowledge, so I\'ll happily admit I don\'t really know what I\'m d

I'm making a very simple turn based battle game using ActionScript 2.0.

I'm VERY new to code, with only very limited Visual Basic knowledge, so I'll happily admit I don't really know what I'm doing. I've got a start, but I decided to rewrite the entire thing because I wouldn't be able to cycle enemies and levels easily.

I've spawned the same enemy twic开发者_如何学JAVAe using _root.attachMovie, and identified them as Enemy1 and Enemy2. After spawning them, I tried to make them identify themselves with:

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

Using the debugger, this apparently works (within the movieclip, they have a variable called identify which correctly labels them), yet when I try to use an if statement so I can put them in their own individual positions, it simply does not work; it skims straight over. The code I have within the movie clips is:

 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();

The poschange functions works fine for the player characters, it's just this if statement to identify which enemy it is apparently fails.

Is there any easier way for a movie clip to identify its own ID so I don't have to use this method, or is there just something wrong with my code?


Personally, I'd stay away from using an inline function in that way. I'd write a poschange function that takes in the enemy, like such,

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

And you'd call it from your if statement like,

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

But that may not necessarily be, nor solve your problem. At the time of the if statement, where are you getting the 'identify' property from? If you're getting it from an actual enemy object, why not forget about the if statement and run poschange(curEnemy), or similar?


The property you're looking for is _name. This will contain the instance name that you set when you attached the MovieClip.


Being an AS 3 programmer myself let me add whatever I see as an solution, firstly if we want to identify the MovieClip's ID or name we should be able to say something like this.name.

Again after seeing the code I am a little bit confused if we are actually calling the function poschange() or you gave it in such a way for our reference. :?

Moving ahead the answer for the question would be : Yes in AS 3.0.


using root is really bad practice but why don't you just do this?

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);

    }

if want to do it your way try _root.postchange = function(){..} (feel really dirty writing that)

0

精彩评论

暂无评论...
验证码 换一张
取 消