Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Обращение одним кодом к клипам клип1, клип2, ... клип-N (http://www.flasher.ru/forum/showthread.php?t=138623)

Димчик 12.04.2010 17:59

Обращение одним кодом к клипам клип1, клип2, ... клип-N
 
Доброго времени суток
зная Ваш авторитет в области программирования во Flash, хочу задать один вопрос. У меня всегда синтаксис хромал ((

В общем, вот какое дело. На главном поле главный герой, перемещается мышью. Кроме того, есть, допустим, 11 клипов, при соприкосновении с которыми перемещается в определенный кадр.
Все эти клипы назову hit1,hit2,...,hit11. А инстанс нэйм главного героя неважно (обращаемся ко всему из его клипа).
В чем проблема. Все работает отлично, т.е. и hitTest, и перемещение, и другие-другие задумки. Но хотелось бы, ввиду значительного сокращения программы, один раз написать код, и чтобы для всех клипов работал. Допустим, я пишу:


Код AS1/AS2:

onClipEvent (enterFrame) {
    if (this.hitTest(_root.hit1)) {
        _root.gotoAndPlay('konec'); //konec - имя кадра.
    }
    this._x = _root._xmouse;
    this._y = _root._ymouse;
}

Этот код идеально работает для соприкосновения героя и клипа hit1. НО! Т.к. есть hit2,hit3, ... , hit 11, то придется писать этот же код для каждого из них. Что не хотелось бы.

Попробовал написать так:


Код AS1/AS2:

onClipEvent (load) {
    i =1; i <= 11;
}
 
onClipEvent (enterFrame) {
    if (this.hitTest(_root.['hit'+i])) {
        _root.gotoAndPlay('konec'); //konec - имя кадра.
    }
    this._x = _root._xmouse;
    this._y = _root._ymouse;
}

При проверке выводит, что он не знает, что за хрень после _root ( в if (this.hitTest(_root.['hit'+i])) )

Помогите, пожалуйста, как нужно написать. Заранее благодарен.

mooncar 12.04.2010 18:11

По синтаксису правильно так:
Код AS1/AS2:

_root['hit'+i]

Не пишите код на мувиках, кстати, это порочная практика.

Проверяйте hitTest в цикле.
Типа так (запись кода в кадре!):
Код AS1/AS2:

this.onEnterFrame = function() {
  for (i = 1; i <= 10; i++)
      if (hero_mc.hitTest(_root['hit' + i]))  {
          trace('Соприкосновение'); //или ваш gotoAndPlay
      }
  }
  //другие ваши действия, выполняющиеся с частотой fps
};


Димчик 12.04.2010 18:30

mooncar

Огромное! Огромное Вам спасибо!!!!!!! :)


Часовой пояс GMT +4, время: 13:35.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.