Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   кнопки с иконками (http://www.flasher.ru/forum/showthread.php?t=181317)

gagaga 20.06.2012 16:41

кнопки с иконками
 
у меня есть куча кнопок и есть ассетМэп с иконками для этих кнопок... я написал функцию которая получает аргументами координаты иконки на мэпе, вырезает прямоугольник нужного размера и возвращает BitmapImage. Но такую функцию нельзя прибиндить. Как во флексе делаются подобные вещи? резать циклами мапу и раскладывать в массив чтоли?

Astraport 20.06.2012 17:20

Если лень порезать на нормальные иконки, то можно использовать sprite sheet (blitting)
Возможно.

gagaga 20.06.2012 17:41

что это такое?

Добавлено через 1 час 39 минут
это какой-то очень сложный способ, мне надо что-то типа такого:
Код AS3:

[Bindable]
public function buttonIcon(_x:uint, _y:uint):BitmapImage {
                        var bitmapData:BitmapData = new BitmapData(BUTTON_ICON_SIZE.x, BUTTON_ICON_SIZE.y, true, 0);
                        var rectangle:Rectangle = new Rectangle();
                                rectangle.x = _x * BUTTON_ICON_SIZE.x;
                                rectangle.y = _y * BUTTON_ICON_SIZE.y;
                                rectangle.width = BUTTON_ICON_SIZE.x;
                                rectangle.height = BUTTON_ICON_SIZE.y;
                        bitmapData.copyPixels(buttonIconAssetMap, rectangle, new Point());
                        var bitmapImage:BitmapImage = new BitmapImage();
                        bitmapImage.source = bitmapData;
                        return bitmapImage;
                }

Код:

<s:Button icon="{buttonIcon(2, 5)}" width="20" height="20" />
только этот код не рабочий, потому что такие функции оказывается биндить нельзя....

Добавлено через 1 час 47 минут
пришлось писать отдельный класс assetManager... теперь всё работает

Добавлено через 1 час 52 минуты
но если кто-то знает какое-то изящное решение, всеравно пишите...
вот мой класс:
Код AS3:

public class AssetManager extends EventDispatcher {
                private const BUTTON_ICON_SIZE:uint = 16;
                private var _buttonAssetCollection:ArrayCollection = new ArrayCollection();
 
                public function AssetManager():void {
                        [Embed(source="../assets/assetMap.png")] var ButtonAssetMap:Class;
                        var buttonAssetMap:BitmapData = new ButtonAssetMap().bitmapData;
                        for (var i:uint = 0; i < buttonAssetMap.height / BUTTON_ICON_SIZE; i++) {
                                for (var j:uint = 0; j < buttonAssetMap.width / BUTTON_ICON_SIZE; j++ ) {
                                        var bitmapData:BitmapData = new BitmapData(BUTTON_ICON_SIZE, BUTTON_ICON_SIZE, true, 0);
                                        bitmapData.copyPixels(
                                                buttonAssetMap,
                                                new Rectangle(j * BUTTON_ICON_SIZE, i * BUTTON_ICON_SIZE, BUTTON_ICON_SIZE, BUTTON_ICON_SIZE),
                                                new Point()
                                        );
                                        _buttonAssetCollection.addItem(new Bitmap(bitmapData));
                                }
                        }
                }
                public function get buttonAssetCollection():ArrayCollection { return _buttonAssetCollection }
        }

Добавлено через 2 часа 7 минут
только среда ругается:
Код:

warning: unable to bind to property 'buttonAssetCollection' on class 'AssetManager'
но всё равботает


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

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