ページ 11

画像を変更すると、キャラチップが一瞬消えてしまいます 【解決済】

Posted: 2016年4月24日(日) 21:21
by じぃじぃ
いつもお世話になっています。

現在製作中のゲームでキャラチップの差分を大量に使用しています。
例えば、主人公のキャラチップだけでも
通常歩行、ダッシュ歩行、見上げる、うつむく、笑う、きょろきょろする……
など、様々な差分を用意しています。

会話イベント中に「移動ルートの設定→画像の変更」を利用し
セリフに合わせてこれらのキャラチップを変更していくのですが、
なぜか変更の瞬間、キャラが一瞬消えてしまうことがあります。
(一瞬=多分、1フレームくらいの間だと思うのですが…)

以前VX Aceでも同じことをやっていたのですが
その時はこのような現象に見舞われることはなかったため
なぜMVで起こるのか原因、そして解決法が分かればと思い
質問させて頂きました。

また、一瞬消えてしまうのは100%ではなく
起こる場合と起こらない場合があるようで
その法則性も今のところ見つけられていない状態です…

ほんの一瞬とは言え、キャラクターの姿が消えてしまうと
気になる人は気になると思いますし
自分自身、演出の妨げになっていると感じているので
もしどなたか、知恵をお借りできれば大変有り難く思います。

どうぞよろしくお願い致します。

Re: 画像を変更すると、キャラチップが一瞬消えてしまいます

Posted: 2016年4月24日(日) 23:28
by 名無し蛙
お疲れ様です。

多分画像読み込み時間が影響していますね。
たびたび話題に挙がっていますがVXAまでとは違い
MVはファイル(特に画像)読み込み時間というものを意識しないといけません。

Window.pngやフォントファイル等のシステム画像はScene_Bootで一括でロードしていますし
戦闘アニメーションや文章ウィンドウの顔グラフィック等はロード時間を意識させない工夫がされていますけど
それ以外のスプライト全般はゲーム中最初に画像を使用した段階で読み込み処理が入る、と思います。

最初からマップに配置されているキャラチップや遠景等はScene_Mapのcreate内で読み込みされていますが
途中でキャラチップや遠景を変更したりピクチャ表示をする場合等はこれと言った工夫がされてなく
表示命令→(読み込みラグ)→表示という順に処理されているのではないでしょうか。

対策としてはちょうどトリアコンタンさんがタイムリーなプラグインを本日公開したので
これを導入すれば直るのではないか、と思います。
あるいは事前に該当ファイルを表示する事でロードを済ませたりですかね。
もし根本的に勘違いしているところがあれば詳しい人訂正をお願いします。
あとプリロード済みでも変化がなければ仮説を考え直すので改めておっしゃってください。

http://triacontane.blogspot.jp/2016/04/ ... st_24.html

Re: 画像を変更すると、キャラチップが一瞬消えてしまいます

Posted: 2016年4月26日(火) 01:47
by じぃじぃ
ご教示ありがとうございます!
MVのシステムに起因するものだったのですね…
プログラム素人の自分には
思いつかないような問題が色々あるのですね

教えていただいたプラグインを使って
試してみようと思います。
こちらのプラグインをすぐに使いこなせるかどうか
パッと見で判断できない感じではありますが
頑張ろうと思います :evil:

解決すればその旨を報告し、
解決しなかった場合は改めて
質問させて下さいm(__)m
名無し蛙さん、ご回答ありがとうございました!

Re: 画像を変更すると、キャラチップが一瞬消えてしまいます

Posted: 2016年4月26日(火) 19:58
by 名無し蛙
追記で。
こういう機会でもなければお披露目する事も無いと思うので
今回の件をプラグインを使わずに最小限で改善する正攻法も紹介しておきます。
勿論、原因はbitmapを事前にロードしていない事による弊害である、という前提ですけど。

今更ですがここでいう「ロード」とはHDDに置いてあるファイルデータをメインメモリに転送する処理の事を指します。
画像素材を使用する時は全て「ロード」しないといけませんが製作者の工夫でタイミングを調整する事が可能です。
ロード処理は基本的に重くて動作遅延の原因になり易いので
如何にプレイヤに不快感を与えずにロード処理を済ませる事が出来るか、というのもけっこう重要な要素だと思います。

イベントコマンド>スクリプトで以下のコードを入力する事で画像ファイルのロードを済ませる事が出来ます。
imgフォルダ内の14個のフォルダに対応しています。
filinameを指定する時に拡張子(.png)は不要です。hueとは色相値の事ですが省略可能です。

コード: 全て選択

ImageManager.loadAnimation(filename, hue);
ImageManager.loadBattleback1(filename, hue);
ImageManager.loadBattleback2(filename, hue);
ImageManager.loadEnemy(filename, hue);
ImageManager.loadCharacter(filename, hue);
ImageManager.loadFace(filename, hue);
ImageManager.loadParallax(filename, hue);
ImageManager.loadPicture(filename, hue);
ImageManager.loadSvActor(filename, hue);
ImageManager.loadSvEnemy(filename, hue);
ImageManager.loadSystem(filename, hue);
ImageManager.loadTileset(filename, hue);
ImageManager.loadTitle1(filename, hue);
ImageManager.loadTitle2(filename, hue);
そしてもう一つ。
以下のコードを入力する事で「画像ファイルのロードが終わるまでウェイトを掛ける」と指定する事が出来ます。

コード: 全て選択

this.setWaitMode('image');
例えば動作差分のファイル名をDamage1.pngと仮定しますが
会話イベントの頭で以下のように書く事で肝心な部分での動作遅延を防ぐ事が出来ます。
SS.png
これが一応「正攻法の改善方法」だと思うのですが、
ゲームサイズが数百MB以下であり、PC環境でのプレイを想定しているのであれば
細かいメモリ管理等は不要でゲーム開始時に全ての素材ファイルをロードした方が良いと思います。
そしてそれを実現する手軽な方法が先に紹介したトリアコンタンさんのプラグインですね。
強いて欠点を挙げるなら頻繁に起動するテストプレイ時まで
逐一全ての素材をロードしても仕方が無いので本番用と割り切った方が良いくらいでしょうか。

Re: 画像を変更すると、キャラチップが一瞬消えてしまいます

Posted: 2016年4月30日(土) 16:00
by じぃじぃ
名無し蛙さん

追記の正攻法、教えていただきありがとうございます!!!
プラグイン導入よりすぐ出来そうだったので
試してみたところ、一瞬消えてしまう現象は起こりませんでした。
仰る通り、読み込み時間に起因するものだったんですね。
お陰さまで、キャラクター消失事件を起こさずに
製作を進められそうです。
実際に導入されたイベント画面を貼ってくださったことで
スクリプトがよくわからない自分でもスムーズに
実装することが出来ました。ありがとうございました!

プライベートが急に忙しくなってしまい
ツクールに触れる時間が取れず、
反応が遅れてしまいました。申し訳ありませんでした。
本当に助かりました。
このトピックは解決済にしておきますm(__)m