无法在功能消失中使MovieClip成为可能

时间:2015-06-25 14:57:59

标签: function actionscript-3 actionscript movieclip enterframeevent

我试图制作简单的射击游戏,菲亚特Multipla跌落到屏幕的底部。我创建了生成下降多平台的函数,在这个函数中我遇到了问题。

主要问题是将多重死亡状态改为1"死亡"即使使用ENTER_FRAME保存,函数也不执行任何操作。当我在multipla movieclip中实现它时,孩子变得不可见,但即使在死亡= 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(); 
        }*/
    }
}

以及图书馆代码中的多人电影剪辑

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 个答案:

答案 0 :(得分:0)

自从我上次使用AS2以来已经过了10年,但我猜这个Multipla会将multideath属性设置在错误的位置。如果我记得错误,root是最顶层的(你的应用程序)。因此,如果您的第一个代码不在主时间轴上,而是在主时间轴上的动画片段中,则无法使用。尝试对死亡函数进行追踪,看看多重死亡是否真的在那里发生变化:

trace(multideath);

在多人代码中尝试:

parent.multideath = 1;

而不是

MovieClip(root).multideath = 1;

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

此外,您不需要在每个帧上检查多重死亡,只需在单独的函数中删除动画片段:

function removeMultipla():void
{
  removeChild(random);
}

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

parent.removeMultipla();