首页 > 解决方案 > 如何在数组中随机调用特定位置的 2 个值 flash

问题描述

我有3个mc。我想在舞台上的特定位置随机调用其中的 2 个。我不知道怎么称呼他们。我刚试过数组。我认为数组是最好的方法,但仍然很困惑。

这是我试过的代码:

import flash.geom.Point;

var Batumc:batu_mc = new batu_mc(); // creates a instance of the movieclip, i.e, an object
var Batumc1:L = new L();
var Pisangmc:pisang_mc = new pisang_mc();

var Batumc2:MovieClip = new MovieClip();

var Status:int = 0;

button.addEventListener(MouseEvent.CLICK, tombol);
    function tombol(e:MouseEvent):void{
        //addChild(Batumc);
        //addChild(Batumc1);
        //addChild(Pisangmc);

        var P:Array = [new Point(80.2, 100), new Point(260, 100), new Point(430, 100)];
        var M:Array = [Batumc, Batumc1, Pisangmc];


        //random benda
        var benda:int = Math.random()*M.length;

        // Remove the selected benda from its list.
        M.splice(benda, 1);

        while (M.length){
        // Get the last MovieClip and remove it from the list.
        Batumc2 = M.pop();
        trace(Batumc2);
        // Produce a random Point.
        var anIndex:int = Math.random() * P.length;
        var aPo:Point = P[anIndex];


        // Remove the selected Point from its list.
        P.splice(anIndex, 1);

        // Move the selected MovieClip to the selected Point coordinates.
        Batumc2.x = aPo.x;
        Batumc2.y = aPo.y;


        addChild(Batumc);
        addChild(Batumc1);
        addChild(Pisangmc);

        }
        Status = 1;
    }

button.addEventListener(Event.ENTER_FRAME, frame);
function frame(e:Event):void{
    if(Status == 1 ){
        removeChild(Batumc2);
        Status = 0;
    }
}

当我运行此代码时,有时会再次出现 3 mc

标签: actionscript-3flash-cs6

解决方案


我认为问题出在这一行:

M[i] = P.splice(randomPos, 1);

您将 M[i](mc 数组)分配给 P(点数组)中的值,因此 M[i] = 带有点的数组而不是 mc。

如果您想避免此类问题,您可以使用向量而不是数组。它更有效,并且还必须包含您声明的类型。 矢量类文档

要使用向量,而不是:

var P:Array = [...];
var M:Array = [...];

做:

var P:Vector.<Point> = new <Number>[...];
var M:Vector.<MovieClip> = new <MovieClip>[...];

其余的就像数组(pop,push,slice,...)

要从 M 中删除项目,只需拼接 M,我不明白为什么需要迭代 M。

M.splice(randomPos, 1);

推荐阅读