Как выборочно замаскировать части сцены? - PullRequest
0 голосов
/ 24 января 2011

Я делаю флеш игру, и у меня есть постановочная маска, чтобы ваш персонаж мог видеть только ее часть. Тем не менее, я не хочу маскировать всю сцену, я хочу только маскировать «Игровую зону». Представь, что моя сцена 800х800. Тем не менее, «Игра» занимает только область сверху, 800 на 600. Внизу есть 200 пикселей, где я могу использовать для общения или отображения информации, когда ваш персонаж ходит по игровой зоне.

Проблема в том, что я настраиваю свою маску, и она маскирует / все / на сцене. Даже если у меня есть что-то за пределами «игровой зоны», оно все еще скрыто за маской. Итак, мой вопрос в том, как я могу использовать свою маску в «игровой области» в моем приложении флэш-памяти, чтобы не затронуть другие части моего приложения? Могу ли я выборочно положить предметы над маской?

Спасибо!

Редактировать: Уточнение. Моя игра начинается с инициализации объекта GameScreen:

game = new GameScreen(); //800 x 600.  Declared as class variable
game.y = 40;
addChild(game);

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

var rect:Shape = new Shape();
rect.graphics.lineStyle(1, 0x000000);
rect.graphics.beginFill(0x000000);
rect.graphics.drawRect(0,0,800,600);
rect.graphics.endFill();
rect.y = 40;
addChild(rect);

///
/// Start the game
///
game = new GameScreen();
game.y = 40;
addChild(game);

Когда объект GameScreen инициализируется, он создает «дыру», чтобы вы могли видеть своего персонажа.

fogOfWar = new CircleMask();
                addChild(fogOfWar);
                this.mask = fogOfWar;
                fogOfWar.x = player.x;
                fogOfWar.y = player.y;

Итак, теперь у нас есть настройки игры с круглым отверстием в маске, и игрок может видеть своего персонажа. Однако, также, когда объект Game Screen инициализируется, он помещает информационную панель на экран. Эта информационная панель также скрывается маской. Игрок не может видеть его. Проблема в том, что я хочу, чтобы эта панель (и другие компоненты, которые будут добавлены позже) была видна игроку всегда. Я не могу просто изменить форму «дыры» в маске, потому что она движется вместе с игроком. Так как же я могу позволить игроку видеть эту информационную панель, пока она скрывает игровую область?

Еще раз спасибо!

1 Ответ

2 голосов
/ 24 января 2011

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

В этом сообщении в блоге четко объясняется, как создать программную маску в AS3.

Из того, что я могу собрать, у вас есть маска, просто сидящая на сцене, ее нужно применить к другому DisplayObject, чтобы быть полезным. В этот момент маска будет двигаться вместе с этим DisplayObject, так что вы можете поместить вещи вперед, назад, как вам захочется.

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

...