AS3加载图片等外部资源

关于AS3加载图片等外部资源,常用的有两种方式:Loader和Embed,各自的特点,总结如下:

Embed:在Flash编译阶段就将资源嵌入,也就是说图片资源是会被编译进swf文件里面去的;这样子的好处是代码比较简洁,使用方便,也不存在加载顺序的问题,缺点是会增大swf文件的体积 Loader:在Flash运行阶段动态加载资源,这种方式不会影响swf文件的体积,而且可以很灵活地更改你要加载的资源,但是有可能会遇到路径变更或者跨域问题,同时,过多地使用Loader去动态加载无疑会加重服务器负担,因此需要和Embed权衡使用

书写的例子如下:
Embed:
[Embed(source = "../assets/images/closeBtn.png")]
privatevar closeBtnImage:Class//需要嵌入的图片对象
privatevar btnSprite:Sprite = newSprite();
privatefunctiontest():void{
var bmp:Bitmap = new closeBtnImage();
btnSprite.addChild(bmp);
}

Loader:
privatefunction addItem():void{
varloader:Loader = newLoader();
loader.load(newURLRequest("http://zhufei.de/something.png"));
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadComplete);
}

//监听到Loader加载完毕以后执行的函数
privatefunction loadComplete(e:Event):void{
var l:Loader=Loader(e.target.loader);//得到Loader对象
var bm:Bitmap = Bitmap(l.content);//Loader里面的内容
trace(l);
trace(bm);
}

 

 

位图占内存大的处理方法:

通过URLLoader指定BINARY方式读取图片文件,其data属性就是JPG或者其它压缩格式的ByteArray数据。保存图片ByteArray数据到内存。再通过loader.loadBytes来加载ByteArray数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Unity中实现照片墙的外部加载生成,你可以使用Unity的AssetBundle系统来加载并生成照片墙。下面是一个简单的示例代码: ```csharp using UnityEngine; using System.Collections; using System.IO; public class PhotoWallLoader : MonoBehaviour { public string assetBundleURL; // AssetBundle的URL public GameObject photoPrefab; // 照片的预制体 public int rows = 3; // 照片墙的行数 public int columns = 3; // 照片墙的列数 IEnumerator Start() { // 加载AssetBundle using (WWW www = new WWW(assetBundleURL)) { yield return www; if (www.error != null) { Debug.LogError("Failed to load AssetBundle: " + www.error); yield break; } AssetBundle bundle = www.assetBundle; // 从AssetBundle中加载照片并生成照片墙 if (bundle != null) { string[] assetNames = bundle.GetAllAssetNames(); for (int row = 0; row < rows; row++) { for (int col = 0; col < columns; col++) { string assetName = assetNames[row * columns + col]; GameObject photo = Instantiate(photoPrefab); // 实例化照片预制体 photo.transform.SetParent(transform); // 设置照片的父对象为照片墙游戏对象 StartCoroutine(LoadPhotoTexture(photo, bundle, assetName)); // 异步加载照片纹理 } } bundle.Unload(false); } } } IEnumerator LoadPhotoTexture(GameObject photo, AssetBundle bundle, string assetName) { AssetBundleRequest request = bundle.LoadAssetAsync<Texture2D>(assetName); yield return request; Texture2D texture = request.asset as Texture2D; if (texture != null) { Renderer renderer = photo.GetComponent<Renderer>(); renderer.material.mainTexture = texture; } } } ``` 在上述示例中,我们创建了一个名为`PhotoWallLoader`的脚本。它有公共变量`assetBundleURL`用于指定AssetBundle的URL,`photoPrefab`用于指定照片的预制体,以及`rows`和`columns`用于指定照片墙的行数和列数。 在`Start`函数中使用`WWW`类异步加载AssetBundle,并在加载完成后从AssetBundle中获取所有资源的名称。然后,使用两个嵌套的循环遍历每个照片的位置,使用`Instantiate`实例化照片预制体,并将其父对象设置为照片墙游戏对象。接下来,使用`LoadAssetAsync`异步加载照片纹理,并将纹理应用到照片的材质。 你需要在Unity中创建一个AssetBundle,包含你想要加载的照片资源。可以使用Unity的AssetBundle Build Pipeline工具来构建AssetBundle。然后,在Inspector面板中设置`assetBundleURL`为你的AssetBundle的URL。确保URL正确,并且你的AssetBundle可以在运行时访问。 将这个脚本添加到Unity场景中的一个游戏对象上,并根据需要设置`photoPrefab`、`rows`和`columns`等参数。当你运行游戏时,它将异步加载AssetBundle,并根据加载的照片资源动态生成照片墙。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值