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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.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 Flash AS3:在Movieclips中交换部件_Actionscript 3_Flash_Swap_Movieclip_Graphic - Fatal编程技术网

Actionscript 3 Flash AS3:在Movieclips中交换部件

Actionscript 3 Flash AS3:在Movieclips中交换部件,actionscript-3,flash,swap,movieclip,graphic,Actionscript 3,Flash,Swap,Movieclip,Graphic,我有一个电影剪辑1级,大约10帧。每个帧上都有不同的movieclip level 2、Move Jump等动画。在每一个2级电影唇中,大约有30个3级电影唇符号、头臂等,每个都会垃圾邮件发送大约100帧,其中包含大约30-50个关键帧。每个级别3符号有大约10帧,在每个帧上我有一个特定的皮肤图形 我有所有的2级和3级符号实例命名为相同的标签跨越时间线为同一个对象,我有正确的帧停止;并贴上标签。我也明白,每次我在第1级和第2级输入新帧时,我都必须将所有第3级符号重置为所需帧,因为我以前的设置将在

我有一个电影剪辑1级,大约10帧。每个帧上都有不同的movieclip level 2、Move Jump等动画。在每一个2级电影唇中,大约有30个3级电影唇符号、头臂等,每个都会垃圾邮件发送大约100帧,其中包含大约30-50个关键帧。每个级别3符号有大约10帧,在每个帧上我有一个特定的皮肤图形

我有所有的2级和3级符号实例命名为相同的标签跨越时间线为同一个对象,我有正确的帧停止;并贴上标签。我也明白,每次我在第1级和第2级输入新帧时,我都必须将所有第3级符号重置为所需帧,因为我以前的设置将在离开帧时被破坏

我通过执行level1.gotoAndStoplevel2name-->level1.level2.level3.gotoAndStopskintype,然后在大量的姿势X身体部位上循环,使其正常工作。这个过程需要在回车框事件中执行,因为所有内容都将再次重置。不用说,我真的不想这样做

另一个选择是分解图形,在我的1级MC电影唇法师被战士第三次攻击击中,战士被流氓第四次攻击击中的时候,有许多2级姿势电影唇。。。。我以前就是这么做的。但对于这个项目,一个简单的计算告诉我,我需要以这种方式制作200多个动画,这是不可行的。我也可以摆脱1级MC,并将姿势保存到阵列中,但身体部位仍然需要每帧刷新一次

我希望有一个相对快速的解决办法,我设法错过了,因为它似乎是这样一个基本的功能,我相信许多flash游戏将不得不通过它打扮,或任何定制+动画真的。然而不知何故,我已经寻找了好几天,却找不到治愈的方法。编写时能够简单地交换符号中的图形,以替换整个文件中每个动画的每一帧,这也表明必须有一种更通用的方法来进行这些交换。我希望你能证明我是对的

我确实有两件事我不知道我是否应该尝试:1把MC拖到frame1我唯一的框架上,我现在除了代码什么都没有。2单独声明每个车身部件并声明MC,然后让MC的部件链接到这些车身部件。基本上,我只需要一个可行的方法来防止每次动画转到新的帧时这些身体部位重置,我的flash知识不足以告诉我是否有可能让这些全局图形库独立于帧

是的,我知道我可能没有以尽可能干净的方式来做,但我只是用视觉效果来更好地制作动画,所以虽然我可以从形状开始,用严格的代码来制作所有的动画,但我真的想远离它。艺术风格在这个项目中非常重要

更新:现在,我选择了丑陋的路线。每次MC更改动画时,我都会:

MovieClipDisplayObjectContainerMC.getChildByNameMC.move.Hand.gotoAndStopMC.skinname

对所有35个身体部位重复这个步骤。事实证明,flash取代了MC.move中的所有手框,这让生活变得更加轻松。另一种方法是对每一帧进行轮询,但直接结果是fps要慢得多。相反,现在我只需要在移动发生变化时切换图形

这是可行的,但我知道它会大大降低性能。事实上,它可以在与实际矢量渲染相同的程度上降低性能。将交换限制为仅移动更改实际上不是可选的,而是强制性的。

请查看以下内容: 可在此处下载源代码:

如果你的描述正确的话,我会用同样的方法制作动画。主时间线有一个带有字符符号的单帧。角色符号中有一个时间轴,其中有两个动画点站立和跳跃。角色由头、身体、左手、右手、左腿、右腿等符号组成。每个符号都单独设置动画。角色动画时间轴包含关键帧和两个关键帧。在所有帧中,所有符号的命名都是一致的

每个角色部分依次具有2帧的时间轴,对应于蒙皮1和蒙皮2

如您所见,蒙皮在动画过程中不会被破坏,并且无需在每一帧中对其进行校正

主时间线上的代码是:

