リンクをクリップボードにコピー
コピー完了
animate ccでステージ上に直接配置したムービークリップ二つの表示順をjavascriptで変更したいのですが、どうも上手くいきません。
ステージのタイムライン上に
this.setChildIndex(this.奥に表示したいインスタンス名, 0);
と書いてムービープレビューしてもインデックスは変わるのですが表示は変わりません。
どこを間違えているのか、わかる方いらっしゃらないでしょうか?
フレームを移動するたびに、もとに戻ってしまうようですね。可能であれば、重ね順の変更はフレームを止めて行った方がよさそうです。
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フレームいきなりでは、まだ子インスタンスが加わっていないようです。その場合、子インスタンスのインデックスは-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();
}
});
リンクをクリップボードにコピー
コピー完了
返信ありがとうございます。
でも、第1フレームに書き込んでいるわけではないのです。
説明が足らずにすみませんでした。
えーと、ライブラリから手動でステージ上に配置したムービークリップを数フレーム後にタイムライン上のスクリプトから操作したいのですが、それが未だに上手くいきません。
addChildとかsetChildIndex以外の方法も試してみたのですが表示が変わらないのです。
console.log(this.getChildIndex(this.インスタンス名))をsetChildIndexの前後に挟んで調べてみてもインデックスはきちんと変更されていました。
しかし、setChildIndexが含まれているフレームの”次の”フレームでインデックスを調べてみると、何故か変更前の元のインデックスに戻ってしまっていました。
これが原因の一つだと思うのですが、解決方法がわからず、困っています。
なにか気づいたことがありましたら、どんなことでもいいので教えていただけないでしょうか?
リンクをクリップボードにコピー
コピー完了
フレームを移動するたびに、もとに戻ってしまうようですね。可能であれば、重ね順の変更はフレームを止めて行った方がよさそうです。
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);
}
});
リンクをクリップボードにコピー
コピー完了
入れ替えできました!
ありがとうございます。
…でも、こうゆう仕様なんでしょうか?
tickイベントの中でしか変更出来ないってことですよね?
しかも親MCのフレームが進むと強制的に初期化されてしまうという…。(クリックに仕込んだgotoAndStop()でも初期化されました)
以前に親タイムライン上でstop()を入れてインデックスを変更後、stage.update();を試したこともあるんですが、その時は無反応でした。
解決はしたんですが、どうも腑に落ちない感じです。
とはいえ、本当にありがとうございました。
リンクをクリップボードにコピー
コピー完了
確かめたかぎりでは、フレームを移動すると子インスタンスの重ね順がもとに戻ってしまいました。Animate CC 2015.2まで遡っても同じ動きでしたので、腑に落ちない感は否めないものの、仕様と捉えた方がよさそうです。フレームを移動するとき起こるイベントがTicker.tick
ですので、フレームごとに重ね順を設定し直していることになります。