1

我们正在使用ActionScript 3.0通过Flash 5.5制作一款适用于手机的简单Flash游戏。我们垂直对齐一组对象,直到它们碰到舞台顶部的另一个对象。我们用10个MovieClip动画之一实例化数组中的每个元素。每个对象都有两个事件监听器;一个用于垂直动画,另一个用于听取鼠标点击(将对象从舞台上移除)。当一次有超过10个物体在舞台上时,我们遇到了一个问题。问题是这些物体偶尔消失,没有解释。我们假设问题是由于某种类型的内存/垃圾收集问题。下面是我们代码的一个小例子,它将MovieClip实例分派到舞台上。AS3 - 舞台上的物品无意中消失

function dispatch(e:TimerEvent):void{ 
     if(count < srrayFinal.length) 
     { 
      addChild(sArrayFinal[count]); 
      sArrayFinal[count].x = randomNumberXtart(); 
      sArrayFinal[count].addEventListener(Event.ENTER_FRAME, fl_AnimateVertically, false, 0, true); 
      sArrayFinal[count].addEventListener(MouseEvent.CLICK, taphandler, false, 0, true); 
      sArrayFinal[count].y = 480; 
      count++; 
     } 
     else 
     { 
      timer.stop(); 
      timer.removeEventListener(TimerEvent.TIMER, dispatch); 
      timer = null; 
     } 
    } 

为了让影片剪辑不会消失,我们可以做些什么? 谢谢!

+0

你没有在这段代码中显示任何东西。你可以请更新并显示更多的代码,例如ENTER_FRAME和CLICK事件的回调,以及生成movieclip并放入数组的代码。 – 2011-06-04 11:11:39

+2

我认为这个问题不是垃圾回收问题,当你在可视化树上有一个DisplayObject(通过'addChild')时,它不会被收集。 – dain 2011-06-04 12:56:26

+0

是否有机会将动画片段添加到已在舞台上的舞台上?当发生这种情况时,动画片段似乎消失并重新出现。只是一个想法。 – Ian 2011-06-04 16:53:29

回答

1

我没有看到任何地方的对象实例化的代码。相反,我看到已经实例化的对象被移动到位。我猜测发生的事情是,你只有10个实例初始化的对象,所以当你试图派发一个“新”的实体时,你实际上正在做的是将一个现有的对象从中间的任何地方移动的舞台,并将其放回原点。

+0

谢谢你的回答。我明白你的意思是围绕一个对象移动而不是创建新对象。现在,这将我们带入了我们真正的问题,一般来说,人们如何从库中获取符号并在代码中创建它的副本?我们正在处理大量实例和只有10个对象,那么我们如何才能有效地“派发新对象”的相同符号?此外,我们如何摆脱他们的新水平?再一次,非常感谢,这当然是我们短视的主要原因。 – Raddfood 2011-06-04 20:27:12

+0

库中的影片剪辑必须链接到代码。然后在代码中使用“new”关键字来实例化副本。 – jhocking 2011-06-04 20:45:08

+0

jocking你是绝对正确的。当我们试图派发一个已经在屏幕上的类型的新对象时,屏幕上的对象消失并且重新定位在屏幕的底部。这是因为我们不止一次地引用了对象的实例化。非常感谢! – Raddfood 2011-06-05 00:20:32

1

我一直在学习AS3,或多或少地具有3D功能的裂缝........ 任何方式我创建了一个视觉上体面的3D旋转笔记本

您可以在这里WWW查看.parelle.com.au

我的问题是图形消失一旦某些视觉效果/动画发生,例如,如果你检查网站链接上方的键盘和屏幕是另一个身体(电影剪辑)中包含的单独的电影剪辑屏幕是动画的键盘不是,所以在10秒左右后,屏幕或某些部分会消失,直到鼠标移动或已经被渲染的东西

我简单的解决方法是使隐藏的动画与电影片段连续播放,保持闪光灯忙碌渲染MC保持在屏幕上

的一切,我想我会添加到出任这个bug激怒了地狱的我,我搜索和搜索,,,但是,如果你有同样的问题,我希望这可以为你修复它