当前位置: 代码迷 >> Web前端 >> AS3加载AS2、AS3、图片以后修改其显示的大小
  详细解决方案

AS3加载AS2、AS3、图片以后修改其显示的大小

热度:152   发布时间:2012-11-01 11:11:31.0
AS3加载AS2、AS3、图片之后修改其显示的大小

因为此问题,我还跑到Adobe的官网去发贴询问。后面发现其实解决问题挺简单的。。

?

AS3.swf作为加载器需要加载AS2 AS3 和图片文件.

?

最开始在网上找到的方法是加载进来之后将evt.target.content转换成MovieClip对象,然后对该对象进行scale

?

如这篇文章讲的一样

?

http://wubingcair.blog.163.com/blog/static/309300352008958473065/

?

但是后面发现这种方式只适合加载as3的文件..

?

而且后面还发现文中确实说了,这只适合as3的文件....

?

1。当加载as2的时候,会报出 " avm1不能转换成为MovieClip"....这个原因是 avm1中的对象和avm2中的flash.display.MovieClip不是一个东西了...只是trace(evt.target.content)的时候.avm1对象出来的是MainTimeLine..另外如果加载的是图片,也会出错.出现类型强制转换的错误

?

2。按照文中的方法,在加载文件之后应该移除加载其的loader,然后将evt.target.content添加到对象列表中.当上一步出错了之后,我把evt.target.content赋给一个*类型的对象.然后将*类型的对象addChild, addChildAt. 但是还是报错.错误说,对于avm1的文件加载到avm2里面来后,不能改变其所处的层次...其实就是不能用addChild..

?

3。那么既然这样的话.赋给*类型的对象没有报错,add会报错.那我就不将loader移除,并且不add*类型对象.同时对*类型对象进行等比缩放..

?

运行 问题解决了...

?

?

                        var game:* = evt.target.content;
			
			var scale:Boolean = game.width / game.height > g_width / g_height  
			
			var scaleRate:Number = scale ? g_width / game.width : g_height / game.height;
			
			game.scaleX = game.scaleY = scaleRate;
			
			game.x = (g_width - game.width) / 2;
			
			game.y = (g_height - game.height) / 2;
?
  相关解决方案