无法将1个元素推送到基本AS3阵列

时间:2015-08-30 19:12:16

标签: arrays actionscript-3 flash

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

当我运行下面的代码时,Array newHole和newArray都在跟踪上返回1。最初代码只使用newHole数组构建,但我创建了newArray以期进行故障排除。它没有帮助。 bulletHole的类不包含额外的代码,因此我没有发布。

谢谢。

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;
}

2 个答案:

答案 0 :(得分:1)

最有可能的问题是您发布的代码一次又一次地运行。换句话说,你有一个循环时间轴,最终会返回到你所显示的代码所在的框架。

每当达到该帧时,您都有以下内容:

var holeArray:Array = new Array();

它创建了一个新数组,取代了该变量中的内容。

要解决此问题,您需要:

  • 从时间轴中取出代码(将其放入类文件并将其作为项目的文档类附加)
  • 重新设计您的时间轴,以便第一帧只达到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();
}

答案 1 :(得分:0)

此行不正确:

function myFire(int):void {

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

function myFire(e:MouseEvent):void {

您正在做的是将未定义的int传递给函数。希望这会有所帮助。

编辑:您应该删除clickCount事件监听器和函数,因为它们不需要。

另请注意,您应将此行移至myFire函数的顶部,否则您将继续替换此MovieClip而不是再次创建它:

var newHole:bulletHole = new bulletHole();