PDA

Просмотр полной версии : почему trace() не работает?


Dear.D
08.05.2008, 16:00
почему trace() не работает?

for (var i = 1; i<=12; i++) {
this["mc"+i]["fon"+i].onPress = function() {
this._parent.startDrag(false);
};
this["mc"+i]["fon"+i].onRelease = function() {
stopDrag();
trace(_parent["mc"+i]._y);
};
}
вместо _parent писал this, одна фигня undefined.
Также на _root не реагирует, может че со счетчиком?
Если написать trace(this.mc1._y); то все работает :wacko:

iNils
08.05.2008, 16:06
Потому, что выражение ["mc"+i] - вычисляется на момент вызова, а не когда написали. А поскольку вы используется не локальный для клипа i, а его предка, то к моменту получаете 12.

Надо так
for (var i = 1; i <= 12; i++) {
var mc:MovieClip = this["mc" + i]["fon" + i];
mc.i = i;
mc.onPress = function () {
this._parent.startDrag (false);
};
mc.onRelease = function () {
stopDrag ();
trace (_parent["mc" + this.i]._y);
};
}

chingachgoog
08.05.2008, 16:08
this._parent["mc"+this.i]._y

Dear.D
08.05.2008, 16:13
все равно undefined (оба раза)

iNils
08.05.2008, 16:41
Ну это уже проблема в адресации :)
_parent указывает на ["mc" + i], а вы в нем пытаетесь его найти :)

Dear.D
08.05.2008, 16:49
Ну это уже проблема в адресации :)

тогда почему _root не помогает, ведь он обращается с самого верха?

iNils
08.05.2008, 17:12
Я не вижу в коде рута.

Dear.D
08.05.2008, 17:18
for (var i = 1; i<=12; i++) {
this["mc"+i]["fon"+i].onPress = function() {
this._parent.startDrag(false);
};
this["mc"+i]["fon"+i].onRelease = function() {
stopDrag();
trace(_root["mc"+i]._y);
};
updateAfterEvent();
}

iNils
08.05.2008, 17:23
Смотрим на синий код в сообщении номер два и применяем его к коду в сообщении номер 8.

А в чем сакральный смысл updateAfterEvent в данном коде?

Dear.D
08.05.2008, 17:40
получилось, только нифига не понятно (а это главное)
весь смысл в том, что после onRelease надо будет переопределить координаты клипа (клип будет останавливаться только по заданной сетке)

iNils
08.05.2008, 17:45
какого клипа?

Dear.D
08.05.2008, 17:57
родительского.
представь себе сетку с шагом 10, так вот этот клип при перетаскивании должен останавливаться только на пересечениях линий сетки.

iNils
08.05.2008, 18:21
Не понятно.

Роман Вадимович
08.05.2008, 18:48
Может это имелось ввиду?


var stepGrid:Number = 10; // Шаг сетки в пикселях
mc._x = Math.round(mc.x / stepGrid) * stepGrid;
mc._y = Math.round(mc.y / stepGrid) * stepGrid;