テスト公開です! 副作用があれば教えてください。

WebGLモード限定です。canvasモードでは試していません。

 

https://github.com/sabakan03/mv/blob/master/Project/js/plugins/Saba_Performance.js

 

僕はMacで作業してるんだけど、Windowsでもテストしようと思って、仮想PCでWindowsを立ち上げてMVゲーをプレイしてみたんですよ。そしたら起動まで10秒ぐらいかかった挙句、シーンが切り替わる度に重くて、全然ゲームになりませんでした。

仮想PCの設定がおかしいのかなと思って、CPU2こ、メモリ8G、グラフィックメモリ1G割り当てたんだけど、それでもクソ重くて。格闘ゲームも遅延なく動くのに、RPGがまともに動かないってどういうことなんだろう? もしかして僕のスクリプト、Windows環境では動かないのかも!? と思って、友人3人にテストしてもらったのでした。

結果は、ゲーミングPC使ってる人は快適、4年前のノートを使ってる人はかなり重い、5万円のデスクトップを使ってる人はクソ重いという結果になりました。ああ、MVが重いって言われてて、僕は全くそんなことを感じなかったんだけど、こういうことなのかーと、この時初めて知りました。

というか、僕の仮想PCだと、サンプルゲーすらまともに動かないんですよね。canvasモードだと、FPS30ぐらいで一応は動作するんだけど、WebGLモードだと、通常は60FPSで、シーン切り替え時に0付近まで落ちます。

でもプロファイラで見ても、そこまで遅くないんですよね。

image2

メニューの開閉を10回繰り返した結果。いやまあアイドル時間は40%もないですけど、実際はほぼ画面固まってて、このプロファイル結果よりもはるかに重いのです。というか絶対9秒弱もアイドル時間なかったですし! メニューボタン連打してたんですよ!

そしてよーく見ると、明らかにcanvas系が時間かかってるみたいですよね。環境によっては、WebGLモードでcanvas描画すると重いのかな? というわけで、canvasを使うところを駆逐したのが↑のプラグインです。drawTextと、ゲージ描画以外は全てPIXIを使うようにしました。

image3

かなり改善されました。友人も軽くなったと言っていたので、ここでひとまず完了としました。

すごく改善されたor逆に重くなったって人がいたら、教えて下さい〜。メニュー画面でFPSが40まで落ちたって報告はもらったんだけど、こっちでは再現しないんですよね。

 

■以下メモ。僕の仮想PC環境では……

・画像を読み込むと遅い。
これは、画像を読むと同サイズのcanvasが生成されて、drawImageも走るため。canvas生成よりも drawImage の方が重い。ゲーム開始時にたくさん画像を読んでると、タイトル画面が出るまでにすごい時間がかかる。


・メニューを開くと遅い。
たまに2秒ぐらい固まることも。これは、Bitmap.snap の
canvas = Graphics._renderer.extract.canvas(renderTexture);
と、そのあとの Bitmap.blur 内の drawImage のせい。


・ギャルゲー風会話プラグインが重い
話し手が変わるとFPSが0近くまで落ちる。これは drawImage でたくさん描画しているため。
(これも修正したので、そのうち更新します……)


・場所移動が重い
タイルセットが同じマップ間なら早い。タイルセットをがっつり変更したマップに移動すると重い。でも、3〜4回移動すると治る。
RectTileLayer.prototype.renderWebGL
の中で、描画データを作るところで固まるらしくて、2時間ぐらい調査したんだけど、原因不明。


・BGM再生が重い
友人はここは重くないと言っていたので、キャッシュするなどの対応は入れませんでした。(一応、音量0にすると読み込みをしないようにしました)


・まとめ
canvas.getContext() の drawImage が一番重い。drawImage は、putImageData しても変わらず。というか、context に触りに行くだけで固まることも。その他の改善はオマケ程度。drawImage (= Bitmap.blt)を使うと、環境によっては重いのでご注意を。
なぜ重い環境があるのかは不明。グラボによるような気がしないでもない?

Comments コメントなし »

JSのみ
(右クリックで「名前を付けてリンク先を保存」してファイルをDLして下さい)
Saba_Tachie.js

暗号化に対応しました

 

Comments コメントなし »

何度もF5押していると、New Game 選択したり Continue を選択したりするのも面倒なので、勝手にしてくれるプラグインです。
開発環境からGameを起動した時のみ動作します。

