我有绘制到html5画布的Renderer类,我希望它在调整窗口大小时重绘东西。问题是update()代码只执行一次 - 在initialize()内部 - 并且调整窗口大小不会做任何事情。另一方面,每次调整窗口大小时都会执行onWindowResized()。那么,错误在哪里?
/// <reference path="../lib/easeljs.d.ts" />
/// <reference path="../lib/tweenjs.d.ts" />
/// <reference path="../lib/soundjs.d.ts" />
/// <reference path="../lib/preloadjs.d.ts" />
class Renderer
{
private mStage:createjs.Stage;
private mShape:createjs.Shape;
public initialize (stage:createjs.Stage):void
{
this.mStage = stage;
this.mStage.autoClear = true;
this.update ();
window.onresize = this.onWindowResized;
}
public update ():void
{
if (this.mStage)
{
this.mStage.canvas.width = window.innerWidth;
this.mStage.canvas.height = window.innerHeight;
this.mShape = new createjs.Shape();
this.mShape.graphics.beginFill("#dddddd");
this.mShape.graphics.drawRect(0, 0, this.mStage.canvas.width, this.mStage.canvas.height);
this.mShape.graphics.beginFill("#ff4400");
this.mShape.graphics.drawCircle(this.mStage.canvas.width / 2, this.mStage.canvas.height / 2, 25);
this.mStage.addChild(this.mShape);
this.mStage.update();
}
}
private onWindowResized (event:UIEvent):void
{
this.update();
}
}
答案 0 :(得分:2)
你将遇到的问题是,当事件执行时,它将在事件的上下文中(调整大小的窗口,用于点击的鼠标元素,鼠标悬停等),而不是你的类 - 所以{{1} }不会是你班上的一个句柄。
您可以使用...
来解决它this
这是window.onresize = this.onWindowResized.bind(this);
比fat-arrow语法更优雅的一个实例。