var char_body_parts:Array = new Array(
    mv_char.body, mv_char.head, mv_char.left_hand, mv_char.right_hand,
    mv_char.left_leg, mv_char.right_leg
);

var skin_num:int = 1;

mv_char.gotoAndStop("stand");
setSkin(char_body_parts, skin_num);

btn_jump.addEventListener(MouseEvent.CLICK, doJump);
btn_skin.addEventListener(MouseEvent.CLICK, doSkin);

function doJump(evt:MouseEvent):void {
    mv_char.gotoAndPlay("jump");
}

function doSkin(evt:MouseEvent):void {
    skin_num++;
    if (skin_num > 2) skin_num = 1;
    setSkin(char_body_parts, skin_num);
}

function setSkin(parts:Array, skin_num:int):void {
    for (var i:int = 0; i < parts.length; i++) {
        (parts[i] as MovieClip).gotoAndStop(skin_num);
    }
}
=========================更新==================== 这是更新后的动画: 可在此处下载源代码: 现在,我的设置与您的相同。 我有一个2帧字符,一帧包含stand movieclip,另一帧包含jump movieclip。 事实上,当你为任何一个动画停下来时,皮肤都会丢失。但你不必每一帧都更新它们。您只需要在动画的第一帧(即gotoAnd之后)更新它们 停止动画。我仍然有一个要批量分配皮肤的身体部位列表,但现在可以通过名称访问它们。因此,主要的代码更改是:

var char_body_parts:Array = new Array(
    "body", "head", "left_hand", "right_hand",
    "left_leg", "right_leg"
);

function setSkin(char:MovieClip, parts:Array, skin_num:int):void {
    for (var i:int = 0; i < parts.length; i++) {
        char.mv_animation.getChildByName(parts[i]).gotoAndStop(skin_num);
    }
}

function setAnimation(char:MovieClip, anim_name:String):void {
    char.gotoAndStop(anim_name);
    setSkin(char, char_body_parts, skin_num);
}
还有另外两个解决方案,我没有编写它们,但它们很容易描述

在每个skin movieclip的第1帧中,将gotoAndStoproot添加为movieclip.skin_num。其工作原理如下:每当皮肤复位时,它都从第1帧开始。在第1帧中,它将自动转到并停止到当前皮肤。所以你不需要做任何其他事情

不要将动画放在时间轴中,而是放在同一帧中。命名每个动画lke stand、跳跃等。切换动画不是通过gotoAndStop,而是通过使选定动画可见和其他动画不可见。每次蒙皮更改都必须设置一次蒙皮


您以前的设置将被破坏是什么意思?如果你在任何剪辑上使用gotoAndStop,它将保持不变,事实上,我很快就需要一个类似的游戏系统,所以我会花一些时间来考虑,然后我会回答。所谓“销毁”,我的意思是:当角色循环走40帧时,在每一帧中,手臂将在第1帧播放,即使在上一帧中我已经在手臂上停了10次。我想这是因为每次我离开那个特殊的符号,它就被摧毁了。如果我在一个画面上只有一个MC,我就可以去和StopWalk,因为MC本身不在时间线上,本质上,每当我转到另一个动作时,我都会重置Walk和其中的所有内容,这对于我以前的游戏来说是很好的。不过,这一次让我头疼……让我们再来一次。一个角色行走,顺便说一句,40帧太多了,每帧1帧是一个关键帧?2每个框架包含命名为的手形符号?3手形符号是否也有动画,还是仅用于皮肤支持?我看到您已经声明了身体部位,我假设此时mv_char已经声明或设置在舞台上,我已经尝试过,但失败了。在你的mv_char片段中,你说有两个动画点站立和跳跃,所以我们说的是两个关键帧,没有其他帧,还有一个层,对吗?这是我在那里的设置,因为我不能访问mv_char.body,我只能像mv_char.stand.body一样访问它;或者,也许我检索错误了…我的设置略有不同。现在我意识到,在你的角色里,你有两个截然不同的电影嘴唇,比如站立和跳跃,每一个都在一个画面中。动画进入每个剪辑中。在我的设置中,我没有站立和跳跃的movieclips。我有一个多帧时间轴,带有站立和跳跃标签的帧。就像我从你的剪辑中取出动画,然后把它们一个接一个地放在公共时间线上。如果您仍然感兴趣,我可以尝试为您的设置找到解决方案。因为我也感兴趣。非常感谢!现在,我通过检查动作中的变化并在任何时候更新图形来让它工作。问题是有些动画有不同的层数,如果放在同一个剪辑中会很混乱,所以我更喜欢使用嵌套movieclip方法。加上每个动画都很长,我每个MC都有很多动画,如果它们都在同一个时间轴上,那将是巨大的。。。但是对于未来,现在我知道了这个问题,我会尽我最大的努力让他们都在MC时间表上。。。