Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 AS3如何检测显示对象是否受到运动的影响?_Actionscript 3_Flash_Movieclip - Fatal编程技术网

Actionscript 3 AS3如何检测显示对象是否受到运动的影响?

Actionscript 3 AS3如何检测显示对象是否受到运动的影响?,actionscript-3,flash,movieclip,Actionscript 3,Flash,Movieclip,我想这是一个只有真正的大师才能回答的问题 我正在使用Flash创作工具创建MovieClips,但我使用自己的引擎播放它们(这对移动设备性能更好) 然而,为了正确的行为,给定一个DisplayObject,我需要知道它的父对象是否在它所属的MovieClip中对它进行tweening 我已经想出了蛮力和不优雅的方法: 在创作工具中,为任何受tweening约束的movieclip的名称添加前缀。该名称前缀可以随时检查。当然,由于此前缀是手动过程,因此很容易忘记或键入错误 在代码中,为主movi

我想这是一个只有真正的大师才能回答的问题

我正在使用Flash创作工具创建MovieClips,但我使用自己的引擎播放它们(这对移动设备性能更好)

然而,为了正确的行为,给定一个DisplayObject,我需要知道它的父对象是否在它所属的MovieClip中对它进行tweening

我已经想出了蛮力和不优雅的方法:

  • 在创作工具中,为任何受tweening约束的movieclip的名称添加前缀。该名称前缀可以随时检查。当然,由于此前缀是手动过程,因此很容易忘记或键入错误

  • 在代码中,为主movieclip的所有帧播放每个子movieclip,并为其所有子帧检测变换矩阵是否在这些帧中的任何一帧发生变化。如果是,则自动为其名称添加前缀。虽然已经自动化了,但对于较大的电影剪辑来说,这种解决方案可能会占用相当长的时间

所以我希望有其他的方式存在,比如:

if((dpo.parent) as MovieClip) != null)
{
    bDpoIsBeingTweened = ((dpo.parent) as MovieClip).someProperty;
}

期待任何优雅的解决方案。

解决方案非常简单:停止使用Adobe的tweening库

使用它可以更快数百倍,更易于编码,并具有许多其他好处。例如,能够使用
isTweening
来确定某个对象是否正在使用tweening

这是我的建议

要在FlashIDE中包含外部库,可以通过两种方式实现

1) 复制项目文件夹中外部库的文件夹(您的
.fla
文件所在的位置)

2) 在“文件>Actionscript设置”中定义要将外部库文件放入硬盘的文件夹

然后在代码中,只需使用
import
导入这些类。例如:

import com.greensock.TweenLite;

虽然这可以满足要求,但另一个限制是X的想法——他必须在创作引擎中开发MCs,而不是TweenLite。在Flash IDE中创建的项目中添加外部库非常容易。您可以为AS文件定义库路径,或者只复制项目文件夹中的AS文件。我的意思是,您不能将TweenLite对象指定给MC的两个部分,只能指定本机tweens,这使它们无法通过TweenLite进行迭代。就我所知,我不得不同意Vesper的观点:在研究了TweenLite的文档(这似乎确实是一个非常酷的库)之后,我没有看到它们如何从创作工具中取代tweens。只有通过硬编码,但这将失去所见即所得的优势。我不知道你的动画应该有多灵活…使用精灵表有意义吗?此外,动画是根据代码还是在Flash创作时间线中创建的?动画是使用Flash创作时间线创建的(因为我喜欢所见即所得的方法)。我使用的唯一一种tweens是运动tweens。然后,我自己的软件将其转换为我称之为“MovieClipInterpolator”的对象。对于选定的帧率,它计算所有插值采样点的所有位置/旋转/缩放/字母。这里讨论的主题是如何找到动画的子唇,这样最低的子唇下面的所有东西都可以自动缓存到位图中。我开始了解更多。我猜你最好的方法是编写一个脚本,Flash创作,递归地钻取所选电影剪辑的hirarchy,遍历时间线/帧并检查帧的
tweenType
属性(例如,它的值是否是
运动
,而不是
形状
)。另外,如果你想通过编程的方式从运动tween中提取值,你可能会发现。。解析完数据后,用我的swf打包。呵呵。。我想这确实是一个可能的解决办法。一个真正的大师级答案。我为它鼓掌,我知道我不应该抱怨它,但因为我自己不是一个大师,对我来说,这样一个复杂的项目很容易需要一到两周的时间。我仍然希望有人能提出一个简单的运行时解决方案,尽管我开始意识到它不太可能存在。