标签: actionscript-3

处理1000个按钮的EventListeners/Handler的最佳方法是什么?

我正在开发一款游戏,用户可以在这款游戏中获得按钮/徽章作为奖励.我估计总共会有大约500个奖项.

我想允许用户将他们的重复/不需要的徽章出售给银行并从银行购买新的徽章.

我在多个奖项框架中展示徽章.在徽章下方,我会显示计数,以及"买入"和"卖出"按钮.

我的问题是:处理SO MANY买卖按钮的最佳方法是什么?有没有办法编写1000个eventListeners和1000个eventHandlers?

一种可能的解决方案是逐步命名我的按钮,如"buy_mc1","buy_mc2"等.然后执行循环为此创建侦听器["buy_mc"+ i].但是,我必须非常确定我将这些正确地链接到奖项.

目前,我的数据库中有一个"award_mc"字段,它在我的.fla中存储了movieclip的名称.从那里,我可以访问相关的资产,比如count字段,例如:this [db.award_mc +"_ count"] .txt.

不幸的是,这种方法不适合循环访问.

也许我可以创建一系列与买/卖按钮同步的动画片段名称.例如:

myArray = {aMissionAward,anotherAward,ubernessAward};

我的按钮是:buy_0,buy_1,buy_2等.

当有人点击按钮时,我可以将buy_2链接到"ubernessAward",然后在数据库上查找"ubernessAward".

但是如何从按钮获取号码呢?即使我可以循环设置eventListeners,我是否必须设置个别事件的eventHandlers来处理正确的索引号?

我愿意接受其他方式的建议.

--------------------------编辑----------------------- -----

这是我的解决方案.Jens Struwe的道具指向我指向正确的方向.

我无法使用舞台上的按钮.显然,按钮是静态类.MovieClip是动态的,所以我可以通过使用MovieClip来实现这一点.这是我做的:

在舞台上添加了3个MovieClip.将它们命名为"mc0","mc1"和"mc2".

添加此AS3代码:

for (var i:Number=0; i<3; i++)
{
    this["mc" + i].addEventListener( MouseEvent.CLICK, onMcClick );
    this["mc" + i].awardKey = i;
}

