終了

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

Community Beginner ,
Oct 21, 2017 Oct 21, 2017

リンクをクリップボードにコピー

コピー完了

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

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

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

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

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

表示

1.3K

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines

correct answers 1 件の正解

Community Expert , Oct 27, 2017 Oct 27, 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);

     }

});

投票

翻訳

翻訳
Community Expert ,
Oct 27, 2017 Oct 27, 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();

     }

});

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
Community Beginner ,
Oct 27, 2017 Oct 27, 2017

リンクをクリップボードにコピー

コピー完了

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

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

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

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

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

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

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

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

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

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
Community Expert ,
Oct 27, 2017 Oct 27, 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);

     }

});

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
Community Beginner ,
Oct 28, 2017 Oct 28, 2017

リンクをクリップボードにコピー

コピー完了

入れ替えできました!

ありがとうございます。

…でも、こうゆう仕様なんでしょうか?

tickイベントの中でしか変更出来ないってことですよね?

しかも親MCのフレームが進むと強制的に初期化されてしまうという…。(クリックに仕込んだgotoAndStop()でも初期化されました)

以前に親タイムライン上でstop()を入れてインデックスを変更後、stage.update();を試したこともあるんですが、その時は無反応でした。

解決はしたんですが、どうも腑に落ちない感じです。

とはいえ、本当にありがとうございました。

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
Community Expert ,
Oct 28, 2017 Oct 28, 2017

リンクをクリップボードにコピー

コピー完了

最新

確かめたかぎりでは、フレームを移動すると子インスタンスの重ね順がもとに戻ってしまいました。Animate CC 2015.2まで遡っても同じ動きでしたので、腑に落ちない感は否めないものの、仕様と捉えた方がよさそうです。フレームを移動するとき起こるイベントがTicker.tickですので、フレームごとに重ね順を設定し直していることになります。

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines