Is there a simple way to make a movie clip identif

2019-09-17 03:20发布

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 twice 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?

4条回答
Deceive 欺骗
2楼-- · 2019-09-17 03:55

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?

查看更多
甜甜的少女心
3楼-- · 2019-09-17 03:57

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.

查看更多
【Aperson】
4楼-- · 2019-09-17 04:04

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

查看更多
做个烂人
5楼-- · 2019-09-17 04:04

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)

查看更多
登录 后发表回答