質問

こんにちは再び仲間のフラッシャー:)

Stackoverflowでここに備えた私の最初の質問は、この問題に対処しました。いくつかの異なるボタンを作成する配列がありました。しかし、私はそれらにアクションを割り当てる方法を知りませんでした:それぞれの動的に作成されたボタンアクションを与える方法-PART 1

ありがとう ジョエルフック, 、コードを機能させることができました。ただし、今回はインポートされたグラフィックをライブラリからクラスとして使用する代わりに、勾配*を描画してMovieclipを作成しています(JPGをインポートする必要はありませんでした)*。今、私は別の恐ろしいものになっています 「時定数をコンパイルしない」 もう一度エラー。クリックまたは巻き込まれたボタンインスタンスを決定しようとしている方法と関係があると思います。

前のボタンの作成 (働く) コード:

for(var i:number = 0; i <myxmlarray.length; i ++){navbutton = new Navbutton; navbutton.name = "button" + i; navbutton.x = i * navsize; navbutton.y = navbtny; navbutton.buttonmode = true; thumbsmov.addchild(navbutton);

buttons.push(navbutton);ボタン[i] .addeventlistener(mouseevent.mouse_up、handlebuttonclick);ボタン[i] .addeventlistener(mouseevent.roll_over、handlebuttonover);ボタン[i] .addeventlistener(mouseevent.roll_out、handlebuttonoff); }

前のリスナー (働く) コード:

function handleButtonOver(event:MouseEvent):void {

varボタン:navbutton = event.target as navbutton; var id:number = number(button.name.split( "ボタン")1); if(button)tweenlite.to(buttonrolls [id]、.4、{alpha:1、ease:strong.easout}); catatext [id] .defaultTextformat = a12green; catatext [id] .text = myxmlarray [id] .id; }

現在のボタン作成コード:

for (var i:Number = 0; i < num; i++) {
trace("loop number = "+i);

var blueGradient:MovieClip = new MovieClip();
 blueGradient.name = "button" +i;
 blueGradient.graphics.beginGradientFill(bGrad, bColors, bAlphas, bRatios ,bMatrix)
 blueGradient.graphics.drawRect(0, 0, 266, 40);
 blueGradient.x = i * navSIZE;
 blueGradient.y = navBtnY;
 blueGradient.buttonMode = true;
addChild(blueGradient);

buttons.push(blueGradient)

buttons[i].addEventListener(MouseEvent.MOUSE_UP, handleButtonClick);
buttons[i].addEventListener(MouseEvent.ROLL_OVER, handleButtonOver);
buttons[i].addEventListener(MouseEvent.ROLL_OUT, handleButtonOff);

}

現在のボタンリスナーコード:

function handleButtonOver(event:MouseEvent):void {
var button:blueGradient = event.target as blueGradient;
var id:Number = Number(blueGradient.name.split("button")[1]);
if(blueGradient)
 cataText[id].defaultTextFormat = navFontRoll;
 cataText[id].text = myArray[id].id;

}

現在の映画は、次の行がコメントアウトされている場合にのみエラーなしで実行されます。

var button:blueGradient = event.target as blueGradient;

それが、非コンパイル時定数誤差が発生する原因であるためです。 ただし、そのラインを削除することにより、すべてのボタンは2つのボタンと名前が付けられた2つのボタンの代わりにButton1です。

ここの助けやポインターは大歓迎です!私のコードを見てくれてありがとう。

役に立ちましたか?

解決

以来だと思います as キーワードはキャスト用です。代わりにこの行が必要です。

var button:MovieClip = event.target as MovieClip;

blueGradient クラス名ではなく、変数名のようです。

他のヒント

あなたの問題は、Bluegradientクラスをボタンオブジェクトと混同していることです。元のハンドラーでは、あなたのコードは次のように述べています

var button:NavButton = event.target as NavButton;
var id:Number = Number(button.name.split("button")[1]);
if(button)....

しかし、あなたの新しいコードでは、

var button:blueGradient = event.target as blueGradient;
var id:Number = Number(blueGradient.name.split("button")[1]);
if(blueGradient)

違いが見えますか?どちらの場合も、ボタンオブジェクトを「varボタン」と呼んでいますが、新しいバージョンでは、「bluegradient.name.split ...」を「button.name.split ...」と書いています。 if()ステートメントのため。

VARキーワードは、オブジェクトの名前を定義します。構文はvar [objectName]:[ObjectType]であり、そのオブジェクトを使用すると、そのタイプではなく、その名前で常に参照したいと思うでしょう。静的メソッドを備えた静的クラスがない限り、それはもう少し高度です。

したがって、要するに、新しいハンドラーの2つの場所で「Bluegradient」を「ボタン」に置き換えると、問題が解消されるはずです。それが助けてくれることを願っています!

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top