PDA

Просмотр полной версии : getNextHighestDepth


World Architect
31.05.2006, 18:20
У меня есть такой код. На сцене (за краями) валяется 2 мувика - copy_l и copy_r. Есть прямоугольник Analyser, над которым создаются дубликаты этих copy_l и copy_r; По глубине дб выше чем Analyser, иначе сообщения от мыши не пройдут.

Проблема номер раз: они все равно не проходят
Проблема номер два: если сделать финт ушами и после создания кучи дубликатов убрать с вида Analyser (_y += 1000), то сообщения начинают проходить но только к верхним дубликатам.

Вижу проблему в getNextHighestDepth, которая на _root выдает шибко большие числа. Как написано в Справке, это не правильно. На других мувиках выдает нули...

Как мне сделать чтоб в куче дубликатов (один на другом, потом они мышкой растаскиваются), сообщения получали все и чтоб были правильные depth?

class Analyser extends MovieClip {

var type : String;
var NID : Number;
var copyl;
var copyr;

function Analyser()
{
copyl = eval("_root." + "copy_l");
copyr = eval("_root." + "copy_r");
if (_global.objs == undefined)
{
_global.objs = 0;
_global.getnxt = function()
{
_global.objs++;
return _global.objs;
}
}

duplicate();

_visible = false;

NID = setInterval(this,"dub", 1000);

}
function dub()
{
clearInterval(NID);
for(var i = 0; i < 11 ; i++) duplicate();
_y+=1000;
}
function duplicate()
{

var num = _global.getnxt();
var copyl1 = copyl.duplicateMovieClip("copyl" + num, _root.getNextHighestDepth(),
{_x : getBounds(_root).xMin + 10, _y : 10+ (getBounds(_root).yMin + getBounds(_root).yMax) / 2,
type : this.type, subtype : "moveme", myPipe : ("copyr" + num)});
var copyr1 = copyr.duplicateMovieClip("copyr" + num, _root.getNextHighestDepth(),
{_x : getBounds(_root).xMax - 5, _y : 10+(getBounds(_root).yMin + getBounds(_root).yMax) / 2,
type : this.type, subtype : "moveme", myPipe : ("copyl" + num)});
trace(copyl1 + " " + copyl1.getDepth());
copyl1.onMouseMove();
copyr1.onMouseMove();
}

function onMouseMove()
{
}
}

Примечание: _global.getnxt введена для именования мувиков, созданных динамически (на _global не обр внимания :))

World Architect
31.05.2006, 19:11
Вернее мышкой цепляется самый нижний из кучи. В остальное не доходит

Usnul
31.05.2006, 19:57
исходник давай, твое обьяснение никуда не годится.

Madasan
31.05.2006, 20:32
Вижу проблему в getNextHighestDepth, которая на _root выдает шибко большие числа. Как написано в Справке, это не правильно. На других мувиках выдает нули... Если выдает большие числа, значит либо что-то лежит на высоком уровне, либо это не тот трейс, функция работает нормально.

Как мне сделать чтоб в куче дубликатов (один на другом, потом они мышкой растаскиваются), сообщения получали все и чтоб были правильные depth?
Если у тебя дубликаты перекрывают друг друга, то получать событие регистрирующее нахождение курсора над мувиком, будет только тот мувик, который выше по уровню. Но это когда вешаешь событие на сам мувик, если твои мувики лежат друг над другом, то не обязательно вешать событие на каждый, можно сделать один невидимый мувик, при наведении на который мышь будет цеплять и тащить верхний экземпляр. Этот невидимый мувик, также может передавать события и в другой мувик, если в этом есть необходимость. Чтобы все было правильно надо правильно и делать, и правильно объяснять, из кода, например не понятно, что выполняет вот эта функция:
copyl1.onMouseMove();
copyr1.onMouseMove();и почему она вызывается два раза?

World Architect
31.05.2006, 21:44
Она не 2 раза вызывается :) а по одному для разных мувиков. Просто названия похожие.
Насчет getNextHighestDepth, то в справке к ней написано:

Note: If you are using version 2 components, do not use this
method. If you place a version 2 component either on the Stage or in the
Library, the getNextHighestDepth() method can sometimes return depth
1048676, which is outside the valid range. If you are using version 2
components, you should always use the version 2 components

Вот как раз с этой 1048676 у меня и стартует Depth. И как сказано в справке, это which is outside the valid range.

Вызываю, как видно к _root.getNextHighestDepth().

World Architect
31.05.2006, 21:52
Analyser сделан для того чтобы программер кинул мувик Analyser на рабочее пространство, тем самым показав своими координатами, в какое место создавать дубликаты другого мувика конструктору Analyser'а. После создания кучи дубликатов, Analyser сваливает за границу рабочего пространства (за экран).
Видимо передачу мышовых сообщений нагружу на Analyser. Если конечно _xmouse и _ymouse в любом случае пересчитываются, даже если Depth не пропускает события. Если нет, придется париться... Считать еще и _xmouse и _ymouse...

World Architect
31.05.2006, 23:43
а насчет
copyl1.onMouseMove();
copyr1.onMouseMove();
не обращайте внимания, к делу не относится :) (обновление состояний мувиков так делается)
Вопрос с Depth еще висит :(

etc
31.05.2006, 23:48
Не используй getNextHighestDepth
А ещё лучше забудь и про _root, eval и не пихай всякий мусор в _global.
Поверь -- без них можно прожить совершенно легко.

iNils
31.05.2006, 23:50
Не используй getNextHighestDepth
....Поверь -- без них можно прожить совершенно легко.
Ни разу не использовал (правда в силу того что в mx этого не было:p) и работало как часы :)

World Architect
01.06.2006, 08:31
А как мне тогда глубину задать при дублировании?

iNils
01.06.2006, 12:06
А как ты индекс к имени задаешь?:)

World Architect
01.06.2006, 17:00
Именование всех динамически созданных обектов происходит с помощью функции _global.getnxt();:
if (_global.objs == undefined)
{
_global.objs = 0;
_global.getnxt = function()
{
_global.objs++;
return _global.objs;
}
}
Она просто инкрементит счетчик и возвр. сл. число.
Т.е. чтобы получить сл уникальное имя, делаю так:
новое_имя = "Teapot_" + _global.getnxt();
Или что-то типа того.

iNils
01.06.2006, 17:13
То есть имя у тебя уникальное, а глубину сделать уникальной нельзя? :)

World Architect
01.06.2006, 17:15
Так а как? :):):)

iNils
01.06.2006, 17:38
Так а как? :):):)
Расширь свой код

_global.getCurrent = function()
{
return _global.objs;
}

и вызывай
новое_имя = "Teapot_" + _global.getnxt();
новоя_глубина = _global.getCurrent();

World Architect
01.06.2006, 17:50
А эти глубины не пересекутся с уже существующими и созданными не в AS а нарисованными в IDE?

iNils
01.06.2006, 17:54
Все нарисованые в ide объекты, создаются на отрицательных глубинах, за исключением глубины -16384, она используется если тебе нужно расположить динамический созданный объекты ниже нарисованных в ide.

World Architect
01.06.2006, 17:58
Спасибо, iNils, за исчерпывающие ответы :) Очень помог, а то я то думал что глубины у них положительные... :(