Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   API приложений и сред (http://www.flasher.ru/forum/forumdisplay.php?f=61)
-   -   [Starling] Запечь перса с одеждой в вектор текстур и потом проиграть как мувиклип (http://www.flasher.ru/forum/showthread.php?t=211641)

mikhailk 06.10.2015 16:36

Запечь перса с одеждой в вектор текстур и потом проиграть как мувиклип
 
Перс грузится вектором текстур (послойно - отдельно весь перс, отдельно рука) и одежда на нем - тоже вектором текстур. Можно для простоты считать, что каждый вектор текстур - это секвенция фазы ходьбы. Например, 12 кадров. Нижний слой - это весь перс, потом слой одежды, потом рука верхним слоем.

Что-то у меня получается не особенно красиво - либо просто положить три мувиклипа в контейнер и при каждом обновлении все три переставлять на следующий кадр, либо запечь кадры мувиклипов послойно в вектор рендертекстур, но над вектором рендертекстур мувиклип не создать, поэтому все равно переставлять кадры ручками. Например, присваивая текстуру из вектора имаджу.

Возможности запечь слои в вектор текстур и потом скормить его мувиклипу я что-то не нашел. Или что-то есть?

ALeXVoz 06.10.2015 19:02

Используйте DragonBones.
По началу немного сложно разобраться, приходится посидеть, помучатся но за то потом очень упрощает жизнь, полный контроль над персонажем.

caseyryan 06.10.2015 20:13

Цитата:

Сообщение от ALeXVoz (Сообщение 1187750)
Используйте DragonBones.
По началу немного сложно разобраться, приходится посидеть, помучатся но за то потом очень упрощает жизнь, полный контроль над персонажем.

Ничего там сложного. Я думаю он и сам знает про эту штуку. Но его не всегда можно использовать. Бывает такая сложная анимация, что дракон никак не подойдет.

Как вариант можно сделать хранение битмапок (я даже стандартный ассет менеджер расширил, чтобы он не убивал те картинки, которые мне нужны) А потом просто стандартным BitmapDraw все в одну запекать и делать текстуру, которую и кормить мувиклипу. Думаю это всяко лучше костыля, который у тебя получился

mikhailk 07.10.2015 14:54

Цитата:

Как вариант можно сделать хранение битмапок (я даже стандартный ассет менеджер расширил, чтобы он не убивал те картинки, которые мне нужны) А потом просто стандартным BitmapDraw все в одну запекать и делать текстуру, которую и кормить мувиклипу. Думаю это всяко лучше костыля, который у тебя получился
Я чего-то туплю. А как из стандартного ассетменеджера вытащить битмапу для конкретной текстуры?

caseyryan 07.10.2015 19:24

Вложений: 1
Цитата:

Сообщение от mikhailk (Сообщение 1187786)
Я чего-то туплю. А как из стандартного ассетменеджера вытащить битмапу для конкретной текстуры?

Из стандартного никак, его надо модифицировать, чтобы он не уничтожал нужные.
Собственно во вложении мой модифицированный


Там есть массив
Код AS3:

private var _bitmapsToStore:Array/*String*/ = [];

На 148 строке
Просто добавь туда названия картинок, для которых нужно сохранить битмап данные, естественно без расширения.
Короче говоря если сделаешь так
Код AS3:

private var _bitmapsToStore:Array/*String*/ = ["some_image"];

И загрузишь картинку some_image.png

То потом можешь у ассет менеджера получить ее через
Код AS3:

getBitmap("some_image");

Я уже писал на форуме старлинга, что нужно сделать такой функционал из коробки, Даниэль согласился, но хз когда сделает. Так что пока костыльный способ

mikhailk 09.10.2015 11:08

Ок, попробую.
Да, действительно странно, что в коробке такого нет.

Добавлено через 1 час 57 минут
Кстати, случайно нашел еще вот такое решение:
http://blog.eago.ws/2015/01/05/starl...apdata-saving/

mikhailk 20.11.2015 12:39

Цитата:

То потом можешь у ассет менеджера получить ее через
Код AS3:

getBitmap("some_image");


Расширил функцию для того, чтобы можно было получать так же изображения из атласа. В сеттере сохраняемых битмап для ассетменеджера указываем не имя текстуры, а имя атласа. При получении битмапа через функцию getBitmap вторым параметром указываем имя атласа.

Код AS3:

public function getBitmap( textureName : String, atlasName : String = null ) : Bitmap
{
        // case of simple texture
        if ( !atlasName )
        {
                return mBitmaps[textureName];
        }
 
        // case of texture in atlas
        var textureAtlas : TextureAtlas = getTextureAtlas( atlasName );
        var textureRegion : Rectangle = textureAtlas.getRegion( textureName );
        var textureFrame : Rectangle = textureAtlas.getFrame( textureName );
 
        if ( textureFrame )
        {
                var textureWidth : uint = textureFrame.width;
                var textureHeight : uint = textureFrame.height;
                var regionLeft : uint = -textureFrame.x;
                var regionTop : uint = -textureFrame.y;
                var regionWidth : uint = textureRegion.width;
                var regionHeight : uint = textureRegion.height;
        }
        else
        {
                textureWidth = textureRegion.width;
                textureHeight = textureRegion.height;
                regionLeft = 0;
                regionTop = 0;
                regionWidth = textureRegion.width;
                regionHeight = textureRegion.height;
        }
 
        var bitmapData : BitmapData = new BitmapData( textureWidth, textureHeight, true, 0x00000000 );
        var pixels : ByteArray = ( mBitmaps[atlasName] as Bitmap ).bitmapData.getPixels( textureRegion );
        pixels.position = 0;
        bitmapData.setPixels( new Rectangle( regionLeft, regionTop, regionWidth, regionHeight ), pixels );
        return new Bitmap( bitmapData );
}



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

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