2012-02-18 6 views
0

ユーザーがスペースバーを押すと、c1-c9とラベル付けされた一連の文字列から1つの文字列を取り出し、配列に分割して配列を表示してから関数の終わりにlinenumber変数をインクリメントして、次回にスペースバーが押されると、シリーズの次の文字列がトレースされます。ここで私は、スペースバーを押すたびに、しかし、私は、最初の文字列と行番号値の痕跡がなくて繰り返し取得なぜ私の変数がAS3で増分しないのですか

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

(前に宣言されている文字列と行番号変数)スクリプトの関連セクションがあります任意の増分。私はそれが「この」私ならば、私はいくつかのウェブサイト上のコードサンプルで見つかったとは全く理解していないが、私はコンパイルエラーを取得し、この行のブラケット

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

前に何かを持っているかもしれないと思います"c"と行番号に "this"を付けずに参加しようとする。私は間違って何をしていますか?

+0

'this [" x "]'は 'this.x'と同じですが、* xの識別子は識別子ではありません。したがって、これは[this ["c0"] '...' this ["c1"] '...')であり、疑わしいと思われますが、それは "有効"です。 –

+1

良いニュースは次のとおりです。コードが正しいように見えます。エラーは別の場所です。 linenumberを初期化する部分を探します。ループするフレームのフレームスクリプト内にある場合は、繰り返しごとに初期値にリセットされるため、常に同じ値になります。 – weltraumpirat

+0

@pst:その疑問はなぜですか?これは、プロパティに動的にアクセスするための唯一の方法であり、完璧です。 – weltraumpirat

答えて

0

thistempArrayに変更して実行しました。

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が連想配列であれば、あなたのコードが実行されていないという説明の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; 
関連する問題