为什么我的变量在AS3中不是递增的

时间:2012-02-18 21:57:19

标签: actionscript-3 variables actionscript

当用户按下空格键时,我试图从标记为c1-c9的一系列字符串中取一个字符串,将其分解为数组,显示该数组,然后在结束时增加linenumber变量函数,以便下次空格键被按下时,系列中的下一个字符串被跟踪,依此类推。这是脚本的相关部分(字符串和linenumber变量已在前面声明过)

stage.addEventListener(KeyboardEvent.KEY_DOWN, myKeyDown);

function myKeyDown(e:KeyboardEvent):void {
    if (e.keyCode == Keyboard.SPACE) {
        trace("okay, the key was pressed, at least")
        var displayarray:Array = this["c" + linenumber].split(" ");
        trace(displayarray);
        linenumber++;
        trace(linenumber);
    }
}

每次按空格键时,我只会重复初始字符串和亚麻值的痕迹,而不会增加任何值。我认为它可能与此行中括号之前的“this”有关

var displayarray:Array = this["c" + linenumber].split(" ");

我在某个网站上的代码示例中发现并且根本不理解,但如果我尝试加入“c”并且没有“this”的行号,则会出现编译器错误。我做错了什么?

2 个答案:

答案 0 :(得分:0)

我将this替换为tempArray并运行它。

var linenumber:Number = 1;
var tempArray:Array = [];
stage.addEventListener(KeyboardEvent.KEY_DOWN, myKeyDown);
for(var i=0; i<=9; i++)
{
    tempArray["c"+i]="C "+i;
}
function myKeyDown(e:KeyboardEvent):void {
    if (e.keyCode == Keyboard.SPACE) {
        trace("okay, the key was pressed, at least")
        var displayarray:Array = tempArray["c" + linenumber].split(" ");
        trace(displayarray);
        linenumber++;
        trace(linenumber);
    }
}

这完美无缺。

您的代码未运行的解释之一是 如果在您的代码中,displayarray是一个关联数组,则trace不能显示键值对。但这并不能解释为什么你的亚麻布不会增加。

答案 1 :(得分:0)

许多方法在Flash中出错,就像代码或生活中的许多其他地方一样,LOL

尝试使用以下自包含的完整as3代码。它适用于我的机器。从一个干净的开始as3空白项目。也许你可以根据你的用例进行调整..

import flash.events.KeyboardEvent;

stage.addEventListener(KeyboardEvent.KEY_DOWN, myKeyDown);

function myKeyDown(e:KeyboardEvent):void{
    //trace(e.keyCode);
    if(e.keyCode === Keyboard.SPACE){
        trace(lineNum);
        var dArr:Array = this['c' + lineNum].split(' ');
        trace(dArr);
        lineNum++;
    }
}

var c1 = 'a b c d e';
var c2 = 'q w e r t y';
var c3 = 'y u i o p';

var lineNum = 1;