FlashBuilder环境下使用Starling出现的问题收集整理
????????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?By:童年 刚开始学习Starling框架,遇到了不少问题,苦于无解,向Starling中文交流群求助。问题得到一 一解决。在这里非常感谢他们的热心回答。这篇博客就当作我在学习过程中遇到的问题的的罗列总结吧。希望对各位有所帮助,文章中如果有不对的地方,非常欢迎和感谢能够留言指出。
出现如上的信息,说明Starling框架并没有起到作用,而是根据内部的SwiftShader(Transgaming)的的软件回退引擎,采用software模式运行。 这时候就要检查下自己电脑的显卡了。关于显卡,先补充点知识,来自网上:
确保你电脑的显卡支持DirectX或者OpenGL,如果你的机子显卡是集成显卡的话,可能不支持;如果有独立显卡,确保当前开启了高性能GPU。由于我使用的笔记本有着双显卡。
一个是AMD的独显,一个是英特尔高清显卡系列属于集成显卡。当时在FlashBuilder下编码调试的时候,谁知道我的笔记本开启的是省电GPU模式,控制台输出是software模式。如果读者遇到类似情况,可以按照如下开启高性能GPU模式,切换到独立显卡。
图1 ?右击桌面,出现图1,选择显示卡属性。
图2 ??在电源选项中选择可切换显卡
图3 ??? ??选择高性能GPU,OK。过个几秒,等待系统切换。
?切换完毕后,再次回到FlashBuilder中,调试看控制台信息:
??显然Starling的GPU加速已经成功开启。
如果你调试采用的是浏览器调试,不是swf直接调试,也就是你在项目属性里的编译器选项里面勾选了HTML包装器,使用的是系统默认浏览器或者IE浏览器,确保你的浏览器安装了debug版本。 如何知道我是否安装呢? 用这个网址测试。?http://www.flashplayerversion.com/
如果是Yes,你调试仍然看不见舞台上的东西,看看你的入口文件中是否有 stage.scaleMode = StageScaleMode.NO_SCALE; stage.align = StageAlign.TOP_LEFT; 如果有的话注释掉,再次调试测试,应该就可以看见了。 如果出现
的话,打开html包装器文件夹也就是html-template文件夹,用文本编辑器打开html-template.html文件,在js里面的params加入如下一行 params.wmode = "direct"; 就像如下: var params = {}; params.quality = "high"; params.bgcolor = "${bgcolor}"; params.allowscriptaccess = "sameDomain"; params.allowfullscreen = "true"; params.wmode = "direct";
???在浏览器下,SWFOBJECT嵌入swf的时候,有瞬间的stage的width和height是0导致的,而 stage.scaleMode ?= StageScaleMode.NO_SCALE这句话会瞬间导致stage的width和height为0。 ???那怎么解决? ???方法1:不用html包装器,在编译器里面不勾选 ???????????? ???方法2:在使用html包装器的情况下,可以延迟初始化starling。 private var mStarling:Starling; public function StartUp():void{ stage.scaleMode = StageScaleMode.NO_SCALE; stage.align = StageAlign.TOP_LEFT; setTimeout(initStarling,1000); } private function initStarling():void{ mStarling = new Starling(Game,stage); mStarling.antiAliasing = 1; mStarling.start(); } setTimeout(initStarling,1000);这是Flash预留了1秒处理舞台尺寸,然后处理初始化starling函数。 方法3:在使用html包装器的情况下,加入舞台重置尺寸事件的侦听来处理。 public function StartUp() { stage.align = StageAlign.TOP_LEFT; stage.scaleMode = StageScaleMode.NO_SCALE; if (stage.stageWidth>0 && stage.stageHeight>0){ start(); }else{ stage.addEventListener(Event.RESIZE,onResize); } } private function onResize(e:Event):void { if (stage.stageWidth>0 && stage.stageHeight>0){ stage.removeEventListener(Event.RESIZE,onResize); start(); } } public function start():void{ starlingEngin = new Starling(Game,stage); starlingEngin.antiAliasing = 1; starlingEngin.start(); } ???????群里网友也提到了用Preloader预加载处理窗口大小,读者可以去尝试下。 如有问题,追补下一篇。学习中。 如果文章中有不对的地方,请指出来,以免误导。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |