0

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

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

知恵をいただければ幸いです...そして、以前と同様の質問をして申し訳ありません...

前もって感謝します。

編集:コンテキストのこのプロジェクトの 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);
}
4

2 に答える 2

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)) {

}
于 2012-04-20T11:58:21.737 に答える
0

ワフー!理解した!

弾けることで

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

AS の最後で、存在する前に子 "mc1" を参照していました。ユーザーが "pic" ムービークリップのどこかをクリックするまで作成されません。したがって、解決策は、「mc1」のアクション (MovieClip として宣言することを含む) を別の関数にまとめることでした。

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」(または、作成されて MC になった後は「startEnd」と呼びます) は、最終的に通常のタイムライン MC のように動作します。

私はとても幸せです - すべてのご指導に感謝します!

カム

于 2012-06-27T11:01:49.340 に答える