memo

ゲーム制作やデザインについての個人的メモ

【ティラノスクリプト】トランジションの仕様について

※自分で調べたり考えたりしたことなので間違ってる情報が含まれているかもしれません。「それは違うよ!!」ってことがあればお知らせください。

【ティラノスクリプト吉里吉里トランジションの違い】

f:id:onigirimgmg:20161118183740p:plain

ティラノスクリプトは古い絵と新しい絵の透明度を同時に変える(片方は薄くしていく、片方は濃くしていく)ことでクロスフェードを表現しています。そのため入れ替え中は絵が半透明になり、背景が透けて見えることになります。

f:id:onigirimgmg:20161118183915p:plain

吉里吉里は入れ替え前の画面をまるごと裏ページにコピーして、絵を入れ替えてから徐々に表示させることでクロスフェードを表現しています。つまり背景等も含めた画面全体の絵(正確には絵じゃないのだけど)を入れ替えているわけなので、透けることはありません。当たり前のように使ってたけどよく考えるとすごい仕組みですね。

吉里吉里トランジションについては公式の説明がとてもわかりやすいです。
トランジションを使おう

f:id:onigirimgmg:20161118183227p:plain

上:ティラノスクリプトトランジション/下:吉里吉里トランジション

【ここから本題(ティラノの話)】

背景はそんなに気にならないのですが、[chara_mod]で表情変更するときに一瞬透明になるのがとても気になってしまいます。(瞬間表示なら問題ありません)なんとかできないかなあ、と思ってごちゃごちゃやってみたので一応載せておきます。改造は自己責任でお願いします。

DEMO([chara_mod]カイゾウテストを選択)

・kag.tag_ext.js > tyrano.plugin.kag.tag.chara_mod 内

if (chara_time != "0") {
/* 元の記述は削除
var j_new_img = $(".layer_fore").find("." + pm.name).clone();
j_new_img.attr("src", "./data/fgimage/" + storage_url);
j_new_img.css("opacity", 0);
var j_img = $(".layer_fore").find("." + pm.name);
j_img.after(j_new_img);
j_img.fadeTo(parseInt(chara_time),
0,
function() {});
j_new_img.fadeTo(parseInt(chara_time), 1, function() {
j_img.remove();
that.kag.ftag.nextOrder()
})
*/
//表画面の要素全部を裏画面にコピーする
var page_fore = $("#tyrano_base");
var page_back = page_fore.clone(true).insertAfter(page_fore);
//裏画面を一時的に透明にして最前面に置く
page_back.css("opacity", 0);
page_back.css("z-index", 100000000);
//裏画面のキャラクター画像を差し替え
page_back.find("." + pm.name).attr("src", "./data/fgimage/" + storage_url);
//裏画面をフェードインする
page_back.fadeTo(parseInt(chara_time),1,function() {
//表画面のキャラクター画像を差し替え
page_fore.find("." + pm.name).attr("src", "./data/fgimage/" + storage_url);
//裏画面を削除
page_back.remove();
that.kag.ftag.nextOrder()
})
} else {

ほんとは裏画面をそのまま表画面と差し替えて元の表画面は削除したかったんだけど、メッセージレイヤ内のテキストの表示がうまくいかなかった。ので、代替え案として裏画面の表示が終わった後に表画面(隠れて見えない)の画像を差し替えてから裏画面(見えてる)を削除する→差し替え後の表画面が見える、という感じにしました。うーん謎。

 プログラミングのプの字も知らないド素人が書いたスクリプトなのでなんか色々間違ってるかもしれません。むしろ詳しい人に教えてほしいっす。