Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Как реализовать полноэкранный режим в игре? (http://www.flasher.ru/forum/showthread.php?t=155532)

Alexd21 05.05.2011 22:03

Как реализовать полноэкранный режим в игре?
 
В игре требуется реализовать полноэкранный режим.

Структура отображения графики на флешке следующая:

спрайты наложенные друг на друга и в каждом спрайте нарисованы элементы
1 спрайт: фон
2 спрайт: все элементы управления
3. главные герои
4 спрайт окна сообщений

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

варианты решений использующие html и javascript не подходят, т.к. игра звгружается на платформу вконтакте.
Нужно решение средствами as3.

expl 05.05.2011 22:07

Стандарт:
Код AS3:

stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;

ловить события Event.RESIZE у stage и смотреть изменение stage.stagеWidth и stage.stageHeight.

Alexd21 05.05.2011 22:17

Цитата:

Сообщение от expl (Сообщение 994212)
Стандарт:
Код AS3:

stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;

ловить события Event.RESIZE у stage и смотреть изменение stage.stagеWidth и stage.stageHeight.

Вопрос был:Как сделать чтобы растягивался только фон?
при использовании StageScaleMode.NO_SCALE не растягивается ничего вообще. А просто осуществляется переход без искажений. А расятнуть один слой всетаки нужно.


Заранее спасибо тем кто даст конкретный ответ без теоретических выкладок.

i.o. 05.05.2011 22:29

все верно вам сказали. Дальше ручками перечитываете позиции всех элементов

TWETTI 05.05.2011 22:34

Код AS3:

package 
{
        import flash.display.Sprite;
        import flash.display.StageAlign;
        import flash.display.StageScaleMode;
        import flash.events.Event;
 
        public class Main extends Sprite
        {
                private var backgroundSprite:Sprite;
                private var someButton:Sprite;
 
                public function Main():void
                {
                        // Отключение масштабирования и задание выравнивания по верхнему левому краю.
                        stage.scaleMode = StageScaleMode.NO_SCALE;
                        stage.align = StageAlign.TOP_LEFT;
 
                        // Фон
                        backgroundSprite = new Sprite();
                        backgroundSprite.graphics.beginFill(0x000000);
                        backgroundSprite.graphics.drawRect(0, 0, stage.stageWidth, stage.stageHeight);
                        backgroundSprite.graphics.endFill();
                        addChild(backgroundSprite);
 
                        // Некоторая кнопка.
                        someButton = new Sprite();
                        someButton.graphics.beginFill(0xFF0000);
                        someButton.graphics.drawRect(0, 0, 50, 20);
                        someButton.graphics.endFill();
                        someButton.x = stage.stageWidth - someButton.width - 10;
                        someButton.y = stage.stageHeight - someButton.height - 10;
                        addChild(someButton);
 
                        // Регистрация слушателя события.
                        stage.addEventListener(Event.RESIZE, onStageResize);
                }
 
                private        function onStageResize(event:Event):void
                {
                        // Изменение габаритов фона.
                        backgroundSprite.width = stage.stageWidth;
                        backgroundSprite.height = stage.stageHeight;
 
                        // Изменение координат кнопки.
                        someButton.x = stage.stageWidth - someButton.width - 10;
                        someButton.y = stage.stageHeight - someButton.height - 10;
                }
 
        }
 
}


Dukobpa3 05.05.2011 22:37

Цитата:

Заранее спасибо тем кто даст конкретный ответ без теоретических выкладок.
Без теоретических выкладок внапряг ;)

Для того чтобы растянуть что-то одно, видимо у стейджа таки должен стоять режим
Код AS3:

stage.scaleMode = StageScaleMode.NO_SCALE;

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

Всего-то и нужно просто вникнуть в то что вам отвечают, по сути ничего нового к предыдущему ответу я не добавил)

Добавлено через 37 секунд
о как)))

Пока писал столько наотвечали)

fish_r 05.05.2011 22:55

вроде есть какие то скрипты для автообработки ресайза? не?

Dukobpa3 05.05.2011 22:57

Цитата:

вроде есть какие то скрипты для автообработки ресайза? не?
Гугл, не?))

Там собственно обрабатывать то нечего. Пытался по началу юзать какой-то фреймворк (там весь фреймворк на 300 строк кода тянет не больше), потом понял что нуевонафиг и пишу такой фреймворк руками под каждый проект.

Alexd21 05.05.2011 23:14

может поделитесь своим фреймворком?

Dukobpa3 05.05.2011 23:17

Для игры маловероятно что-то универсальное...
МВЦ пробуй.

А для сайтов собственно могу, но надо ли, я его и сам не пользую в виду унылости...


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

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