function onMcClick( evt:MouseEvent ):void
{
    trace("MC ID = " +(evt.target).awardKey);

    switch ((evt.target).awardKey)
    {
        case 0:
            trace("     Do stuff for 0");
            break;
        case 1:
            trace("     Do stuff for 1");
            break;
        case 2:
            trace("     Do stuff …
Run Code Online (Sandbox Code Playgroud)

flash event-handling actionscript-3

0
推荐指数
1
解决办法
113
查看次数

Flash隐式强制价值错误?

由于某种原因我得到以下错误

使用静态类型flash.display:将DisplayObject强制转换为可能不相关的类型flash.display:MovieClip

错误指向的行是下面的"addInfoBubble(item)"

for(var i:Number=0; i < MapContainer.numChildren; i++) {
    var item:DisplayObject = MapContainer.getChildAt(i);
    if(item!=null && item is MovieClip){ // make sure its a movieclip
        trace('Found movieclip');
        addInfoBubble(item);
        item.addEventListener(MouseEvent.MOUSE_OVER, countryMouseOver);
        item.addEventListener(MouseEvent.MOUSE_OUT, countryMouseOut);
    } 

}
Run Code Online (Sandbox Code Playgroud)

actionscript-3 flash-cs5

0
推荐指数
1
解决办法
1696
查看次数

AS3 AIR - NativeWindow弹出框

在我的AIR应用程序中,当用户创建一个新项目时,我想要一个弹出框出现在他们可以输入项目名称的位置.我理解这是如何通过制作我自己的弹出框类型,但是在那里使用NativeWindows做到这一点的方法?也就是说,我可以使用包含文本字段和按钮的系统镶边来制作窗口吗?

我在FlashDevelop中使用Flex 4和AIR 2.7.

air flash actionscript-3 nativewindow

0
推荐指数
1
解决办法
4906
查看次数

从flash返回值到javascript

如何将AS3中的值返回到javascript.我从JS调用AS3方法并希望AS3方法返回一个字符串:

//javascript
var string = swfObject["abcmethod"](arg1);
Run Code Online (Sandbox Code Playgroud)

我知道的唯一方法是添加一个回调方法,该方法在JS中从闪回调用.有没有更好的办法?

javascript callback actionscript-3 externalinterface

0
推荐指数
1
解决办法
2773
查看次数

Actionscript 3.0单击隐藏对象

我有一个隐藏的DisplayObject(myObj.visible = false;).我提供了一个听众:

myObj.addEventListener(MouseEvent.CLICK, myHandler);
Run Code Online (Sandbox Code Playgroud)

通过myHandler永远不会开火.似乎MouseEvent.CLICK没有为隐藏的对象提供......我怎样才能听取MouseEvent.CLICK隐藏的对象?

hidden actionscript-3 mouseclick-event

0
推荐指数
1
解决办法
761
查看次数

在AS3中写入CSV文件

我看得很远但我找不到任何关于如何从flash AS3写入CSV文件的资源.我知道flash不能单独写入它.我之前使用PHP写入txt文件,但现在我需要打开一个csv并插入/编辑已经在其中的条目.

我怎样才能做到这一点?

csv actionscript-3

0
推荐指数
1
解决办法
7058
查看次数

将鼠标光标更改为箭头

我有一个使用ActionScript 3.0的Flex应用程序.

对于我的应用程序中的任何元素,我想将鼠标光标设置为 移动光标 - 专门用于指示允许"移动"或"拖动"操作 - 只要鼠标悬停在元素上方.

我该怎么做呢?

apache-flex adobe actionscript-3 flex4.5

0
推荐指数
1
解决办法
1757
查看次数

AS3.0 OOP中的数组

我试图弄清楚如何在OOP AS3.0中使用数组.一直在寻找答案或一些教程,但无法找到它.也许你可以解释一下.

这就是我所拥有的:

Gallery.as文件:

package  {

    import flash.display.MovieClip;


    public class Gallery extends MovieClip {

        public var can:Number;

        public function Gallery() {


            can = 10;

            var impMyClass:Read = new Read(can);
            trace (impMyClass.myArray[0]);

        }

}

}
Run Code Online (Sandbox Code Playgroud)

这是Read.as文件:

package  {

    import flash.display.MovieClip;


    public class Read extends MovieClip {

        public var rezalt:Number = new Number;
        public var myArray:Array = new Array;

        public function Read(can:Number) {

            rezalt = can * 10 - 50 / 10;
            trace('Read-shi')


        myArray.push('Flash');                      


        }
    }
}   
Run Code Online (Sandbox Code Playgroud)

到目前为止一切正常.

但是当我在Read.as文件中进行一些更改时,如下所示:

package  {

    import …
Run Code Online (Sandbox Code Playgroud)

flash actionscript-3

0
推荐指数
1
解决办法
470
查看次数

AS3保持mouseDown以提高速度/功率

这就是我想要完成的事情;

随着对影片剪辑(cannon_mc)点击的射门被解雇(ball_mc)

较长的鼠标下降,球的射击速度应该增加.我的问题是;

实现这一目标的最有效方法是什么?用计时器或类似的东西;

    var isMouseDown:Boolean = false;
    var speed= 10;    

    myCannon.addEventListener(MouseEvent.MOUSE_DOWN,buttonPressed);

        function buttonPressed(event:MouseEvent){
            //trace("down");
            isMouseDown == true;

            if(isMouseDown == false)
            {
                speed == +1
            }

        }
Run Code Online (Sandbox Code Playgroud)

performance timer actionscript-3 mousedown

0
推荐指数
1
解决办法
5048
查看次数

如何在actionscript中的回调函数中使用类的方法?

在回调函数中调用类的方法时,不能使用thisobject.
要调用该方法,在JavaScript中,我声明that的变量,分配thisthat,并且使用that回调内部调用的方法this.

在动作脚本中,我是否必须像在javascript中那样做?

以下代码是that用于在回调内调用方法的示例.
动作中有更简单的方法吗?

class C {
    private var that:C;

    function C() {
        that = this
    }

    public function f1():void {
        var sp:Sprite = new Sprite;

        sp.addEventListener(MouseEvent.CLICK, function():void {
            this.f2(); // this doesn't work
            that.f2(); // that works
        });
    }

    public function f2():void {
        trace('hello');
    }
}
Run Code Online (Sandbox Code Playgroud)

flash actionscript callback event-listener actionscript-3

0
推荐指数
2
解决办法
910
查看次数