Форум 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=177656)

Astraport 05.04.2012 13:47

Вывод части изображения в компоненте
 
Чтобы не плодить кучу картинок, решил все значки поместить на один длинный PNG (15 х 150) и выводить часть этого изображения в зависимости от данных, т. е. просто перемещать PNG размещая нужный значок напротив зоны видимости (15 х 15). Не получается спрятать остальные значки, они тоже выводятся. Как их спрятать?

Код AS3:

<?xml version="1.0" encoding="utf-8"?>
<s:Group xmlns:fx="http://ns.adobe.com/mxml/2009"
                xmlns:s="library://ns.adobe.com/flex/spark"
                xmlns:mx="library://ns.adobe.com/flex/mx" width="15" height="15">
        <fx:Script>
                <![CDATA[
                        [Bindable] public var newY:int = 0;
 
                ]]>
        </fx:Script>
        <s:Image x="0" y="{newY}" smooth="true" source="@Embed('assets/signs.png')"/>
</s:Group>

Код AS3:

<components:Sign newY="{signY}" width="15" height="15"/>


Genzo 05.04.2012 13:51

Не проще ли на pure as3 написать "вырезатель" нужной картики, bitmapData & bitmap ,

Astraport 05.04.2012 13:54

Да есть ещё как минимум 5 способов это сделать. Но хотелось бы знать как это сделать на Flex.

Genzo 05.04.2012 14:05

Просто это будет очень рессурсоемко ,
а в вашем случае, вам нужно двигать не s:Image , а его source

Astraport 05.04.2012 14:11

Я вот сейчас сделал так:

Код AS3:

protected function creationCompleteHandler(event:FlexEvent):void
                        {
                        img.mask = mask as DisplayObject;
                        }
 
                ]]>
        </fx:Script>
        <s:Image x="0" y="{newY}" smooth="true" source="@Embed('assets/signs-expert.png')" id="img"/>
        <s:Image x="0" y="0" source="@Embed('assets/mask.png')" id="mask"/>

Где mask - это пустая png размерами 15 на 15. Вроде работает, но насколько это ресурсоемко?

Genzo 05.04.2012 14:20

тогда уж проще было :
Код AS3:

var shape:Shape = new Shape();
shape.graphics.drawRect(0,0,15,15);
img.mask = shape;

Ресурсоемко в плане того, что у вас создается > 3 DisplayObject'ов и т.п.

Можно сделать функцию у какого-нибудь менеджера которая будет возвращать вам нужный объект.



Код AS3:

<s:Image smooth="true" source="tilemanage.getTile(1)" id="img"/>
private var tilemanage:TileManager;
protected function creationCompleteHandler(event:FlexEvent):void
                        {
                        tilemanage = new TileManager('assets/signs-expert.png');
                        }
//TileManager:

Пусть TileManager грузит основную png, из ее BitmapData создает сколько нужно маленький объектов и возвращает.

Astraport 05.04.2012 14:23

С TileManager очень интересно. Спс.
А вот со спрайтами и шейпами я пробовал - вообще ничего не выводит. Видимо их нужно помещать на сцену, а в флексе это опять же не просто.

Genzo 05.04.2012 15:35

Цитата:

а в флексе это опять же не просто.
Почему?
Код AS3:

<mx:UIComponent id="place"/>
private function addToPlace(data:DisplayObject):void
{
place.addChild(data);
}


alatar 05.04.2012 18:55

Цитата:

Сообщение от Astraport (Сообщение 1073210)
Да есть ещё как минимум 5 способов это сделать. Но хотелось бы знать как это сделать на Flex.

У вас какое-то странное понимание, что такое Flex.

Astraport 05.04.2012 19:25

Цитата:

У вас какое-то странное понимание, что такое Flex
Возможно, но тогда это бы звучало немного длиннее:
"Но хотелось бы знать как это сделать с использованием MXML компонентов с минимальным участием as3."


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

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