Авг
10

Режим Fullscreen для игр

Долго я пытался понять, как добавить в игры режим Fullscreen (на весь экран). Долго искал решение в инете, но мало что нашел. Пришлось эксперементировать самому. Итак, вот решение.

Небольшое отступление: во всех своих играх я использую программное создание маски для stage по размерам игры, дабы ничего лишнего за пределами экрана не было видно. Именно с этой маской были некоторые сложности.

Шаг 1. Чтобы узнавать, когда флэш-плеер переходит в полноэкранный режим, нам нужно отлавливать событие Event.FULLSCREEN

Шаг 2. Заранее, ещё при запуске игры и добавлении главного класса на сцену (stage), нужно посчитать коэффициент (scale), на который мы будем увеличивать или уменьшать размеры флэшки в зависимости от размера экрана компьтера (или мобильного телефона), на котором наша игра запускается.

Шаг 3. При тестировании на локальном компьютере не забудьте в настройках Flash CS для HTML указать «Template: Flash Only — Allow Full Screen», либо запускайте игру отдельно после компиляции с диска.

Вот, собственно сам код:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
package
{
import flash.display.*;
import flash.events.*;
import flash.ui.*;
import flash.utils.*;
import flash.media.*;
import flash.geom.*;
import flash.system.*;

public class MainClass extends MovieClip
{
/* Тут всякие переменные */

var _GameScale:Number = 1; //коэффициент масштабирования
var _FSx:Number = 0; //координата X всей игры в fullscreen mode
var _FSy:Number = 0; //координата Y всей игры в fullscreen mode
const _myGameWidth:uint = 640; //пропишите здесь размеры вашей игры
const _myGameHeight:uint = 480;

//Создание главного класса
public override function MainClass()
{
addEventListener(Event.ADDED_TO_STAGE, initMainClass);
}
//Эту функцию можно вызывать вручную из игры, допустим при нажатии на кнопку
function GoFullScreen()
{
if (stage.displayState == StageDisplayState.NORMAL) stage.displayState = StageDisplayState.FULL_SCREEN
else stage.displayState = StageDisplayState.NORMAL;
}
//Сама функция перехода в fullscreen mode
function FullScreenChange(e:FullScreenEvent)
{
if (e.fullScreen) {
trace("Fullscreen ON");
this.x = _FSx;
this.y = _FSy;
this.scaleX = _GameScale;
this.scaleY = _GameScale;
// entered full screen
} else {
trace("Fullscreen OFF");

this.x = 0;
this.y = 0;
this.scaleX = 1;
this.scaleY = 1;
}
}
function initMainClass(e:Event)
{
//Создание маски по размерам игры
var _tmp:mySprite = new mySprite();
_tmp.graphics.beginFill(0x000000);
_tmp.graphics.drawRect(0, 0, _myGameWidth, _myGameHeight);
_tmp.graphics.endFill();
this.mask = _tmp;
addChild(_tmp); //Обязательно добавить маску на сцену, иначе она не будет масштабироваться
_tmp = null;

removeEventListener(Event.ADDED_TO_STAGE, initMainClass);
stage.addEventListener(Event.FULLSCREEN, FullScreenChange, false, 0, true);

//Проверяем размеры экрана и соотношение сторон для прехода в полноэкранный режим. Игра всегда будет выровнена по середине экрана
var ScreenWidth:int = Capabilities.screenResolutionX;
var ScreenHeight:int = Capabilities.screenResolutionY;

var _WW:uint = ScreenWidth;
var _HH:uint = ScreenHeight;

if (_WW / _HH > _myGameWidth / _myGameHeight)
{
_GameScale = _HH / _myGameHeight;
_WW = myGameWidth * _GameScale;
} else _GameScale = _WW / _myGameWidth;
if (_HH < ScreenHeight)
{
_FSy = (ScreenHeight - _HH) * 0.5;
}
if (_WW < ScreenWidth)
{
_FSx = (ScreenWidth - _WW) * 0.5;
}
}

} //class
} //package



Прокомментировать



ЗАДАЙ СВОЙ ВОПРОС