PDA

Просмотр полной версии : loadMovieClip + onPress - обязательно делать метки ???


rukez
30.10.2005, 17:06
Собственно вопрос - делаем пустой мувик, грузим в него PNG, потом добавляем к нему .onPress и ничего не происходит ... Собственно вопрос - обязательно рисовать в мувике квадрат или можно заставить его работать как-то целиком ? о надежде застваить работать только закрашенные области в транспарентном PNG я уже и спрашивать боюсь :)
---
Что имеется ввиду (для тех кто в банке) :

_root.createEmptyMovieClip("but_ad", _root.getNextHighestDepth());
var buttonLoader:MovieClipLoader = new MovieClipLoader();
buttonLoader.addListener(this);
buttonLoader.loadClip("add.png", _root.but_ad);
_root.but_ad.onPress = function() {
//функция для кнопки
};

т.е. можно ли :
1) Наш мувик заставить откликаться на onPress не рисуя в нём какой-нить шейп ?
2) Можно ли заставить его откликаться только там где наш PNG закрашен опять-же ничего не рисуя ?

iNils
30.10.2005, 17:15
1. Можно. С помощью метода hitArea.
имя_кнопки.hitArea = имя_области_по_форме_которой_будет_работать_кнопка
2. Нельзя, все равно надо задавать область.

rukez
30.10.2005, 17:20
1) Угу, но только hitArea тоже требует референс на какую-нить форму - а просто использовать весь размера мувика никак нельзя ? не рисуя прямоугольник в его размер ?
2) Жаль :(

rukez
30.10.2005, 17:28
ой, промазал :) простите, точно если нолик то будет весь клип :)
Спасиба большое ! :)

rukez
30.10.2005, 17:33
If the hitArea property does not exist or the value is null or undefined, the movie clip itself is used as the hit area.
Неа, не работает :(
Т.е. всётаки рисовать гадский прямоугольник ? :(

rukez
30.10.2005, 17:42
Так, может это я дурак, но что я делаю не так :

_root.createEmptyMovieClip("but_ad", _root.getNextHighestDepth());
//_root.but_ad.loadClip("add.png");
var buttonLoader:MovieClipLoader = new MovieClipLoader();
buttonLoader.addListener(this);
buttonLoader.loadClip("add.png", _root.but_ad);

_root.createEmptyMovieClip("but_ad_s", _root.getNextHighestDepth());
with (_root.but_ad_s) {
beginFill(0x000000, 90);
lineStyle(2, 0x000000, 100);
moveTo(0, 0);
lineTo(0, 12);
lineTo(12,12);
lineTo(12,0);
lineTo(0,0);
endFill();
};
_root.but_ad.hitArea = _root.but_ad_s;
_root.but_ad_s._visible=false;

_root.but_ad.onPress = function() {
//функция
};

Не работает :( Хде ошипка ? Даже с прямоугольником не работает :(

iNils
30.10.2005, 17:55
А с чего ты решил что флеш грузит png картинки?
И потом, метод onPress надо назначать, только после того как картинка загрузилась. А не перед.

rukez
30.10.2005, 17:59
Грузит, 8ка, правда надо в publush settings указывать именно 8ку как целевой плеер - с загрузкой PNG проблем нет - кнопка создаётся и показывается правильно, а вот .onPress к ней не крепится ...
...загрузилась ... БЛИН ... точно, счас пойду покопаю на эту тему ... у меня же ещё давно была проблема с тем что фрейм грузится вовсе не всегда когда должен по логике :)

iNils
30.10.2005, 18:03
С логикой все ясно. Ты начал загрузку, назначил метод, только вот твой метод слетает пока ты полностью не загрузишь в клип контент.

rukez
30.10.2005, 18:10
Неа, с логикой как-раз неясно - если AS скриптовый язык, то по идее до выполнения строчки где идёт загрузка, следующая строка выполняться не должна - но эт по идее :) Отсюда и все мои проблемы :)
в итоге заработало вот так :

function onLoadComplete (mc:MovieClip){
_root.but_ad.onPress = function() {
a = random(Stage.width);
b = random(Stage.height);
c = random(Stage.width)-a-4;
d = random(Stage.height)-b-4;
draw_border(a, b, c, d, 0);
};
};

.hitArea не нужен оказался, достаточно и вправду дождаться загрузки PNGшки

iNils
30.10.2005, 18:18
Как это не должно? Что тамлайн должен остановиться что ли?

rukez
30.10.2005, 18:30
Ну таймлайна в данном случае вообще нету - один фрейм.
Просто по идее, cтрочки должны выполнятся в последовательности, т.е. если есть команда загрузить контент (тот-же loadClip) то идущее после этого строки должны выполнятся после того как контент загружен а не во время - это избавило бы от подобных проблем. А если уж у разработчиков хватает смекалки чтоб их флэш работал в несколько веток сразу, то почему нельзя сделать кэширование команд связанных с объектом и придерживаться последовательности хотя-бы не для всего таймлайна а для каждого конкретного объекта ... блин, ну да ладно, не суть, главное что заработало :)

iNils
30.10.2005, 21:03
Они и выполняются последовательно. Просто загрузка происходит асинхронно.