Как я могу объединить несколько объектов bitmapData в один, чтобы он мог быть закодирован с использованием PNGEncoder? - PullRequest
2 голосов
/ 30 января 2012

Я создаю программу, которая фактически является создателем спрайтов. Я очень новичок в AS3, но я знаю JQuery, JS, PHP и т. Д. Пройдя несколько этапов выбора элементов для настройки персонажа, вы должны иметь возможность загрузить конечный продукт с помощью fileReference (). Все работает, и я могу загрузить изображение в конце, но проблема в том, что я не могу снять все несколько видеоклипов на сцене, я могу захватить только один. Может быть, это поможет уточнить:

// add listener to the download button
dl_b.addEventListener(MouseEvent.CLICK, save_emote); 

function save_emote(e:MouseEvent):void{ 
    var bData:BitmapData = new BitmapData(50, 50); 
    var bData_eyes:BitmapData = new BitmapData(50, 50); 


    bData.draw(emptyMC_mc);
    bData_eyes.draw(emptyMC_eyes);

    // none of these worked, so they have been commented out
    //bData.draw(emptyMC_a); 
    //bData.draw(emptyMC_mouth); 
    //bData.draw(emptyMC_hand_l); 
    //bData.draw(emptyMC_hand_r); 


    // possible to use two bitmapDatas to merge into single?
    var byteArray:ByteArray = PNGEncoder.encode(bData);

    var fileReference:FileReference = new FileReference();
    fileReference.save(byteArray, 'myEmote.png');
    replay_b.visible = true; 
    upload_b.visible = true; 
    back_b.visible = false; 
    user_color.clear(); 
    user_eyes.clear(); 
    user_mouth.clear(); 
    user_a.clear(); 
    hand_l.clear(); 
    hand_r.clear(); 
    mouth_coords.clear(); 
    eye_coords.clear(); 
}

Я действительно понятия не имею, как мне заставить это работать. Я пытался использовать метод .merge (), я пробовал Googling уже несколько дней, и я попытался объединить их, создав два отдельных объекта bitmapData, а затем нарисовав один в другом. Ничто не помогло мне.

Если вы хотите взглянуть на программу и щелкнуть по ней, чтобы добраться до точки, в которой вы сохранили изображение, вы можете попробовать ее здесь: http://dl.dropbox.com/u/3666815/mote-machine-main.html

Если вы сохраните изображение в конце, вы увидите проблему под рукой. Я не смог найти хорошего ответа, поэтому, если кто-то может помочь, он будет очень признателен!

Заранее спасибо!

Редактировать: вот как я настроил его со Sprite в качестве контейнера, но теперь кажется, что он сохраняет пустой холст.

    var emote:Sprite = new Sprite(); 
    emote.addChild(emptyMC_mc); 
    emote.addChild(emptyMC_eyes); 
    emote.addChild(emptyMC_hand_l); 
    emote.addChild(emptyMC_hand_r); 
    emote.addChild(emptyMC_mouth); 
    if(user_a.data.accessory != "none"){
            emote.addChild(emptyMC_a); 
    } 

    var bData:BitmapData = new BitmapData(80, 80); 

    bData.draw(emote);

Может ли быть так, что у каждого из видеоклипов, которые я добавляю к спрайту, есть собственные дети?

1 Ответ

2 голосов
/ 30 января 2012

Если вы разместите свои растровые изображения в каком-либо контейнере экранного объекта, таком как Sprite, позже вы можете использовать методы «draw» и / или «copyPixels» для получения растровых данных контейнера, которые сохранят все дети на своем месте. Это должно делать то, что вам нужно.

...