как вызвать только 2 значения в массиве случайного места - PullRequest
0 голосов
/ 25 сентября 2019

у меня 3 мс.Я хочу назвать 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

Ответы [ 4 ]

0 голосов
/ 28 сентября 2019

Я следовал совету @ Özgün Sandal, но я получаю эту ошибку

ReferenceError: Ошибка # 1065: переменная Batumc10 не определена.at global / flash.utils :: getDefinitionByName () в nyoba9_fla :: MainTimeline / frame1 ()

это мой код:


    import flash.utils.getDefinitionByName;
    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 P:Array = [new Point(80.2, 100), new Point(260, 100), new Point(430, 100)];
    var M:Array = [Batumc, Batumc1, Pisangmc];

for(var i:uint=0; i<M.length; i++) {
      var myClass:Class = getDefinitionByName("Batumc1"+i) as Class;
      var mc:MovieClip = new myClass as MovieClip;

      // 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);

      mc.x = aPo.x;
      mc.y = aPo.y;
}

где моя вина?

0 голосов
/ 27 сентября 2019

Попробуйте getDefinitionByName

var myClass:Class = getDefinitionByName("Class_Name") as Class;
var classInstance:MovieClip = new myClass as MovieClip; 
addChild(classInstance);
0 голосов
/ 28 сентября 2019

Вам просто нужно определить конкретное местоположение в массиве для mc'c, помимо этого вы можете получить классы из библиотеки следующим образом:

var locations:Array = [{xpos:100, ypos:12} , {xpos:30, ypos:50} , {xpos:400, ypos:28}, ......];

for(var i:uint=0; i<YOUR_MCS_LENGTH; i++) {
      var myClass:Class = getDefinitionByName("Batumc"+i) as Class;
      var mc:MovieClip = new myClass as MovieClip;
      mc.x = locations[i].xpos;
      mc.y = locations[i].ypos;
}
0 голосов
/ 25 сентября 2019

Я думаю, что проблема в этой строке:

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

Вы присваиваете M [i] (массив mc) со значением из P (массив точек), поэтому M [i] = массив сточка, а не mc.

Если вы хотите избежать таких проблем, вы можете использовать векторы вместо массивов.Он более эффективен и также должен содержать тип, который вы объявили. Вектор класса Docs .

Чтобы использовать вектор вместо:

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

Do:

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

А остальное просто какмассивы (pop, push, slice, ...)

Чтобы удалить элемент из M, просто соедините M, я не понимаю, почему вам нужно выполнить итерации по M.

M.splice(randomPos, 1);
...