程序不应当我画布上enterFrame功能
-
06-07-2019 - |
题
我已经做一个简单的应用程序和我有个问题我无法找到解决方案(既没有为什么它发生了)
事情就是我想做的就是动态的增加一个帆布包含一个按钮来的应用程序,然后我想要的画布是从屏幕左侧右侧。
所以我做了下列代码
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
creationComplete="init()">
<mx:Script>
<![CDATA[
import mx.containers.Canvas;
import mx.controls.Button;
var ccanvas:Canvas = new Canvas();
var canvasButton:Button = new Button();
public function init():void{
canvasButton.label="canvas Button";
ccanvas.x=100;
ccanvas.y=200;
ccanvas.addChild(canvasButton);
addChild(ccanvas);
addEventListener(Event.ENTER_FRAME, onEnterFrame);
}
public function onEnterFrame(event:Event):void{
ccanvas.x+=1;
}
]]>
</mx:Script>
</mx:Application>
和它的工作原理就好了。下一个步骤,而不是用画布上我使用一个自定义的画布上..这里是CustomCanvas.单成分
<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="400" height="300">
<mx:Button label="ccccButton" />
</mx:Canvas>
然后我改变了下列代码线
var ccanvas:Canvas = new Canvas()
to
var ccanvas:CustomCanvas = new CustomCanvas();
结果是,有没有帆布显示在屏幕...节目不会做任何事情。...
最怪异的事情是,如果我没有onEnterFrame,功能和我刚刚加入我的自画布init()方法,它被正确显示。甚至如果我有一个onEnterFrame,但不改变customCanvas的x值则是已经显示正常。但那一刻我写的
onEnterFunction代码ccanvas.x+=1程序没有显示任何东西。...但如果我这样做与原来的画布的对象是所有的ok,,,
这里发生了什么?我怎么我可以做一个自定义的画象和随后可能移动它在onEnterFrame,方法?
谢谢你!!!!!!
解决方案
漂亮的小问题。它看起来像成分的创建过程是在短路了某种程度上,虽然说实话,我不是很确定如何。
尽管如此,等待CustomCanvas派遣一个creationComplete事件之前,企图采取行动上显示其属性(这是很好的做法,无论如何)的修复问题。见下文,修改,以加的听众为creationComplete,并等着直到那听众被称为添加enterFramelistener:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init()">
<mx:Script>
<![CDATA[
import mx.events.FlexEvent;
import mx.containers.Canvas;
import mx.controls.Button;
private var ccanvas:CustomCanvas = new CustomCanvas();
private var canvasButton:Button = new Button();
public function init():void
{
canvasButton.label="canvas Button";
ccanvas.x = 100;
ccanvas.y = 200;
ccanvas.addChild(canvasButton);
ccanvas.addEventListener(FlexEvent.CREATION_COMPLETE, ccanvas_creationComplete);
addChild(ccanvas);
}
private function ccanvas_creationComplete(event:FlexEvent):void
{
addEventListener(Event.ENTER_FRAME, onEnterFrame);
}
public function onEnterFrame(event:Event):void
{
ccanvas.x += 1;
}
]]>
</mx:Script>
</mx:Application>
说实话,虽然我不确定之间有什么区别mx:画布并且你来CustomCanvas在这种情况下,在条款时;也许有人可以附上的那一个。但希望的解决方案将证明有益于雅,并再次,它的良好做法挠做其组件的生命周期的事情,然后再尝试与其组成部分。
希望它能帮助!