我正在尝试让我的主类调整大小到浏览器窗口大小。我在舞台上听Event.RESIZE,更新我的宽度/高度以匹配stageWidth / stageHeight,并绘制一个矩形来显示它有多大。
当我调整大小时,每当事件发生时,它会在小尺寸和大尺寸之间闪烁。两种情况下的宽度和高度都是正确的,但在“小”的情况下,一切都在一个小盒子里。
Big Size http://files.seanhess.net/questions/browserresizebig.png
Small Size http://files.seanhess.net/questions/browserresizesmall.png
这是我的代码
package
{
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.events.Event;
import flash.text.TextField;
public class main extends Sprite
{
public function main()
{
stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.addEventListener(Event.RESIZE, onResize);
var text:TextField = new TextField();
text.text = "Some Text";
addChild(text);
}
private function onResize(event:Event):void
{
this.width = stage.stageWidth;
this.height = stage.stageHeight;
trace("RESIZE " + width + " " + height);
this.graphics.clear();
this.graphics.beginFill(0x000000, 0.5);
this.graphics.drawRect(0, 0, this.width, this.height);
}
}
}
这样做的正确方法是什么?我究竟做错了什么?谢谢!
答案 0 :(得分:3)
问题是,宽度和高度的setter的默认实现只是scaleX和scaleY的别名...当你有一个宽度为100的Sprite,并且你将它的宽度设置为200,而不是它只是水平拉伸因子2 ...同时,默认的getters只返回屏幕上的有效宽度和高度,所以如果你绘制到精灵,它的宽度和高度会相应更新......
这应该是完美的工作:
private function onResize(event:Event):void
{
this.graphics.clear();
this.graphics.beginFill(0x000000, 0.5);
this.graphics.drawRect(0, 0, stage.stageWidth, stage.stageHeight);
}
答案 1 :(得分:1)
看起来你的Sprite正在做正确的事情,但TextField是导致问题的因素。所以,如果你更新它的宽度和高度也可以:
package
{
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.events.Event;
import flash.text.TextField;
public class asProj extends Sprite
{
private var text:TextField;
public function asProj()
{
stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.addEventListener(Event.RESIZE, onResize);
text = new TextField();
text.text = "Some Text";
addChild(text);
}
private function onResize(event:Event):void
{
this.width = stage.stageWidth;
this.height = stage.stageHeight;
text.width = this.width;
text.height = this.height;
trace("RESIZE " + this.width + " " + this.width);
this.graphics.clear();
this.graphics.beginFill(0x000000, 0.5);
this.graphics.drawRect(0, 0, this.width, this.height);
}
}
}