(右クリックで「名前を付けてリンク先を保存」してファイルをDLして下さい)
Saba_AutoNewGame.js

 

  • New Game を選択した後に F5 を押すと、自動で New Game が実行されます。
  • Continue を選択した後に F5 を押すと、自動で最後にロードされたファイルが読み込まれます。
  • Save を選択した後に F5 を押すと、自動でそのファイルが読み込まれます。
  • Saba_SimpleScenario と併用していると、F5のたびに変換が走ります。
  • rinne_grid さんの RecollectionMode と併用していて、シーン回想を選んでF5を押すと、再度そのシーンが実行されます。
  • ロード時にBGMが再生されないバグを修正
  • ロード時にマップイベントが更新されないバグを修正
  • テストモードでない時にゲームが始まらないバグを修正←NEW
 

Comments コメントなし »

ダウンロード

JSのみ
(右クリックで「名前を付けてリンク先を保存」してファイルをDLして下さい)
Saba_Tachie.js

取り急ぎmv1.3に対応しました。まだバグってたら教えて下さい。

 

Comments 2 コメント »

jsだけは自分用に、たまに更新してるので、ばぐってたらもしかしたら最新版では直ってるかもしれません。

https://github.com/sabakan03/mv/tree/master/Project/js/plugins

ではまた〜

Comments 4 コメント »

一定歩数だけ効果を発揮するような仕組み(キャラグラ変更、エンカ抑制とか)を作りたいときにどうぞ。

■例えば(きえさり草)
1. キャラを透明にするコモンイベントAを作る
2. キャラの透明を解除するコモンイベントBを作る
3. アイテム使用でコモンイベントAを呼び出す
4. コモンイベントAの中で一定歩数でコモンイベントBを呼ぶように予約する

(右クリックで「名前を付けてリンク先を保存」してファイルをDLして下さい)
Saba_CommonEventBySteps.js

Comments コメントなし »

装備スロット選択画面(↓)で、LRを押すことでアクター切り替えができるようになります。
スクリーンショット 2016-06-05 13.44.04

 

(右クリックで「名前を付けてリンク先を保存」してファイルをDLして下さい)
Saba_EquipSlotLR.js

Comments 1 コメント »

ゲーム中で、アイテム、武器防具、スキルの並びを変えたいけどデータベースの並びは変えたくない。とかいうときにどうぞ。

(右クリックで「名前を付けてリンク先を保存」してファイルをDLして下さい)
Saba_SortOrder.js

Comments 1 コメント »

何度もF5押していると、New Game 選択したり Continue を選択したりするのも面倒なので、勝手にしてくれるプラグインです。
開発環境からGameを起動した時のみ動作します。

(右クリックで「名前を付けてリンク先を保存」してファイルをDLして下さい)
Saba_AutoNewGame.js

 

  • New Game を選択した後に F5 を押すと、自動で New Game が実行されます。
  • Continue を選択した後に F5 を押すと、自動で最後にロードされたファイルが読み込まれます。
  • Save を選択した後に F5 を押すと、自動でそのファイルが読み込まれます。
  • Saba_SimpleScenario と併用していると、F5のたびに変換が走ります。
  • rinne_grid さんの RecollectionMode と併用していて、シーン回想を選んでF5を押すと、再度そのシーンが実行されます。
  • ロード時にBGMが再生されないバグを修正←NEW
  • ロード時にマップイベントが更新されないバグを修正←NEW
 

Comments コメントなし »

ダウンロード

JSのみ
(右クリックで「名前を付けてリンク先を保存」してファイルをDLして下さい)
Saba_Tachie.js
Saba_SimpleScenario.js

※起動時にエラーが出る場合は、一度プラグインの設定ウィンドウを開いてそのままOKを押してください

修正点

  • 選択肢表示などがスキップされることがあるバグを修正しました
  • 名前の表示非表示のタイミングを即時にしました
  • ウィンドウ色の変更タイミングをページ切り替え時にしました
  • 立ち絵を使わないアクター表示時は、顔グラを表示するようにしました
  • シナリオで以下のコマンドを追加しました
    • turn_left
    • turn_right
    • turn_up
    • turn_down
    • move_left
    • move_right
    • move_up
    • move_down
  • シナリオのmovieで playback_rate を指定できるようにしました
  • movieを続けて呼んでも全て再生されるようにしました
スクリーンショット 2016-05-05 10.32.20
disabledTachieActorIdList に指定したアクターは、
@n3 とか書くと自動で顔グラが表示されます。
 
 
あと、会話中に振り向くとか一歩移動するとか頻繁にあるんだけど、いちいち
@route_h event=-1 skip=true wait=true
@route type=turn_up
とか書くのめんどくさいので @turn_up などで動作するようにしました。
 
 
ムービー系は僕しか使わないと思うんだけど、一応。

Comments 10 コメント »