2012-04-20 12 views
0

これは私の最後の質問から私が答えたと思っていたものですが、何かの理由で私のステージ(表示オブジェクト)の子供をムービークリップとして扱うときには適用できません私がしたい通常の機能:as3 movieclipとしての子 - 機能を受け付けません

var mc1:MovieClip = this.getChildByName("mc1") as MovieClip; 
if(mc1) { 
    mc1.useHandCursor = true; 
    mc1.buttonMode = true; 
    mc1.addEventListener(MouseEvent.CLICK, fillDriveway); 
} 

どれ知恵をいただけれ...と事前に前...

おかげのような同様の質問をして申し訳ありませんでしょう。

EDIT:コンテキストについては、このプロジェクトのASからのより多くのコード:

import flash.display.* 

ImageUploader.visible = false; 

function showUploader(e:MouseEvent):void { 
    ImageUploader.visible = true; 
    ImageUploader.gotoAndPlay(2); 
} 

pic.addEventListener(MouseEvent.CLICK,addNewPoint); 

var n:Number = 0; 
var joinPointsArray:Array = new Array; 

function addNewPoint(e:MouseEvent):void { 
    n++; 
    pointNo.text = String(n); 
    if(n==1){ 
     var nextPoint:MovieClip = new mcstart(); 
     addChild(nextPoint); 
     nextPoint.name = "mc"+pointNo.text; 
     nextPoint.x = e.target.mouseX; 
     nextPoint.y = e.target.mouseY; 
    }else{ 
     var nextPoint2:MovieClip = new newPoint(); 
     addChild(nextPoint2); 
     nextPoint2.name = "mc"+pointNo.text; 
     nextPoint2.x = e.target.mouseX; 
     nextPoint2.y = e.target.mouseY; 
    } 

    var joinPoints:MovieClip = new MovieClip(); 
    this.addChild(joinPoints); 
    joinPointsArray.push(joinPoints); 
    joinPoints.graphics.lineStyle(0.5,0xFF0000); 
    joinPoints.graphics.moveTo(this.getChildByName("mc1").x, this.getChildByName("mc1").y); 
    for(var i:int=2; i<=n; ++i){ 
     joinPoints.graphics.lineTo(this.getChildByName("mc"+i).x, this.getChildByName("mc"+i).y); 
    } 
} 

pic.addEventListener(MouseEvent.CLICK, addNewPoint); 

function fillDriveway(eventObject:MouseEvent) { 
    var joinPoints:MovieClip = new MovieClip(); 
    this.addChild(joinPoints); 
    for(var p:int=0; p<(joinPointsArray.length); ++p) { 
     joinPointsArray[p].alpha = 0; 
    } 
    this.getChildByName("mc1").alpha = 0; 
    joinPoints.graphics.beginFill(0xFFFFFF, 0.7); 
    joinPoints.graphics.moveTo(this.getChildByName("mc1").x, this.getChildByName("mc1").y); 
    for(var m:int=2; m<=n; ++m){ 
     joinPoints.graphics.lineTo(this.getChildByName("mc"+m).x, this.getChildByName("mc"+m).y); 
    } 
    joinPoints.name = "driveshape"; 
    filledDrive.text = "filled"; 
} 

function undoit(eventObject:MouseEvent) { 
    if(n > 0) { 
     if(filledDrive.text.indexOf("filled") != -1) { 
      this.removeChild(this.getChildAt(this.numChildren -1)); 
      filledDrive.text = ""; 
      }else{ 
      this.removeChild(this.getChildAt(this.numChildren -1)); 
      this.removeChild(this.getChildAt(this.numChildren -1)); 
      n--; 
      pointNo.text = String(n); 
     } 
    } 
} 

function maskDrive(eventObject:MouseEvent) { 
    if(filledDrive.text.indexOf("filled") != -1) { 
     var finishA:MovieClip = new finishMC(); 
     this.addChild(finishA); 
     finishA.x = 310; 
     finishA.y = 100; 
     finishA.mask = getChildByName("driveshape"); 
     finishA.gotoAndPlay(2); 
    } 
} 

//BTN RollOvers 
function btn1over(myEvent:MouseEvent) { 
    btn1.gotoAndPlay(2); 
} 
function btn1out(myEvent:MouseEvent) { 
    btn1.gotoAndPlay(11); 
} 
function btn2over(myEvent:MouseEvent) { 
    btn2.gotoAndPlay(2); 
} 
function btn2out(myEvent:MouseEvent) { 
    btn2.gotoAndPlay(11); 
} 
function btn3over(myEvent:MouseEvent) { 
    btn3.gotoAndPlay(2); 
} 
function btn3out(myEvent:MouseEvent) { 
    btn3.gotoAndPlay(11); 
} 
function undoover(myEvent:MouseEvent) { 
    undo.gotoAndPlay(2); 
} 
function undoout(myEvent:MouseEvent) { 
    undo.gotoAndPlay(11); 
} 

