Показать другой экземпляр спрайта - PullRequest
3 голосов
/ 03 июня 2011

Можно ли показать еще один экземпляр спрайта? Я пытаюсь создать анимированный спрайт.
То, что у меня есть, - это мой Sprite, называемый «canvas», в котором есть вещи, которые оживляют с помощью AS3. И то, что я хочу сделать, это показать, что его копия перевернута, под ним, чтобы выглядеть как отражение. Я попробовал следующий код, но безуспешно, он просто все скрывает? ..

addChild(canvas);
var reflection:Sprite = new Sprite();
addChild(reflection);
reflection.addChild(canvas);

Есть идеи, почему этот код не работает? Или у вас есть лучший способ подойти к этому.
Спасибо

Ответы [ 2 ]

3 голосов
/ 03 июня 2011

Вы можете использовать BitmapData для этого.

члены класса:

// flip vertically and shift by 100 (insert your canvas size)
private var reflect:Matrix = new Matrix(1, 0, 0, -1, 0, 100);
// instanciate BitmapData with 100x100 size (insert your canvas size),
// filled with black but with 100% transparancy, it's an
// ARGB value (0 == 0x00000000)
private var reflectionData:BitmapData = new BitmapData(100, 100, true, 0);
private var reflection:Bitmap = new Bitmap(reflectionData);

init:

// you might want to draw canvas already on startup
reflectionData.draw(canvas, reflect);
reflection.x = canvas.x;
reflection.y = canvas.y + canvas.height;
addChild(reflection);

для анимации / перерисовки

// clear to transparency
reflectionData.fillRect(reflectionData.rect, 0);
// draw the current canvas with matrix applied
reflectionData.draw(canvas, reflect);
1 голос
/ 03 июня 2011

У вас почти та же проблема, что и в этом ответе:

Добавление нескольких экземпляров Sprite?

Это скажет вам, почему ваш существующий код не работает.

Что касается выполнения того, что вы хотите сделать, я бы просто использовал растровый объект, чтобы нарисовать инвертированный оригинальный спрайт. Вы можете сделать это, используя объект Matrix, переданный в функцию Bitmap.draw в качестве параметра. Когда вы создаете матрицу, просто инвертируйте значение масштаба 1 для вертикального измерения и установите его в -1. Вот учебник о том, как это сделать:

http://www.adobe.com/devnet/flash/articles/reflect_class_as3.html

Они могут не использовать матричное преобразование и могут просто инвертировать масштаб спрайта, содержащего битовые данные, я не уверен, что не прочитал полное руководство. Все, что я знаю, это то, что этот урок даст вам именно то, что вы хотите сделать (есть пример).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...