0

我在理解如何使用 AS3 以特定方式在函数之间传递属性时遇到了很多麻烦。如何更改下面的代码,以便 deleteButton 函数可以从 mySelection 函数中检索变量 myLike?

import flash.ui.Keyboard;
import flash.events.MouseEvent;
import flash.ui.Mouse;

stage.addEventListener(KeyboardEvent.KEY_DOWN, keyPressed);
btnDelete.addEventListener(MouseEvent.CLICK, deleteButton);

function keyPressed(event:KeyboardEvent)
{

    var myLike:String;

    if (event.keyCode==49) {
        myLike = "ice cream";
    }
    else if (event.keyCode==50) {
       myLike = "chocolate milk";
    }
    else if (event.keyCode==51) {
       myLike = "cookies";
    }
    else
    {
        myLike = "nothing";
    }

    mySelection(myLike);
}

function mySelection(myLike)
{
    trace("I select " + myLike + ".");
    deleteButton(myLike);
}

function deleteButton(event:MouseEvent, myLike) {
    trace(myLike + "has been deleted");
}
4

2 回答 2

1

您正在查看的几个问题是:

  1. myLikeinmySelection()myLikeindeleteButton()不一样myLike;它们是两个具有相同名称的独立变量。 mySelection()'smyLike只能在里面使用mySelection()deleteButton()'smyLike只能在里面使用deleteButton()

  2. 您在 内部有另一个参数deleteButton(),称为event,它没有被使用。此外,当您尝试调用deleteButton()inside of 时mySelection(),您只传入一个参数,而deleteButton()有两个不同的参数:eventmyLike.

因此,本质上存在一些语法问题,并且您在代码中尝试执行的操作似乎还有其他一些问题,所以我真的需要建议您尝试找到一个在以下方面做得更多的教程一步一步做事。您需要了解范围、全局变量、类、参数等内容。

但就这两个功能而言,就其本身而言,这应该有效:

function mySelection(myLike)
{
    trace("I select " + myLike + ".");
    deleteButton(myLike);
}

function deleteButton(myLike) {
    trace(myLike + "has been deleted");
}
于 2013-10-01T22:34:19.523 回答
0
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyPressed);
btnDelete.addEventListener(MouseEvent.CLICK, onButtonClicked);

function keyPressed( event:KeyboardEvent ):void
{
    var myLike:String;

    if (event.keyCode==49) {
        myLike = "ice cream";
    }
    else if (event.keyCode==50) {
       myLike = "chocolate milk";
    }
    else if (event.keyCode==51) {
       myLike = "cookies";
    }
    else
    {
        myLike = "nothing";
    }

    deleteButton( myLike );
}

// presuming your button instance names are the same as the names in the switch statement 
function onButtonClicked( evt:MouseEvent ):void {
    var deleteThis:String = evt.target.name;

    deleteButton( deleteThis );
}

function deleteButton( myLike:String ):void {
    trace(myLike + "has been deleted");
}

这段代码实际上并没有删除任何东西。如果你想删除被点击的按钮,试试这个 onButtonClicked 方法:

function onButtonClicked( evt:MouseEvent ):void {
    var deleteThis:String = evt.target.name;

    // path to the display list your button is in
    removeChild( evt.target );
}
于 2013-10-01T22:33:20.847 回答