//BTN Calls 
btn1HIT.addEventListener(MouseEvent.CLICK, fillDriveway); 
btn1HIT.addEventListener(MouseEvent.ROLL_OVER, btn1over); 
btn1HIT.addEventListener(MouseEvent.ROLL_OUT, btn1out); 
btn1HIT.buttonMode = true; 
btn1HIT.useHandCursor = true; 
btn2HIT.addEventListener(MouseEvent.CLICK, maskDrive); 
btn2HIT.addEventListener(MouseEvent.ROLL_OVER, btn2over); 
btn2HIT.addEventListener(MouseEvent.ROLL_OUT, btn2out); 
btn2HIT.buttonMode = true; 
btn2HIT.useHandCursor = true; 
btn3HIT.buttonMode = true; 
btn3HIT.useHandCursor = true; 
btn3HIT.addEventListener(MouseEvent.ROLL_OVER, btn3over); 
btn3HIT.addEventListener(MouseEvent.ROLL_OUT, btn3out); 
btn3HIT.addEventListener(MouseEvent.CLICK, showUploader); 
undoHIT.addEventListener(MouseEvent.CLICK, undoit); 
undoHIT.addEventListener(MouseEvent.ROLL_OVER, undoover); 
undoHIT.addEventListener(MouseEvent.ROLL_OUT, undoout); 
undoHIT.buttonMode = true; 
undoHIT.useHandCursor = true; 

var mc1:MovieClip = this.getChildByName("mc1") as MovieClip; 
if(mc1) { 
    mc1.useHandCursor = true; 
    mc1.buttonMode = true; 
    mc1.addEventListener(MouseEvent.CLICK, fillDriveway); 
} 
+0

「mc1」は映画クリップですか? 'if'文は実行されていますか? 「私は通常の機能を適用できません」とはどういう意味ですか? –

+0

"mc1"は、インスタンス名が "mc1"の動的に作成されたムービークリップです。タイムライン上で通常のムービークリップとして参照する必要がありますが、表示オブジェクトとしてのみ分類されているため表示されません。だから、私はムービークリップとして "mc1"と呼ばれる新しいvarに定義しています。通常のアクションを適用して、上記のようなタイムラインのムービークリップにすることはできますが、機能しません。コンパイラエラーはありません。mc1は私のASに適用されたアクションに反応しません。 – bigtoothmedia

答えて

0

Wahoo!理解した!ユーザーは「PIC」ムービークリップのどこかをクリックするまでは作成されません - それは存在していた前に、私が子供の「MC1」に言及したように、私の最後で

var mc1:MovieClip = this.getChildByName("mc1") as MovieClip; 

飛び出ることで

。 「MC1」子が作成された後にこの関数を呼び出すために、その後

function createstartEndMC():void { 
    var startEnd:MovieClip = (this.getChildByName("mc1")) as MovieClip; 
    startEnd.useHandCursor = true; 
    startEnd.buttonMode = true; 
    startEnd.addEventListener(MouseEvent.CLICK, fillDriveway); 
} 

と::だからソリューションは、別の関数に(ムービークリップとしてそれを宣言する含む)「MC1」のための私の行動を栓した

function addNewPoint(e:MouseEvent):void { 
    n++; 
    pointNo.text = String(n); 
    if(n==1){ 
     var nextPoint:MovieClip = new mcstart(); 
     addChild(nextPoint); 
     nextPoint.name = "mc"+pointNo.text; 
     nextPoint.x = e.target.mouseX; 
     nextPoint.y = e.target.mouseY; 
     createstartEndMC(); 
    } 

最後に、「mc1」(または「startEnd」は、作成してMCにしたときに「startEnd」と呼びます)は、最終的に通常のタイムラインMCとして動作します。

私はとてもうれしく思っています。

カム

1

あなたはムービークリップがステージ上に置かれたり、実際にムービークリップに変換されますか? お試しくださいstage.getChildByName()このコードはどこに配置しましたか?フレーム内またはメインドキュメントクラス内子供がステージに追加されたことを確認して、名前が何であるかを確認することができます。 あなたは私もこれを見てきました。このコード

 for (var i :int = 0; i < this.numChildren; i++) 
     { 
      babe = this.getChildAt(i); 
      if (babe is MovieClip) { 
       trace(babe.name); 
      } 
     } 

を使用することができ、それが動作するかわからない場合。

if (stage.contains(mc1)) { 

} 
+0

ありがとうgia​​nnosfor、私はそれがステージに追加されていると私はそれがmovieclipだが、喜びではないと宣言しているコードの最初のビットで投稿されたコードの第2ビットから見ることができます - 文は動作しません: 'var mc1:MovieClip =(this.getChildByName(" mc1 "))as MovieClip; \t mc1.useHandCursor = true; \t mc1.buttonMode = true; \t mc1.addEventListener(MouseEvent。CLICK、fillDriveway); ' – bigtoothmedia

+0

上記の例でも、コンパイラエラーはまったくうれしくありません:( – bigtoothmedia

+0

' mc1'は 'if'文に入りますか?確実にするために' trace'を置いていますか? 'mc1'が正しくキャストされているかどうかを調べるために内部のコードを使用しています。また、' fillDriveway'関数の中に 'trace'を置いて相互作用するかどうかを調べることもできます。また、' mc1.useHandCursor =真」は必要ではない。 –

関連する問題