Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   При уменьшении размеров контейнера удаляются его дети... (http://www.flasher.ru/forum/showthread.php?t=204584)

Ioangum 04.11.2013 22:53

При уменьшении размеров контейнера удаляются его дети...
 
ДВС, многоуважаемые знатоки 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

Проблема может быть в кривом коде.
Что имеется ввиду под исчезанием?

Ioangum 05.11.2013 00:07

Под исчезновением понимается буквально исчезновение из списка отображения. А вот часть кода, которая за это отвечает:
Код AS3:

//изменение масштаба объекта (метод объекта 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 минуты
Посмотрите его координаты.

Ioangum 05.11.2013 00:35

Нет, меньше пикселя не становится, там до такого не доходит - раньше всё исчезает...

Akopalipsis 05.11.2013 00:39

Показывайте код, где у Вас удаления происходят.
И уточните - у Вас событие REMOVED вызывается?

Ioangum 05.11.2013 21:21

Действительно проблема в коде, спасибо! Просто я запутался в координатах..


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

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