Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Своеобразный Redraw при использовании addChild (http://www.flasher.ru/forum/showthread.php?t=96926)

Y_Vitaly 09.06.2007 20:34

Своеобразный Redraw при использовании addChild
 
Как, при, допустим, изменении размера Flash Player'a Shape (нарисованый скриптом) всегда находился в нижнем правом углу и не оставлял после себя след?

addChildAt и removeChild не подходит :( Дело в том, что есть класс, который рисует этот Shape, при изменении размера окна Flash Player'a рисуется новый Shape - по логике он должен автоматом убивать предыдущий и ложится на его место, ведь z-order остаётся постоянным.

DarkLight 09.06.2007 20:54

а почему бы не сохранять ссылку на отрисованный Shape и не делать ему clear перед новой отрисовкой?

P S А когда-то я смеялся над паскальщиками на олимпиаде по программированию, когда у меня во флеше шарик летал, а у них в паскале оставлял за собой след:)

Y_Vitaly 09.06.2007 21:23

А зачем ссылку? Ведь раньше с createEmptyMovieClip всё работало что там был мувик, что сейчас один и тот же объект… Может есть какой-то попроще выход? Shape то не один и все внутри разных Sprite'ов.

DarkLight 09.06.2007 22:23

а почему нужно именно перерисовывать а не двигать?

Y_Vitaly 09.06.2007 23:32

Потому-что Shape не растягивается и не увеличивается (если б так - то линии становились бы толстыми) - он просто перерисовывается под новый размер окна.

7thsky™ 10.06.2007 07:56

Советую выложить пример, так как не понятно что ты именно хочешь

Y_Vitaly 10.06.2007 14:08

Непосредственно рисование:
Код:

// Create a Sprite, positioned at x:0 and y:0.
var topGUISprite:Sprite = new Sprite();
addChild(topGUISprite);

// Create a top GUI Shape.
var topGUIShape:Shape = new Shape();
topGUISprite.addChild(topGUIShape);

// Begin drawing top GUI.
// 1.
topGUIShape.graphics.beginFill(mainColor);
// x0, y0.
topGUIShape.graphics.moveTo(realX, realY);
topGUIShape.graphics.lineTo(realWidth, realY);
// 2.
topGUIShape.graphics.lineTo(realWidth, realHeight-25);
// 3.
topGUIShape.graphics.lineStyle(1, darkLine, 100);
topGUIShape.graphics.lineTo(realX, realHeight-25);
// 4.
topGUIShape.graphics.lineStyle(1, mainColor, 100);
topGUIShape.graphics.lineTo(realX, realY);
topGUIShape.graphics.endFill();

Обработчик события:
Код:

// Stage Listener.
stage.addEventListener(Event.RESIZE, resizeHandler);
function resizeHandler(event:Event) {
        contentUpdater();
}

Внутри contentUpdater(); вызывается метод, тело которого описано выше.

Пример находится тут

silin 14.06.2007 00:28

проблема имхо только в том, что addChildAt не убивает находящийся на этой глубине объект (как было c createMovieClip или attachMovie)
не вижу почему в GUI не держать ссылки на все графические элементы, создать их в конструкторе, а в методах пересоздавать или перерисовывать, это уж как удобнее.. GUI.zip

Timerlan 14.06.2007 13:59

насколько я помню по мануалу ( если я его правильно понял), то addChildAt добавляя новый объект на какую-то глубину, переводит старый объект этой глубины на более высокий уровень. Там даже иллюстрации к этому есть

etc 14.06.2007 14:45

Y_Vitaly, отредактируйте свой пост и оформите код тегами [code][/code].


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

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