package import flash display Sprite import flash display StageScaleMod

 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
package
{
import flash.display.Sprite;
import flash.display.StageScaleMode;
import flash.display.StageAlign;
import flash.events.Event;
import flash.text.TextField;
/**
* Пример "резинового" спрайта, тянется по ширине. Вместо спрайта может быть и мувиклип ...
* @author shrewmus
*/
public class ASResize extends Sprite
{
private var mySprite:Sprite;//спрайт, прямоугольник
private var stWidth:Number;//начальная ширина стейджа, вместо нее можно взять заранее заданную величину
private var stHeight:Number;//начальная высота стейджа, вместо нее можно взять заранее заданную величину
private var spHeightProc:Number;//процент высоты от высоты стейджа
private var spWidthProc:Number;//процент ширины от ширины стейджа
private var tf:TextField;
public function ASResize()
{
stage.scaleMode = StageScaleMode.NO_SCALE;//задаем, чтобы флеш вызывал событие ресайза
stage.align = StageAlign.TOP_LEFT;//можно поиграться и с другим выравниванием
stWidth = stage.stageWidth;//начальная ширина стейджа = 100%, вместо этого можно конкретно задать число
stHeight = stage.stageHeight;//начальная высота стейджа = 100%, вместо этого можно конкретно задать число
//рисуем спрайт в верхнем левом углу, вместо него может быть мувик
mySprite = new Sprite();
mySprite.graphics.beginFill(0xff0000, 1);
mySprite.graphics.drawRect(0, 0, 200, 300);
mySprite.graphics.endFill();
addChild(mySprite);
/*
* вычисляем процент, занимаемый спрайтом от размеров стейджа,
* можно наоборот - задать процент, по ним вычислить
* размеры спрайта
*/
spHeightProc = mySprite.height * 100 / stHeight;
spWidthProc = mySprite.width * 100 / stWidth;
/*
* Вспомогательное текстовое поле
*/
tf = new TextField();
tf.width = stWidth / 2;
tf.height = stHeight / 2;
tf.mouseEnabled = false;
tf.multiline = true;
tf.wordWrap = true;
addChild(tf);
tf.text = "Высота сцены: " + stage.stageHeight + "\n" + "Ширина сцены: "
+stage.stageWidth + "\n" + "Высота спрайта: " + mySprite.height + "\n" +
"Ширина спрайта("+spWidthProc.toString()+"%): " + mySprite.width;
//добавляем обработку события ресайза стейджа
stage.addEventListener(Event.RESIZE, testRes);
}
private function testRes(e:Event):void {
// при ресайзе стейджа изменим ширину спрайта в соответствии с вычисленным процентом
mySprite.width = spWidthProc * stage.stageWidth / 100;
//меняем текст поля
tf.text = "Высота сцены: " + stage.stageHeight + "\n" + "Ширина сцены: "
+stage.stageWidth + "\n" + "Высота спрайта: " + mySprite.height + "\n" +
"Ширина спрайта("+spWidthProc.toString()+"%): " + mySprite.width;
}
}
}