在 ActionScript 中移动数组中的对象以产生体育场波浪效果

Posted

技术标签:

【中文标题】在 ActionScript 中移动数组中的对象以产生体育场波浪效果【英文标题】:Move objects in an array producing a stadium wave effect in ActionScript 【发布时间】:2011-01-10 19:02:15 【问题描述】:

我想移动数组中的所有对象以产生体育场波浪效果。

我想根据舞台上的 y 值移动对象。我所有的正方形的大小都是 50x50。我想将它们向上移动,然后将它们向下移动。以下是我的代码:

import fl.transitions.Tween; 
import fl.transitions.easing.*; 
import fl.transitions.TweenEvent; 

var t1:Timer = new Timer(100, 0); 
var index:int = 0; 
t1.addEventListener(TimerEvent.TIMER, ping); 
t1.start();
var array:Array = new Array();

addToArray();
function addToArray():void 
 for(var i=0; i<10; i++) 
  array[i] = new Sq();
  array[i].x = i*50 + 50;
  array[i].y = 100;
  addChild(array[i]);
  


function ping(e:TimerEvent)  
 if(index < array.length) 
  moveUp(array[index]);
  index ++; 
  
 

function moveUp(sq:Sq):void 
    var tweenRight:Tween = new Tween(sq,"y",None.easeOut, sq.y, sq.y - 50, 1, true); 
    tweenRight.addEventListener(TweenEvent.MOTION_FINISH, moveDown); 


function moveDown(e:TweenEvent):void 
   //what to put here?
   //or this is not the right way to do this?

【问题讨论】:

【参考方案1】:

您需要在 moveDown 函数中抓取补间对象并应用补间动画(增加 y)。

function moveDown(e:TweenEvent):void 
  var sq:Sq = Sq(e.target.obj);
  var tweenDown:Tween = new Tween(sq,"y",None.easeOut, sq.y, sq.y + 50, 1, true);
  if (Sq(e.target.obj) === array[array.length - 1]) 
    trace("this is the last tween down");
    tweenDown.addEventListener(TweenEvent.MOTION_FINISH, lastTweenFinish);
  

function lastTweenFinish(e:TweenEvent):void 
  trace("DONE");
还有一件事,你为什么在 moveUp 函数中使用 Timer t2。

【讨论】:

我忘记删除了。 Tt 是一次失败的尝试。 我不知道我可以使用e.target.obj,非常感谢! 如何检查数组中最后一个对象是否有动画? 用同样的方法编辑了答案。还有一个真诚的建议,首先尝试查看语言参考。 :) The Language Reference 获得了太多信息,有时很难找到我想要的东西而没有足够的线索......

以上是关于在 ActionScript 中移动数组中的对象以产生体育场波浪效果的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Macromedia Flash MX 中通过使用 ActionScript 增加对象的坐标来移动对象?

ActionScript:如何在数组中调用对象函数?

如何创建 If 语句以检查数组中的某些对象。 Flash CS5 动作脚本 3

移动视频对象

如何从 Actionscript 3.0 中的数组 B 中的数组 A 中删除元素?

ActionScript 3:字符命中测试对象,所有对象都在数组中