2010-11-13 92 views
0

因此创建了一个Sprite,我添加了其他游戏画面的Sprites。每个瓷砖是60×60像素大。结果我有200个孩子(那些瓷砖)的雪碧。 当我尝试startDrag()容器精灵时,移动它的滞后是非常明显的。在AS3中加入精灵?

有没有像加入瓦特精灵的方式,所以容器将只有1个孩子雪碧而不是200?因为它滞后很多可能导致它需要移动(更改x和y)所有这些200个瓷砖。我是否正确?

在这种情况下,我不能使用cacheAsBitmap属性,导致用户可以放大或缩小地图..

回答

3

甘油& Aurel确实触及真正的解决方案的关键。不过,我想补充一点。

顺便说一句,当你说移动容器时必须管理如此多的精灵位置。 CacheAsBitmap肯定会在很大程度上解决这个问题,但真正的解决方案是blitting。尝试此链接为:

http://www.adobe.com/devnet/flash/articles/blitting_mc.html

如果要求用户放大或诸如此类的东西,因为你可以随时位图数据之间切换不要紧&原来的矢量精灵。你的问题出现在移动,管理大量精灵,所以在做之前使用优化,然后让他们回到自己。

+0

哇,这看起来很酷!谢谢! :) – Rihards 2010-11-16 13:13:04

+0

加上一个伟大的链接。这是我第一次学会诀窍的地方。 – Glycerine 2010-11-16 14:59:04

0

嗯,加入他们居然会是十分困难......你会需要得到图形,代码和所有,并把它放入父...

我不认为这是问题 - 你应该做的其他事情......在这种情况下,我认为你的意思是“瓷砖”父母是瓦片地图,对吗?所以,你可能有一个2维数组(阵列数组),而不是在初始化时分析该数组,而是创建大量Sprites,尝试在每个帧中重新解析它(更快),但只添加可能看到的精灵。那就是 - 它们的X位置(在添加变焦和相机X之后)大于-sprite.width,其中高度也由缩放比例缩放,并且小于stage.width + sprite.width(同样,变焦后的宽度)。 Y也一样,只有高度属性。

+0

是的,瓷砖贴图是父项。但是当移动瓷砖贴图精灵时,如何做到所有这些东西来显示精灵时,他们应该是可见的?地图,每个瓷砖,都可以有物品,基本上它很复杂。 ; D – Rihards 2010-11-13 16:39:52

+0

您必须将显示项目存储在一个数组中。最有可能的是一个只包含定义所需Sprite的对象的数组。然后 - 遍历整个数组,只选择可以看到的项目。从这些物体制作精灵并定位它们......简单。 – 2010-11-13 17:22:08

1

我以前有过同样的问题。从某种意义上说,是否有可能将它们“结合”在一起?

当您将200个精灵添加到屏幕上时 - 我假设您将它们全部放入另一个父精灵中。

这一点 - 您将拍摄所有精灵的快照,截图或照片复制品(无论您想调用它)并将图像(bitmapData)写入父精灵。在此刻。删除/删除/隐藏/取消原始精灵,你将留下一个包含位图数据的精灵。

一个大的图像移动和缩放等是没有麻烦。

如果您需要代码 - 问。这是费时的代码,所以你先告诉我,然后我会写它:P

+0

嗯,快照的想法也不错。无论如何,如果我创建整个地图作为位图,我需要创建它3种尺寸(放大一次,放大两倍和正常大小的一个),并保持那些原因放大正常位图将使它放大时看起来丑陋。但我相信这不是问题.. – Rihards 2010-11-16 13:27:47

+0

naw ...缩放是好的。将最终产品缓存为位图,允许平滑 - 放大FP 9.5和更高版本时,它看起来很平滑。我最喜欢的技巧是使用Z相机而不是缩放。因为它使用GPU加速。告诉你今晚我会做出一个榜样 - 提醒我,我会做。 – Glycerine 2010-11-16 14:56:51