Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Ошибка при использовании Scale9Grid (http://www.flasher.ru/forum/showthread.php?t=128067)

formid 29.07.2009 16:18

Ошибка при использовании Scale9Grid
 
фла файл
Код AS3:

var square:Scale9 = new Scale9();
addChild(square);

файл Scale9.as
Код AS3:

package
{
        import flash.display.*;
        import flash.geom.*;
 
        public class Scale9 extends MovieClip
        {
                public function Scale9():void
                {
                        graphics.lineStyle(10,0x40A0A0,30);
                        graphics.beginFill(0xFF0000);
                        graphics.drawRect(50,50,100,100);
                        graphics.endFill();
                        var grid:Rectangle = new Rectangle(60,60,90,90);
                        scale9Grid = grid;
                }
        }
}

Ошибка:
ArgumentError: Error #2004: Один из параметров указан неверно.
at flash.display:: DisplayObject/set scale9Grid()
at Scale9()
at v_fla::MainTimeline/frame1()

в чем проблема?

Alex Lexcuk 29.07.2009 18:05

Тут надо определить видимый размер скалируемого объекта и нарисовать вокруг него невидимый прямоугольник, но так что-бы прямоугольник выступал со всех сторон объекта ,хотя-бы на пару пикселей, а потом применять скале9грид с первоначальным размером объекта, так она всегда работает.
Пример
http://www.murmadillo.tut.su/m/scale9gridTrue.rar

CEBEP 29.07.2009 19:56

http://onenterframe.ru/2009/06/14/smart9slice/ Тут интересный пример

iNils 29.07.2009 20:17

Если я правильно понял задумку, то должно быть так.
Код AS3:

var grid:Rectangle = new Rectangle(60,60,80,80);


formid 30.07.2009 01:39

Помог вот етот вариант
Код AS3:

var grid:Rectangle = this.getRect(this);
graphics.drawRect(grid.x-1,grid.y-1,grid.width+2,grid.height+2);

Всем спасибо )

Sylon 23.04.2010 22:24

К сожалению, scale9Grid пока работает так, что ей лучше не пользоваться. Для малоразмерных объектов, минимальные размеры которых при масштабировании должны быть менее 10 пикселов, использовать не реально. Как ни подбирай параметры, всё равно иногда будет вылетать. Для таких объектов - только два варианта: либо дробить их на 9 отдельных, либо каждый раз отрисовывать по новой. Первый вариант плох не только раздутым кодом, но ещё и тем, что растёт загрузка проца при при банальном перемещении мыши... Если это кнопки с хитрыми углами, и их на экране с полсотни, если не больше... в общем разрастание числа объектов не есть гуд...
Практически пришлось остановиться на варианте, где при изменении размеров картинка каждый раз отрисовывается заново.
А теперь самое интересное - самая большая загрузка проца получилась при разбиении на 9 кусков, и масштабировании нужных по отдельности. Использование .cacheAsBitmap=true влияет, к сожалению, незначительно.
Самый шустрый вариант - через scale9Grid, только заставить его работать без глюков так и не получилось.
Вариант с .graphics.clear() и отрисовкой заново работает ~ в двое медленнее, чем .scale9Grid, но заметно быстрее, чем перемещение углов и масштабирование кусочков.
Ручное разбиение на 9 кусков можно заставить работать быстро, если каждый из них отрисовать в свой битмап, правда этот номер не проходит, если нужно собитать события мыши с объекта хитрой формы, да и слишком громоздко...

Котяра 26.04.2010 11:19

попробуйте http://www.bytearray.org/?p=118
я лично использовал для выплывающих менюшек с твинами - работает шустро.


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

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