1. このサイトではcookie (クッキー) を使用しています。サイトの利用を継続した場合、cookieの使用に同意したものとみなさせていただきます。 詳しくはこちらをご覧ください。

解決に苦労したバグ

しぐれん2017-04-30に開始した「ゲーム制作」の中の討論

  1. しぐれん

    しぐれん ユーザー

    ツクールに限らず、ゲームを作っていると遭遇する様々なバグ。
    ここでいろいろ書いて対策をまとめてみようと思います。
    • 突然のエラー落ち
    • 音楽が流れているのに一切操作ができない
    • トリガーを自動実行や並列実行にしたら、動きがおかしい
    • 分岐が予想通りにいかない
    • プラグインが競合し、どうにもならない
    ジャンルは問わないので、みんなで書いてみましょう。
     
    #1
    印度一好色, トリアコンタン, エクセトラ他1人 がいいね!しています
  2. kuro

    kuro フォーラムスタッフ

    しぐれんさん
    制作のヒントになる良いスレッドですね。ありがとうございます。
    投稿される方はこの辺りの情報をそえると、具体的かつわかりやすくていいかもしれません。
    • 制作ツール:例)ツクールMV
    • 発生したバグ:例)テストプレイ時にエラー「Cannot read property 'XXXX' of null」が発生する
    • 再現方法:テストプレイでセーブデータを読み込む
    • 発生頻度:100%発生(10回中10回確認)
    • 試したこと:
      プラグインを追加していた後に発生していたため、プラグイン導入後の影響と判断
    • 解決方法:
      プラグイン導入後はニューゲームを選択orプラグイン導入後に作成したセーブデータを使うようにする
    この通りに書く必要はありませんので、お気づきの点はどんどん投稿して頂ければと思います。
     
    #2
    メルサイア, 印度一好色神無月サスケ がいいね!しています
  3. Ronto_255

    Ronto_255 ユーザー

    バグじゃないけど、スマホ向けやブラウザ向けにゲームを出力する際は、BGMファイルを.oggと.m4a両方入れないと再生されないことがあるので注意。
    PC上でテストしているだけでは気づきにくいので、スマホアプリやウェブアプリとして公開したときに「アレ?」ってなるケースは多そう。
     
    #3
    印度一好色, moge-moge-kun, kuro他1人 がいいね!しています
  4. 神無月サスケ

    神無月サスケ ユーザー

    上記の、
    「ゲーム製作途中でプラグインを入れたら、導入前のセーブデータがエラーになる」件ですが、
    これを防ぐのはプラグイン作者側の気配りで可能です(というか、是非配慮してほしい)。

    例えば、Game_System に、this.altOpacity = 128; と言ったような、
    initialize 時に、新しい変数を追加する場合を考えます。
    元のセーブデータの場合、この値は、当然、undefined になります。

    そこで、プラグイン側では、以下のように、最初にこの変数を参照する場合、
    前のセーブデータとの互換性を考えて、以下のように書くといいと思います。
    $gameScreen.altOpacity = $gameScreen.altOpacity == null ? $gameScreen.altOpacity : 128;
    ここで、 ○○ == null とは、○○が、null または undefined の場合に true になります。
    上記の記述が分かりづらい場合、以下でもOKです。

    if ($gameScreen.altOpacity == null) {
    $gameScreen.altOpacity = 128;
    }
     
    最後に編集: 2017-05-04
    #4
    メルサイア, 印度一好色, THEファンキー他5人がいいね!しています
  5. しんぞ

    しんぞ ユーザー

    苦労というより、「多発しすぎて対策が嫌になる」のは、座標設定ミスですね。
    街のデザインをあとで編集しちゃって、扉イベントを修正していないと変な場所に移動して
    「扉を開けると夢の国」チャイクロ状態になりますね(40代にしかわからん)。
    別サイトで恐縮ですが、ツクマテさんで相談して、コモンイベントで対策する方法を教えていただきました。
    http://tm.lucky-duet.com/viewtopic.php?f=23&t=3079
     
    #5
    印度一好色kuro がいいね!しています
  6. しぐれん

    しぐれん ユーザー

    何度か遭遇しているバグに、VScodeでは動くけどツクールMVから起動すると動かないパターンがあります。
    Array.findがツクール側にないため、VScode側でテストしている間は動いたのに、実際に動かすと謎のエラーで止まります。
    しかも、JavaScriptのリファレンスを見ても問題が見つからず厄介。
    こういったメソッドがいくつかあるので、常にMVでの起動を並行して行うよう習慣化しました。
     
    #6
    メルサイア, 印度一好色神無月サスケ がいいね!しています
  7. 神無月サスケ

    神無月サスケ ユーザー

    >しぐれんさん、こん**は。
    JavaScriptは、環境によって、実装されていたり、そうでなかったりするメソッドが多いのが大変多く、
    常にそれがトラブルの元になる言語の筆頭ですよね。心中お察しします。
    僕は、厄介な思いをしないために、最初から徹頭徹尾、MVでチェックするようにしていますが、
    それでも、あるはずのメソッドがなくてエラーになったことは、一度や二度ではありませんでした。

    このため、他環境でテストする時ではなおさら、普段使わないメソッドを使われる場合、
    Mozilla公式の以下のサイトでメソッドの対応状況のチェックをオススメします。
    https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference

    今回の場合、以下をご覧ください。
    リファレンス>ビルトインオブジェクト>Array>Array.prototype.find()
    https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/find
    >互換コード
    >このメソッドは、ECMAScript 2015 仕様に追加されており、
    >すべての JavaScript 実装環境で使用できるとは限りません。
    その上で、代替コードが書いてあるため、これをプラグインとして入れれば、解決するのが、結構有難いですね。

    JavaScriptは、本当に気難しい恋人と付き合う気持ちで、お互い、根気強く対応して参りましょう。
     
    #7
    メルサイア, 印度一好色, トリアコンタン他1人 がいいね!しています
  8. しぐれん

    しぐれん ユーザー

    >神無月サスケさん
    findは比較的新しい関数だったんですね。
    リンク先の資料が非常にわかりやすかったです。
    C++時代のコンパイラ別の対応・非対応を思い出します。
     
    #8
    印度一好色神無月サスケ がいいね!しています
  9. しぐれん

    しぐれん ユーザー

    まさかconstの挙動がMVとChromeで異なるとは予想していませんでしたよと。
    forなどのブロック内部でconst変数を宣言すると、Chromeだと別変数扱いですが、MVは同一変数扱い、かつエラー落ちせずに代入を無視するという挙動です。
    forのスコープ内でのconstは何が起こるかわからないですね。怖い。
     
    #9
    メルサイア神無月サスケ がいいね!しています
  10. ししゃも

    ししゃも ユーザー

    • 制作ツール:ツクールMV 1.5.0
    • 発生したバグ:テストプレイ時に音声の遅延再生が起こる
    • 再現方法:テストプレイをする
    • 発生頻度:80%~90%発生
    • 解決方法:正常再生されるまで、F5でリセットする
      どうにも困っています

      ちなみに、デプロイメントした場合、ブラウザ出力、DL版共に正常再生されます
      これはなんなのでしょうか
     
    #10
  11. kuro

    kuro フォーラムスタッフ

    こんばんは。
    デプロイでは正常なことから、エディタ起動下でのテストプレイが条件のように思えます。

    ・プラグイン(エディタと連携しそうな開発支援系)との切り分け
    ・新規プロジェクトでの切り分け
    ・Steam版のMVとローカル版のMVのエディタの確認(どちらか一方なら問題側を再インストール)
    ・音楽編集ソフト、サウンドドライバ系の切り分け、一時無効化など

    近い事象を聞いたことがありますが、環境依存以上のことはわかりませんでした。
    解決の一助になれば幸いです。
     
    #11
  12. ししゃも

    ししゃも ユーザー

    プラグイン→新規プロジェクトでも発生するのでたぶん無関係
    Steam版→ローカル版しか持ってないので確認不可能
    編集ソフト→どんな形式、サンプリングレートでも発生
    ドライバ→知識不足で不明;x;

    デプロイして正常なので、最終的な作品としては問題ないけど
    テストプレイが何度もF5押さなきゃいけないのでめんどい…
     
    #12
  13. エフ☆

    エフ☆ ユーザー

    RPGアツマールにて。
    プレイヤーから謎解きが難しすぎるという意見が多数寄せられたので調べてみたら、
    謎解きに必要な図柄の入ったタイルセットがスマホでは表示されないというヒドいバグを発見。

    ・考えられる原因
    ①タイルセットが768*768をオーバーしていた
    ②そもそもファイルサイズが重かった

    ・解決方法
    タイルセットのサイズを768*768に直したら表示されるようになった

    とりあえず直ったのでよかったのですが、この原因を詳しく教えてくださる方いたらお願いします。
    ホントに①が原因だったのでしょうか。

    ちなみにBGMなどもma4であっても重すぎるとスマホでは再生されません。
    素材サイトなどからBGMを借りている方でアツマールに投稿される方はご注意。
     
    最後に編集: 2017-08-19
    #13
  14. 万有亭仏壇

    万有亭仏壇 ユーザー

    こんにちは、はじめて投稿します。万有亭仏壇と申します。
    解決に苦労したというより、現在進行形でバグが生じており、なにか解決策はないものかと思い、ここに書き込ませていただきます。
    現在生じているバグは以下のとおり。

    イベント戦闘後、一部のイベント(画像キャラ)のみが勝手に透明化してしまうという現象です。

    それなりに込み入ったイベントシーン内の出来事なので、はじめは私の設定ミスを疑い、実行内容やスイッチの確認から、イベントの消去・再作成など、いろいろ試してみたのですが、どうしても同じバグが再現されてしまいます。
    そもそも私は、そのイベントに対して透明化の指示をしておらず、また透明化の解除をおこなっても効果がありません。
    ちなみに、勝手に透明化しているだけで、イベント自体が実行されていないわけではありません。透明なまま進行します。
    また、まったく同じ実行内容の他のイベント(画像キャラ)は正常に表示されるのですが、どういうわけか、そのイベントのみが透明化してしまいます。
    念のため、すべてのプラグインをoffにしたうえでテストしてみましたが、まったく同じバグが生じてしまったため、競合の可能性は低いと思います。

    ご参考までに、バグが発生するイベントの画像などもアップいたしました。
    なにか、原因等につきましておわかりになられる方がおりましたら、なにとぞアドバイスよろしくお願いします。
     

    添付ファイル:

    #14
  15. WTR

    WTR ユーザー

    万有亭仏壇さん

    赤で印がついているイベントコマンドの前後で透明化してしまう、ということでしょうか?
    その直前までは問題ない?

    赤印が問題だ、と断定できていないのなら
    正確に、どのイベントコマンドで問題が発生しているのか把握するのが大事だと思います。
    イベントの途中にデバッグ用にメッセージ表示等を入れて
    どこまでOK、どこからNG、を絞り込んでみては。
     
    #15
  16. 万有亭仏壇

    万有亭仏壇 ユーザー

    すみません、ご指摘の通りデバッグ文章挟みつつ確認してみたところ、上記の「盗賊退治4」というスイッチがonになった瞬間、
    イベントが透明化するのを確認しました。
    つまり、前掲のイベント位置設定は、透明ではあるものの、正常に進行しています。
    おかげさまでバグ発生のタイミングを特定できました。ありがとうございます。

    しかし、やはり透明化する原因がわかりません。
    先述のくり返しになりますが、同様の処理をおこなっている他のイベントについては、透明化することなく正常に表示されており、困っています……。
     

    添付ファイル:

    #16
  17. WTR

    WTR ユーザー

    スイッチがONになると、倒れグラフィックに変わる、という処理でしょうかねぇ

    EV003darに設定されている倒れグラフィックは歩行グラフィックと同じように3x4のマス全部埋まっているものですか?
    3マス分しかなかったりしませんか?
    もしそうなら、イベントの向きが変わると透明なグラフィックになってしまいますね。
    イベントが下向きなら大丈夫だったりしないでしょうか。
     
    #17
    万有亭仏壇 がいいね!しました
  18. 万有亭仏壇

    万有亭仏壇 ユーザー

    返信ありがとうございます。
    倒れグラフィックが正常に表示されるか、デバッグ用に同じ画像を用いて別のイベント「EV003-2dar」を作成したところ、透明化することなく表示されました。

    このことから考えますと、「EV003darの2ページ目以降の画像だけが、なぜかツクール側で認識されない」というのが透明化の原因のようです。正常に表示された「EV003-2dar」をコピーして「EV003dar」の2ページ目に張り直してもやはりダメでした。

    しかし、このテストのおかげで、多少ぶきっちょな形にはなりますが、透明化回避の代用方法が見つかりました。
    つまり、バグそのものは微塵も解決していないのですが、
    何が何でも勝手に透明化したがる「EV003dar」を「盗賊退治4」スイッチ以降からリストラし、代わって正常に表示される「EV003-2dar」を替え玉として使うことでなんとかなりました。
    おそらく一人ではこのような代替案を思いつくこともなかったと思います。アドバイスありがとうございました。
     

    添付ファイル:

    #18
  19. WTR

    WTR ユーザー

    んーー解決、でいいのかなぁ

    ちなみに、もとのイベントの状態に戻した場合
    倒れグラフィックじゃなくて適当な違う歩行グラフィックを指定しても透明化されてしまうんでしょうか?
     
    #19
  20. 万有亭仏壇

    万有亭仏壇 ユーザー

    あ、いや、すみません。
    おっしゃるとおり、倒れキャラのグラフィックは3マス分しかなく、歩行グラフィックで試したところ、
    何が何でも勝手に透明化したがるはずの「EV003dar」が、急にお行儀よく表示されるようになりました。
    試しに下向き表示にしたところ、これまたこたつで眠る猫のごとく、すんなりとまあ、寝転がるようになりました。
    すみません、バグでもなんでもなく、単なる当方の知識不足によるものでした。大変お騒がせしました。
    恥ずかしいので穴を探して入ってきます。
     
    #20

このページを共有