无法将过去的 1 个元素推送到基本 AS3 数组

Cannot push past 1 element to basic AS3 Array

我对此很陌生,希望这是显而易见的事情。

当我运行下面的代码时,Array newHole 和newArray 都return 1 上迹。最初代码仅使用 newHole 数组构建,但我创建了 newArray 以期排除故障。它没有帮助。 bulletHole 的 class 不包含额外的代码,所以我没有 post 那。

谢谢。

import flash.display.*;
import flash.events.*;
import flash.ui.Mouse;

Mouse.hide();

var myReticle:MovieClip;
var holeArray:Array = new Array();
var randomHole:Number = randomNumber(1, 5);
var newHole:bulletHole = new bulletHole();
var newArray:Array = new Array();

stage.addEventListener(MouseEvent.MOUSE_MOVE, followReticle);
stage.addEventListener(MouseEvent.CLICK, myFire);
stage.addEventListener(MouseEvent.CLICK, checkCount);

function followReticle(event:MouseEvent):void
{
    myReticle.x = mouseX;
    myReticle.y = mouseY;
}

function myFire(int):void
{
    stage.addChild(newHole);
    newHole.x = myReticle.x;
    newHole.y = myReticle.y;
    //holeArray.push(newHole);
    newHole.gotoAndStop(randomHole);
    //trace(holeArray.length);
}

function checkCount(int):void
{
    newArray.push("A");
    trace(newArray.length);
}

function randomNumber(low:Number=0, high:Number=1):Number
{
    return Math.floor(Math.random() * (1+high-low)) + low;
}

此行不正确:

function myFire(int):void {

因为该函数是从鼠标事件侦听器触发的,所以它应该显示为:

function myFire(e:MouseEvent):void {

你正在做的是将一个未定义的整数传递给函数。希望这有帮助。

编辑:您应该删除不需要的 clickCount 事件侦听器和函数。

另请注意,您应该将此行移动到 myFire 函数的顶部,否则您将继续替换此 MovieClip 而不是重新创建它:

var newHole:bulletHole = new bulletHole();

最有可能的问题是您发布的代码是 运行 一遍又一遍。换句话说,您有一个循环时间线,最终会回到您显示的代码所在的帧。

每当达到该帧时,您将获得以下信息:

var holeArray:Array = new Array();

这会创建一个新数组来替换原来在那个变量中的内容。

要解决这个问题,您需要:

  • 将代码从时间轴中取出(将其放入 class 文件并将其作为项目文档 class 附上)
  • 重新设计您的时间轴,使第一帧仅出现 1 次
  • 进行一些检查,以便代码仅在第一次到达帧时运行。

这里是后一个选项的例子:

//just define the array, don't create it
var holeArray:Array;

//if the array is null, create it (it will only be null the first time this code is run
if(!holeArray){
    holeArray = new Array();
}