Skip to main content
wildtabby
Participant
October 21, 2017
Answered

[animate cc]ムービークリップの重ね順変更

  • October 21, 2017
  • 1 reply
  • 1572 views

animate ccでステージ上に直接配置したムービークリップ二つの表示順をjavascriptで変更したいのですが、どうも上手くいきません。

ステージのタイムライン上に

this.setChildIndex(this.奥に表示したいインスタンス名, 0);

と書いてムービープレビューしてもインデックスは変わるのですが表示は変わりません。

どこを間違えているのか、わかる方いらっしゃらないでしょうか?

    This topic has been closed for replies.
    Correct answer Fumio Nonaka

    フレームを移動するたびに、もとに戻ってしまうようですね。可能であれば、重ね順の変更はフレームを止めて行った方がよさそうです。

    var mc_1 = this.mc_1;

    var mc_0 = this.mc_0;

    var timeline = this;

    createjs.Ticker.addEventListener('tick', function(event) {

         if (timeline.getChildIndex(mc_1) !== 0) {

              console.log(timeline.getChildIndex(mc_1));

              timeline.setChildIndex(mc_1, 0);

         }

    });

    1 reply

    Fumio Nonaka
    Community Expert
    Community Expert
    October 28, 2017

    メインタイムラインの第1フレームいきなりでは、まだ子インスタンスが加わっていないようです。その場合、子インスタンスのインデックスは-1になります。子が加わったのを確かめて処理を行うとよいでしょう。

    var mc_1 = this.mc_1;

    var mc_0 = this.mc_0;

    var timeline = this;

    console.log(timeline.numChildren, timeline.getChildIndex(mc_1));  // 0 -1

    createjs.Ticker.addEventListener('tick', function(event) {

         if (timeline.getChildIndex(mc_0) > -1 && timeline.getChildIndex(mc_1) > -1) {

              timeline.setChildIndex(mc_1, 0);

              stage.update();

              event.remove();

         }

    });

    wildtabby
    wildtabbyAuthor
    Participant
    October 28, 2017

    返信ありがとうございます。

    でも、第1フレームに書き込んでいるわけではないのです。

    説明が足らずにすみませんでした。

    えーと、ライブラリから手動でステージ上に配置したムービークリップを数フレーム後にタイムライン上のスクリプトから操作したいのですが、それが未だに上手くいきません。

    addChildとかsetChildIndex以外の方法も試してみたのですが表示が変わらないのです。

    console.log(this.getChildIndex(this.インスタンス名))をsetChildIndexの前後に挟んで調べてみてもインデックスはきちんと変更されていました。

    しかし、setChildIndexが含まれているフレームの”次の”フレームでインデックスを調べてみると、何故か変更前の元のインデックスに戻ってしまっていました。

    これが原因の一つだと思うのですが、解決方法がわからず、困っています。

    なにか気づいたことがありましたら、どんなことでもいいので教えていただけないでしょうか?

    Fumio Nonaka
    Community Expert
    Fumio NonakaCommunity ExpertCorrect answer
    Community Expert
    October 28, 2017

    フレームを移動するたびに、もとに戻ってしまうようですね。可能であれば、重ね順の変更はフレームを止めて行った方がよさそうです。

    var mc_1 = this.mc_1;

    var mc_0 = this.mc_0;

    var timeline = this;

    createjs.Ticker.addEventListener('tick', function(event) {

         if (timeline.getChildIndex(mc_1) !== 0) {

              console.log(timeline.getChildIndex(mc_1));

              timeline.setChildIndex(mc_1, 0);

         }

    });