无法使功能中的影片剪辑消失

Posted

技术标签:

【中文标题】无法使功能中的影片剪辑消失【英文标题】:Can't make MovieClip in function dissapear 【发布时间】:2015-09-12 06:30:25 【问题描述】:

我正在尝试制作简单的射击游戏,Fiat Multipla 会掉到屏幕底部。我已经创建了生成下降乘积的函数,但在这个函数中我遇到了问题。

主要问题是,在将多死亡状态更改为 1 后,“死亡”功能即使与 ENTER_FRAME 保持一致,也不会执行任何操作。当我在 multipla 影片剪辑中实现它时,孩子变得不可见,但即使在从那里响应 Death = 1 之后,也没有任何反应。

我对这一切都很陌生,我在编程过程中遇到并解决了一些问题,但现在这是我的砖墙。代码要么完全失败,要么我不知道有什么明显的。正如我所说,我是新手。

非常感谢您的帮助!

功能如下:

import flash.events.Event;
import flash.desktop.NativeApplication;
Multitouch.inputMode = MultitouchInputMode.TOUCH_POINT;

Mouse.hide();
var velocity = 0;
var ammo = 6;
LGUI.LGUIammo.gotoAndStop(6);

var counter = 0;

function multiplarain()


var x1 = Math.ceil(Math.random() * 280);
var y1 = -200;
var random:Multipla = new Multipla();
var life = 265;
var multideath = 0;

random.x = 100 + x1;
random.y = y1
addChild(random);
random.gotoAndStop(1);
setChildIndex(random, +1);

addEventListener(Event.ENTER_FRAME, Death);
    function Death(event:Event):void
    
        if(multideath >= 1)
        
        removeEventListener(Event.ENTER_FRAME, Death);
        removeChild(random);
        
    

addEventListener(Event.ENTER_FRAME, fl_EnterFrameHandler);

    function fl_EnterFrameHandler(event:Event):void
        
            if(random.y >= 680)
            
            removeEventListener(Event.ENTER_FRAME, fl_EnterFrameHandler)
            removeChild(random);
            trace("rofl");
            
        

random.addEventListener(Event.ENTER_FRAME, fl_AnimateVertically);

    function fl_AnimateVertically(event:Event)
    
        velocity = velocity + 0.000035;
        random.y += 1.5 + velocity;
    

random.addEventListener(TouchEvent.TOUCH_TAP, fl_TapHandler);

    function fl_TapHandler(event:TouchEvent):void
    
        counter = counter + 1;
        ammo -= 1;
    

if(ammo == 6)

    LGUI.LGUIammo.gotoAndStop(6);
       
if(ammo == 5)

    LGUI.LGUIammo.gotoAndStop(5);
               
if(ammo == 4)

    LGUI.LGUIammo.gotoAndStop(4);

if(ammo == 3)

    LGUI.LGUIammo.gotoAndStop(3);

if(ammo == 2)

    LGUI.LGUIammo.gotoAndStop(2);

if(ammo == 1)

    LGUI.LGUIammo.gotoAndStop(1);

if(ammo <= 0)

    LGUI.LGUIammo.gotoAndStop(7);


HGUI.saved.text = counter;  
this.addEventListener( Event.ENTER_FRAME, handleCollision)

var kucyk = LGUI.LGUIlife.lifeitself;

function handleCollision(e:Event):void

    if (random.hitTestObject(LGUI))
    
        kucyk = LGUI.LGUIlife.lifeitself;
        kucyk.width -= 0.1;
    
    /*if (kucyk.width == 0.75)
        
            trace("cycki");
            NativeApplication.nativeApplication.exit(); 
        */
    

这是库代码中 multipla 的影片剪辑:

Multitouch.inputMode = MultitouchInputMode.TOUCH_POINT;
this.addEventListener(TouchEvent.TOUCH_TAP, fl_TapHandler2);

function fl_TapHandler2(event:TouchEvent):void

    this.gotoAndPlay(2);



addEventListener(Event.ENTER_FRAME, fl_EnterFrameHandler);

function fl_EnterFrameHandler(event:Event):void

    if(this.currentFrame == 60)
    
        this.visible = false;
        MovieClip(root).multideath = 1;
        trace(MovieClip(root).multideath);
        removeEventListener(Event.ENTER_FRAME, fl_EnterFrameHandler);
        removeEventListener(Event.ENTER_FRAME, fl_TapHandler2);
    

【问题讨论】:

【参考方案1】:

自从我上次使用 AS2 以来已经有 10 年了,但我猜这个 Multipla 将 multideath 属性设置在错误的位置。如果我没记错的话,root 是最顶层(您的应用程序)。因此,如果您的第一个代码不在主时间轴上,而是在主时间轴上的影片剪辑中,它将无法工作。尝试在 Death 函数中添加 trace 以查看 multideath 是否真的在那里发生了变化:

trace(multideath);

在 multipla 代码中试试这个:

parent.multideath = 1;

而不是

MovieClip(root).multideath = 1;

我问自己为什么需要这么多输入帧监听器?您可以只拥有一个并将所有动画组合到一个函数中。

此外,您不需要在每一帧上检查多死亡,只需在单独的函数中删除影片剪辑:

function removeMultipla():void

  removeChild(random);

只需从您的 Multipla 中调用此函数,而不是设置 multideath 属性:

parent.removeMultipla();

【讨论】:

以上是关于无法使功能中的影片剪辑消失的主要内容,如果未能解决你的问题,请参考以下文章

ActionScript 3:使影片剪辑播放到最后

如果仅单击五个影片剪辑(不是更多),如何使影片剪辑可见

无法访问影片剪辑中的文本字段

FLASH中怎么样才能做到 当鼠标放上按钮那个位置时 按钮会出现 而且可以使用 鼠标离开时候就会消失

无法将嵌入的影片剪辑投射到影片剪辑类型

使影片剪辑在下降到一定深度后自动恢复