Как я могу объединить несколько объектов bitmapData в один, чтобы его можно было закодировать с помощью PNGEncoder?

Я создаю программу, которая фактически является создателем спрайтов. Я очень новичок в 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(), уже несколько дней пробовал гуглить и пытался объединить их, создав два отдельных объекта 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);

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


person SanguineEpitaph    schedule 30.01.2012    source источник


Ответы (1)


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

person James Tomasino    schedule 30.01.2012
comment
Привет! Спасибо за ответ. Я добавил спрайт в функцию save_emote и попытался прикрепить к нему МС на сцене как дочерние элементы, но почему-то теперь он сохраняет пустой холст. Я настроил его с помощью new Sprite(), а затем объект bitmapData использует .draw(sprite). Как бы вы порекомендовали мне это сделать? Я отредактировал свой первоначальный вопрос с новым кодом. - person SanguineEpitaph; 30.01.2012
comment
Хорошо, сотрите это. Я заставил это работать, прикрепив дочерние фрагменты роликов к спрайту. Теперь он сохраняет их все в PNG, мне просто нужно выяснить, как сделать их правильное позиционирование. Спасибо за помощь! - person SanguineEpitaph; 30.01.2012