我正在制作一款游戏,我需要在地铁冲浪中整合Facebook领队和Facebook朋友的邀请。我使用官方facebook sdk并完成了它。但我所遵循的方法效率不高。
我的朋友邀请屏幕有自己的用户界面,所以我无法使用facebook SDK附带的默认弹出窗口。 我从图api中获取所有朋友列表它为我提供了所有用户ID的列表。但我需要在滚动列表中显示朋友的姓名和图像。我异步地从url中获取图像,但每当我尝试获取图像时,我的滚动列表就会挂起。这是我的代码
IEnumerator start ()
{
url ="http://profile.ak.fbcdn.net/hprofile-ak-prn2/t5/1116929_100003613987476_290892640_q.jpg";
WWW www = new WWW(url);
yield return www;
var texture = www.texture;
this.gameObject.GetComponent<UITexture>().mainTexture = texture;
}
我正在使用协同程序,但我不知道为什么我的滚动挂起滚动如果它们是异步的?代码来自here。我已经检查了线程,但www
不能在线程中使用。我只想平滑我在图像提取过程中使用NGUI sdk制作的滚动视图。
问题1 - 如何通过异步图像下载同时进行平滑滚动。
问题2 - 我将每个图像加载到NGUI的UITexture中,我在运行时实例化。但是,如果一个人有200或以上的朋友,那么我的应用程序的内存达到顶点,最终应用程序崩溃。有没有其他方法来加载大量的图像,以便他们采取合理的记忆。
Scroll在编辑器上进行Web调用时工作正常但在设备(iOS)上没有。为什么?
请大家帮我平滑滚动视图和内存问题。任何帮助都将受到高度赞赏。 Thakks:)
答案 0 :(得分:3)
对于任何包含超过50个包含图像的项目的列表,这是设备上的常见问题。您需要控制两件事:初始化列表项和下载资产。
您不需要一次加载所有内容并显示它们。我建议将其分为三部分:
获取所有用户的Facebook好友并将其存储在列表中。 不包括下载个人资料图片,仅包含基本信息和个人资料图片的网址。我们将在稍后的步骤下载图片。
不要创建超过您在任何给定时间可以显示的列表项的三倍。滚动时,您只需重复使用已创建的那些:
只有当用户抬起手指并且列表有足够的动力继续滚动时,您才需要在该图片中执行第三步。否则,当用户只是拖动列表时,您应该在内存中加载足够的项目以不需要此项。
在结尾或开头移动列表项时(取决于滚动的方向),您应该加载好友的数据。您仍然可以在此步骤不加载个人资料照片。
您可以使用Unity的OnBecameVisible方法来确定项目当前何时可见。但通常你需要一个能够跟踪任何特定时刻可见项目的经理。
每次滚动列表没有动量并且用户没有拖动它时,您排队请求以获取当前可见项目的图像。这应由执行以下操作的其他经理处理:
当然,这是非常高的水平。这里有很多东西可以用很多不同的方式来实现。但我希望你明白这一点。
答案 1 :(得分:2)
您可以制作加载屏幕或其他类似用户必须等待查看/使用滚动条的内容(尽管我从未见过用于加载Facebook图片的游戏)或您将不得不放弃同时显示它们并创建一个可以同时使用的少量WWW连接池,即限制同时加载的图像数量,并且仅限一个人完成后开始加载新图像。
现在有一件事可以加快速度 - 不是第一次运行它,而是后续运行 - 是使用WWW.LoadFromCacheOrDownload()
而不是new WWW()
。此方法将存储过去下载的图片并加载它们而不是重新下载。这就是我见过的每一款Unity游戏都与Facebook融合的方式。