Просмотр полной версии : При уменьшении размеров контейнера удаляются его дети...
ДВС, многоуважаемые знатоки as3! Возникла проблема, которую самостоятельно никак разрешить не получается. Прошу Вашей помощи! Суть в следующем:
Объект A (типа Sprite) содержит в себе некоторые объекты, они относительно большие по размеру (Высота*Ширина). К нему в дети методом объета B (B находится с объектом A в одном контейнере) добавляется объект C(10x10). Когда объект A обычного, неизменённого размера, всё хорошо. Когда же объект A уменьшается до определённой степени (раза в 1.5), объект C исчезает!.. Остальные же объекты, которые были в начале, остаются. В чём здесь может быть проблема? Спасибо
Frost47rus
04.11.2013, 23:23
Покажите код, который "не работает".
Исходя из слов - не вижу причин, по которым объекты будут исчезать, словно по волшебству.
Anton Riot
04.11.2013, 23:26
Проблема может быть в кривом коде.
Что имеется ввиду под исчезанием?
Под исчезновением понимается буквально исчезновение из списка отображения. А вот часть кода, которая за это отвечает:
//изменение масштаба объекта (метод объекта A)
private function sScale(e:MouseEvent):void {
e.updateAfterEvent();
var sc:Number = 0.95;
p = new Point(GEN_W/2, GEN_H/2); //GEN_W и GEN_H - размеры Stage
p = globalToLocal(p);
if ((e.delta < 0) && (WW*sc>=GEN_W) && (HH*sc>=GEN_H)) { //WW - ширина объекта A, HH - высота объекта A
width *= sc;
height *= sc;
WW *= sc;
HH *= sc;
}
else if ((e.delta > 0) && (WW<30000)) {
width /= sc;
height /= sc;
WW /= sc;
HH /= sc;
}
//"центрируем" объект A
p = localToGlobal(p);
x += GEN_W/2 - p.x;
y += GEN_H / 2 -p.y;
if (x > 0) x = 0;
if (y > 0) y = 0;
if (x + WW < GEN_W) x = GEN_W - WW;
if (y + HH < GEN_H) y = GEN_H - HH;
}
//метод объекта B, инициирующий добавление объекта C в объект A
private function putCintoA() {
var p:Point = new Point((parent.getChildAt(0) as A).mouseX, (parent.getChildAt(0) as A).mouseY);
(parent.getChildAt(0) as A).placeAToSquare(Math.round(p.x),Math.round(p.y),ty);
}
//Метод объекта A, вызванный из B
public function placeAToSquare(xx:Number, yy: Number, tt: Number) {
var cx : Number = 0;
var cy : Number = 0;
//x
if ((xx > sq.x) && (xx < sq.x + sq.width)) cx = xx; //sq - объект типа Shape, имеется в A
else if (xx > sq.x + sq.width) cx = sq.x + sq.width;
else cx = sq.x;
//y
if ((yy > sq.y) && (yy < sq.y + sq.height)) cy = yy;
else if (yy > sq.y + sq.height) cy = sq.y + sq.height;
else cy = sq.y;
trace(cx, "; ",cy); //выводятся координаты, входящие в объект A (!1!)
addObjC(cx, cy, tt);
}
//добавление объекта C (метод объекта A)
public function addObjC(xx:Number, yy:Number, tt:Number):void {
var c:C = new C(tt);
c.x = xx;
c.y = yy;
c.height = 10;
c.width = 10;
c.addEventListener(Event.REMOVED, cRem); //вот сразу после трейса (!1!) про координаты вызывается трейс, связанный с этим событием
c.addEventListener(Event.CLEAR, cCut); //этот не вызывается
cm.push(c); //cm - массив объектов C
addChild(cm[cm.length - 1]);
trace(cm[cm.length - 1].parent, "-parent"); //при добавлении выводит объект A
}
Akopalipsis
05.11.2013, 00:27
Если судить по этому коду, то удалится он не может.
Добавлено через 1 минуту
Вы в большой А добавили маленький С 10х10, может он меньше пикселя становится?)
Добавлено через 3 минуты
Посмотрите его координаты.
Нет, меньше пикселя не становится, там до такого не доходит - раньше всё исчезает...
Akopalipsis
05.11.2013, 00:39
Показывайте код, где у Вас удаления происходят.
И уточните - у Вас событие REMOVED вызывается?
Действительно проблема в коде, спасибо! Просто я запутался в координатах..
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.