レイヤー複数あったときこれないとまじできついっす。
ありがとうございました。
よかったです!!
色々と試していった結果、無事治すことが出来たため、同じ問題が起こった方のために書いておきます。 原因自体は明確にはわかっていませんが、Gamemakerを最初にインストールした時に作成されるファイル群にありそうです。 このファイル群は、Gamemakerをただアンインストールするだけでは削除されないようです。 、 1.作成しているファイルなどを外付けの記憶媒体に移しておく。
この手順で無事サウンドファイル周りを使えるようになりました。 ありがとうございました。
xyz様 複数の解決への手かがりとなり得る方法を教えてくださりありがとうございます。
可能性程度でも良いので何か手段が思いつきましたら教えていただけると幸いです
流石にプロジェクト内のコードをいじっただけでシステムエラーは起きないと思います 最初に貼ったmicrosoftコミュニティの一番下にも書いてあった通りOSの再構築をすれば何とかなるとは思いますが.......下手したら最悪データが消えてしまったりもするのでなるべくその方法は避けたいですが.....今のところ対処法が考え付かないです....。申し訳ないです。何かいい方法を思いついたり見つけたらまた送ります!あともしこれを見ている方で分かる方がいたらお願いします!!
wavファイルで試しましたが、できませんでした。
Gamemaker以外では特に何もしていないです。 最後に実行できた状態から実行できなくなる状態になる間もずっとGamemakerを開いていたので、他のソフトなどが影響した可能性は少ないかなと思っています。
開けなくなる直前にしたことは、使用している関数の引数を変更し、それによる変数名を間違えていたくらいなのですが、それが関係ある可能性はありますかね?
すみません!!6):mp3,wav,oggの間違いです!!とはいえそうなってくると色々難しいですね......。ちなみに普通に開けていた時とエラーが起こるようになった時の間にGamemaker studio2以外で何かしら作業した覚えはありますか?
1)していません
2)ffエラーが発生します。
3)同じようなサウンドファイルが作成されてします。
4)クラウド系には保存されていません。
5)正常に開くことが可能です。
6)mp4などをインポートする方法が分からないです、申し訳ございません。
7)エラーは発生しませんでした。
サウンドファイルが全ての原因である可能性が高いってことですね....... いくつかまた聞きたいことと試して欲しいがあるのですが、 1):サウンドファイルはmp4等のファイルを名前変更で拡張子を強制的にmp3等のサウンドファイルにしていないか 2):新しくプロジェクトを作成し、サウンドファイルをインポートし、一度閉じ、開いたときにエラーが起こった時に、再度コマンドプロンプトでコマンドを実行し、開いた場合エラーになるか 3):エクスプローラーから直接ドラッグアンドドロップした場合も同じようになるか 4):Gamemaker studio2のファイルとプロジェクトファイルがクラウド系(One Drive等)のファイルに保存されていないか 5):サウンドファイルがないプロジェクトで画像を作成し、Gamemaker studio2内の画像編集ツールで何か適当に描いて保存し、開いた場合正常に開けるか 6):mp4,wav,ogg全ての音声ファイルでエラーが起こるか 7):Gamemaker studio2以外のソフトで音声ファイルを扱った場合エラーは起きるか
聞くことが多くなってしまってすみません.....
一部訂正させていただきます
①起動時になんらかのサウンドファイルがある状態で、起動時にあったサウンドファイルが一つでも残った状態で実行を行うとff……エラーが発生する。
②起動時にサウンドファイルが一つもない、もしくは起動時にあったサウンドファイルが全て消えていて、 起動後にサウンドファイルを作成、インポートを行うと上で貼ったようなサウンドファイル(参照mp3の中身に関わらず、波形なし)が作成され、それがある状態で実行するとコンパイルエラー
一つもサウンドファイルがなければ何もエラーは起こらず、逆に一つでもサウンドファイルが存在すると1,2のどちらかに該当しエラーが発生します
xyz様の仰ったことを試そうと思い、別のプロジェクトを開き、とりあえず一度実行を行うと、またffprobe.exeエラーが発生してしまいました。 気になったため色々と実験をしてみたところ、それぞれのエラーの発生条件は分かりました
①起動時になんらかのサウンドファイルがある状態で実行を行うとff……エラーが発生する。 ②起動時にサウンドファイルがない状態から、新たにサウンドファイルを作成、インポートを行うと上で貼ったようなサウンドファイル(波形なしでコンパイルエラー発生)
これが全てのプロジェクトで発生しています。
別のプロジェクトでインポートしても同じようになりますか?
ありがとうございます。 実行したところ、上記エラーが発生しなくなりました。
しかし、異なる問題が発生しました。
Error : Failed to convert audio file 'snd_cursor_select'. Check source file 'C:\Users\Username\GameMakerProjects\Project\sounds\snd_cursor_select\snd_cursor_select.mp3' というコンパイルエラーが全てのSoundファイルで出るようになりました。
エクスプローラーからmp3を再生したところ、何も問題がなかったため、一度すべてのサウンドファイルを削除、サウンドファイルを参照する部分をコメントアウトして実行すると、無事実行することが出来ました。 そのため、もう一度サウンドファイルを作り直したところ、インポート操作を行っても このように音の波形が表示されず、そのまま実行するとやはり上記エラーが発生してしまいます。 確認したところ、画像ファイルのインポートもできませんでした。(しかし、これによってエラーは発生しないようです) これらの原因がわかる方いらっしゃいましたらよろしくお願いします。
microsofrコミュニティ https://answers.microsoft.com/ja-jp/windows/forum/all/dllファイルを/4b65ab9b-5d52-4f96-80c4-0e475c8ddac6
microsoftサポート https://support.microsoft.com/ja-jp/topic/システム-ファイル-チェッカー-ツールを使用して不足または破損しているシステム-ファイルを修復する-79aa86cb-ca52-166a-92a3-966e85d4094e
上手く貼れてなかったので貼り直しました!
このエラーはGamemaker studio2のエラーというよりかはWindows自体のエラーで似たような事象が起きた方のMicrosoftコミュニティのトピックとそこの解決方法に書いてあるコマンドについてのサポートページを見つけたので試してみてください
なるほど、そういうツールが作れたら便利そうですね。 ファイル分けを自動化するか、それが難しければ制作中は1つでやって最終的にファイルを分ける方法を考えたいと思います。
ありがとうございます!
素晴らしい
オブジェクトごとに作成したメソッドにF1で飛べるようになってますね。 https://github.com/YoYoGames/GameMaker-Bugs/issues/4322
編集したりするときは、全部の言語一緒の方が、一覧性だったり保管に便利だから一つのファイルの方が楽というのは、わかります。
fontのデータをゲーム実行時に追加できるfont_addがあるので、asaさんのやりたいことができそうかと思いました。
しかし、font_addはGameMakerのフォント画像に追加する文字を、開始と終了の範囲でしか指定できませんでした。 使っている文字だけ追加するエディター上のフォント追加と機能的違いがあります。
今のゲームメッセージリソースCSVはそのままで、 外部ツールとして、PHPでもpythonでもC#でも何でもよいのでCSVを読み込んで、所定の列を入れた新しいCSVを生成するプログラムを作成し、フォント作成のFont Rangeに各CSVを入れるようにするというのはどうでしょうか。 Excelでデータを作っているなら、ExcelのVBAなんかで、ファイル保存したときに自動的に各言語用CSVが生成されるようにすると手間がなくてよいかもしれません。
ゲームメッセージリソースCSVを読み込み ・日本語と英語の文字データだけのCSVを作成する。 ・中国語の文字データだけのCSVを作成する。
日本語用と中国語用のフォントを作成し、Font Rangeに各ファイルを入れる。
これで各フォント必要な文字だけ入ったものが出来上がりそうです。
GameMakerで使う乱数は、「疑似乱数」となるので、乱数生成器にrandom_set_seed()で乱数の種を入れて、random()を呼ぶたびに出てくる数字の順番は毎回同じです。 random_set_seedを自発的に記述していない場合でも、内部的にrandom_set_seed(0)で乱数生成を行っているようです。
randomize() or randomise()を呼び出したときは、乱数の種に入れる数字を作り、random_set_seed()にその種を入れるようになっています。
歴史を遡って同じ乱数の値をとるためには、「データの作成時」にrandomizeを呼び出した後、random_get_seed()を使い、乱数の種を取得し、セーブデータや一時データに保管しておく。
その後、randomを使うときは、何回使ったかの回数を保管しておく。
セーブデータロードや戻るコマンド?などで3ターン目や2ターン目に戻ったときは、保管しておいた乱数の種をrandom_set_seed(種の数字)でリセットして、使った回数分randomize()呼び出しを行う。 すると、同じ乱数を取得することができます。
まとめると、
▼メイン処理 randomize()←最初の一回だけ 乱数の種変数「保管する」=random_get_seed()
▼乱数を使うとき random(数字) randomを呼び出した回数変数++「保管する」
▼元に戻したいとき random_set_seed(乱数の種変数) randomを呼び出した回数変数をループなどでまわして「random(00)」繰り返し呼ぶ 1つ前の乱数を使いたいのでループは「randomを呼び出した回数変数-1」にすればよいと思います。
保管しておくデータは ・乱数の種 ・randomを呼び出した回数 だけで同じ乱数を取得できます。
一つ前だけに戻るのであれば、一つ前のサイコロの結果を保存するというのはどうでしょうか
レイヤーのインスタンスリストとインスタンスのインスペクターが同時に使えるようになったっぽい? 同時に使えないっていう仕様にずーっと苦労しているので、新しいバージョン使いたい……
mask_indexに関わる処理がバグってるっぽいです。 https://forum.gamemaker.io/index.php?threads/2024-6-release-thread.113707/post-676362
そんな法則があったとは...
マリオで言う所のクリボーを作るかクッパを作るかの違いってことですね!確かに作りたいものによりますよね.......ありがとうございます!!!
アクションゲームでいうと、 敵キャラが左右に歩き左右の壁にぶつかったら反転するだけというものから、 もっと複雑な条件で複雑に動くもの、そして本来の意味でのAIに近いようなものまであるので 何を作りたいか次第だと思います。
簡単なものなら初心者でも作れると思いますよ。
一応次のようなワークフローでやっていこうと思いやす。
1当たり判定ルームをそのままメインルームとして活用し、それをコピーしてタイル追加ルームを作成します(この時点で当たり判定が共有されます) 2タイルが完成したらタイル追加ルームをGITにプッシュします。 3受け取ったタイル追加ルームのタイル情報をツールを使ってメインルームにコピペします。 3当たり判定の変更やステージの追加の変更が起きたら1を繰り返します。
複数ルーム+コピペの自動化ツールというものにとりあえずなりました。 ツールといってもタイル追加ルームの.yyファイルにあるタイル情報を抜き取りそれをメインルームの.yyファイルに上書きするというだけのものです。 一旦はこれでコピペ作業が一瞬で終わらせることができます。
ここからまたいろんな問題がありますがとりあえずこれでなんとかやっていきます。 アイデアありがとうございました。
詳しい解説ありがとうございます!解決しました!
jsonファイルを扱うライブラリは各言語に星の数ほどあり、jsonを扱うという処理自体、プログラムでよくやりたいことにあがってくることなので、サンプルも数多ありなので、ツール作成の難易度やコストはそこまで高くないかもしれません。GMLがわかる人なら、たぶん簡単に作れるレベルそうです。
問題点があるとすれば、中身のデータが今回のようにただのテキストファイルだと楽ですが、バイナリなど独自の形式になったり、yyのフォーマットが変わったりしたときに、ツールをメンテナンスする必要があることがリスクかもしれません。 yoyoのさじ加減でアップデートが行われることを考えれば、メンテナンスコストの方が、高いかもしれません。
>> 9 ツール作成のコストがかかりますが、実現できたらかなり有効だと感じました。 アイデアありがとうございます!
.yyの中身はjsonフォーマットの様に見えて、中身を見るとレイヤーごとにデータが存在しています。
当たり判定オブジェクトレイヤーと背景などのグラフィックレイヤーが分かれているのであれば、レイヤーごとのデータを取得することができるので、yyに対してインポートやエクスポートできるツールを作って、抜き出したデータのみをgitなどのバージョン管理ツールで管理します。
抜き出したデータは、好きなバージョンをとってきてから、インポートツールでyyに入れることで、やり直したり、当たり判定オブジェクト担当者が、背景のタイル担当者の変更を入れ込むなどの開発ができそうです。
開発用サブツールは、pythonとかrubyとかphpとかwindowsで動く適当な言語で、サブツールを作ると便利になると思います。
>> 6 同じファイル(ここではroomの.yyファイル)を複数人で変更した際に起こる状態で、どちらかの変更を優先するかを選ばないといけません。 ですので、どちらかの変更をなかったことにしないといけないです。
案ありがとうございます! 作業用ルームと最終的なルームで分けるのはいいかもしれません。 ちょっと試してみようかなと思います
自分の作業用roomにコピペして作業してる間に相手も作業を進めるので、リアルタイムに同期するのは無理なのでこれがどれくらい問題になるか。 コピペして自分の作業用roomに反映させるのがどれくらい面倒くさいか。 が気になるところです。
追記 ここまで書いて、根本的に的外れか面倒にするだけのことを書いた気がします…! 「競合する」というのは具体的にどういうことが起こるのか教えてもらえるでしょうか? 同じプロジェクトを複数人で編集すると「上書きしちゃう」ってことが起こるという話でしょうか?
もっといい方法がある気がしますしどれくらい効率化できるかはやってみないと分かりませんが、 競合させずに同時並行する方法を考えました。 (1)と(2)の作業用roomを用意します。 (1)と(2)の担当者は「相手の作業用roomを変更しない」というルールを守ることとします。 (1)と(2)の作業が完了したら、最終的にroom1に統合します
(1) 当たり判定オブジェクト配置作業用room : room1_for_obj 必要なら背景をroom1_for_backgroundからコピペしてもってくる
(2) 背景制作用room : room1_for_background 必要なら当たり判定objをroom1_for_objからコピペしてもってくる
(3) (1)(2)を統合して完成させるroom : room1 room1_for_objから当たり判定オブジェクトをコピペする room1_for_backgroundから背景レイヤーをコピペする
(2)のところは背景タイルレイヤーのタイルを追加していく作業も含めます。
合ってます!
個人的にすごく興味があるこのトピック。 以下の内容で間違いないでしょうか?違っていたら教えて下さい。
roomの構成
(1) 当たり判定オブジェクトを置いてレベルを設計をする担当 ここでの作業は当たり判定用オブジェクトをroomに配置することでしょうか。
(2) 当たり判定オブジェクトに背景のタイルを追加する担当 ここでの作業は背景を描いて背景タイルレイヤーを作ることでしょうか。 同時並行して進めると時間は短縮されるはずだが、競合が起こる。 (1)→(2)または(2)→(1)の順で進めると競合はしないが時間がかかる。 という問題意識でしょうか。
Uses Physicsにチェックが入ってるとオブジェクト側で設定したfixtureがバインドされます。 そこから新たにコード上で用意したfixtureをバインドすると二つのfixtureがバインドされた状態になります。 fixtureは複数バインドすることが可能ですので現状だと複数のfixtureがバインドされている状態になっていると予想します。 どうしても、コード上で独自に用意したfixtureを用意する場合はUses Physicsのチェックを外し、物理変数を全部指定しないといけないっぽいです。 めんどくさいですが、次のようにするとよいかもしれません。
var fixture = physics_fixture_create(); physics_fixture_set_box_shape(fixture,32,32); physics_fixture_set_density(fixture,0.5); physics_fixture_set_restitution(fixture,0.5); physics_fixture_set_collision_group(fixture,1); physics_fixture_set_linear_damping(fixture,0.1); physics_fixture_set_angular_damping(fixture,0.1); physics_fixture_set_friction(fixture,0.2); physics_fixture_bind(fixture,self); physics_fixture_delete(fixture);
また、set_restitutionにはややこしいですが二つの関数があります。 ・physics_fixture_set_restitution ・physics_set_restitution
physics_fixture_set_restitutionは上の例のように作成したfixtureのrestitutionを変更する関数です。 physics_set_restitutionはすでにバインドされたfixtureのrestitutionを変更する関数です。 physics_set_restitutionの使い方は次の通りです。
var fixture = physics_fixture_create(); physics_fixture_set_box_shape(fixture,16,16); physics_fixture_set_density(fixture,0.5); physics_fixture_set_restitution(fixture,0.5); physics_fixture_set_collision_group(fixture,1); physics_fixture_set_linear_damping(fixture,0.1); physics_fixture_set_angular_damping(fixture,0.1); physics_fixture_set_friction(fixture,0.2); var bindFixture = physics_fixture_bind(fixture,self); physics_fixture_delete(fixture); physics_set_restitution(bindFixture,0.1)
physics_fixture_bindの戻り値を利用してバインドされたfixtureを取得し、そのfixtureのrestitutionを変更します。 バインド済みなので再バインドする必要がありません。
マニュアル(ver2~2.2.x) マニュアル(ver2.3~) YoYoGames YoYoGames 公式コミュニティ GM関連のYoutubeチャンネル集 解説・資料サイト集(日本語) 解説・資料サイト集(英語)
レイヤー複数あったときこれないとまじできついっす。
ありがとうございました。
よかったです!!
色々と試していった結果、無事治すことが出来たため、同じ問題が起こった方のために書いておきます。
原因自体は明確にはわかっていませんが、Gamemakerを最初にインストールした時に作成されるファイル群にありそうです。
このファイル群は、Gamemakerをただアンインストールするだけでは削除されないようです。
、
1.作成しているファイルなどを外付けの記憶媒体に移しておく。
こちらのサイトに書いてあるアンインストーラーをダウンロードして起動
3.Gamemakerに関連するファイルを全て削除(この時に、1番を行っていないと作成したものが全て消えてしまいそうです。)
4.再度インストールし、1番を戻す。
この手順で無事サウンドファイル周りを使えるようになりました。
ありがとうございました。
xyz様
複数の解決への手かがりとなり得る方法を教えてくださりありがとうございます。
可能性程度でも良いので何か手段が思いつきましたら教えていただけると幸いです
流石にプロジェクト内のコードをいじっただけでシステムエラーは起きないと思います
最初に貼ったmicrosoftコミュニティの一番下にも書いてあった通りOSの再構築をすれば何とかなるとは思いますが.......下手したら最悪データが消えてしまったりもするのでなるべくその方法は避けたいですが.....今のところ対処法が考え付かないです....。申し訳ないです。何かいい方法を思いついたり見つけたらまた送ります!あともしこれを見ている方で分かる方がいたらお願いします!!
wavファイルで試しましたが、できませんでした。
Gamemaker以外では特に何もしていないです。
最後に実行できた状態から実行できなくなる状態になる間もずっとGamemakerを開いていたので、他のソフトなどが影響した可能性は少ないかなと思っています。
開けなくなる直前にしたことは、使用している関数の引数を変更し、それによる変数名を間違えていたくらいなのですが、それが関係ある可能性はありますかね?
すみません!!6):mp3,wav,oggの間違いです!!とはいえそうなってくると色々難しいですね......。ちなみに普通に開けていた時とエラーが起こるようになった時の間にGamemaker studio2以外で何かしら作業した覚えはありますか?
1)していません
2)ffエラーが発生します。
3)同じようなサウンドファイルが作成されてします。
4)クラウド系には保存されていません。
5)正常に開くことが可能です。
6)mp4などをインポートする方法が分からないです、申し訳ございません。
7)エラーは発生しませんでした。
サウンドファイルが全ての原因である可能性が高いってことですね.......
いくつかまた聞きたいことと試して欲しいがあるのですが、
1):サウンドファイルはmp4等のファイルを名前変更で拡張子を強制的にmp3等のサウンドファイルにしていないか
2):新しくプロジェクトを作成し、サウンドファイルをインポートし、一度閉じ、開いたときにエラーが起こった時に、再度コマンドプロンプトでコマンドを実行し、開いた場合エラーになるか
3):エクスプローラーから直接ドラッグアンドドロップした場合も同じようになるか
4):Gamemaker studio2のファイルとプロジェクトファイルがクラウド系(One Drive等)のファイルに保存されていないか
5):サウンドファイルがないプロジェクトで画像を作成し、Gamemaker studio2内の画像編集ツールで何か適当に描いて保存し、開いた場合正常に開けるか
6):mp4,wav,ogg全ての音声ファイルでエラーが起こるか
7):Gamemaker studio2以外のソフトで音声ファイルを扱った場合エラーは起きるか
聞くことが多くなってしまってすみません.....
一部訂正させていただきます
①起動時になんらかのサウンドファイルがある状態で、起動時にあったサウンドファイルが一つでも残った状態で実行を行うとff……エラーが発生する。
②起動時にサウンドファイルが一つもない、もしくは起動時にあったサウンドファイルが全て消えていて、
起動後にサウンドファイルを作成、インポートを行うと上で貼ったようなサウンドファイル(参照mp3の中身に関わらず、波形なし)が作成され、それがある状態で実行するとコンパイルエラー
一つもサウンドファイルがなければ何もエラーは起こらず、逆に一つでもサウンドファイルが存在すると1,2のどちらかに該当しエラーが発生します
xyz様の仰ったことを試そうと思い、別のプロジェクトを開き、とりあえず一度実行を行うと、またffprobe.exeエラーが発生してしまいました。
気になったため色々と実験をしてみたところ、それぞれのエラーの発生条件は分かりました
①起動時になんらかのサウンドファイルがある状態で実行を行うとff……エラーが発生する。
②起動時にサウンドファイルがない状態から、新たにサウンドファイルを作成、インポートを行うと上で貼ったようなサウンドファイル(波形なしでコンパイルエラー発生)
これが全てのプロジェクトで発生しています。
別のプロジェクトでインポートしても同じようになりますか?
ありがとうございます。
実行したところ、上記エラーが発生しなくなりました。
しかし、異なる問題が発生しました。
Error : Failed to convert audio file 'snd_cursor_select'. Check source file 'C:\Users\Username\GameMakerProjects\Project\sounds\snd_cursor_select\snd_cursor_select.mp3'
というコンパイルエラーが全てのSoundファイルで出るようになりました。
エクスプローラーからmp3を再生したところ、何も問題がなかったため、一度すべてのサウンドファイルを削除、サウンドファイルを参照する部分をコメントアウトして実行すると、無事実行することが出来ました。
そのため、もう一度サウンドファイルを作り直したところ、インポート操作を行っても
このように音の波形が表示されず、そのまま実行するとやはり上記エラーが発生してしまいます。
確認したところ、画像ファイルのインポートもできませんでした。(しかし、これによってエラーは発生しないようです)
これらの原因がわかる方いらっしゃいましたらよろしくお願いします。
microsofrコミュニティ
https://answers.microsoft.com/ja-jp/windows/forum/all/dllファイルを/4b65ab9b-5d52-4f96-80c4-0e475c8ddac6
microsoftサポート
https://support.microsoft.com/ja-jp/topic/システム-ファイル-チェッカー-ツールを使用して不足または破損しているシステム-ファイルを修復する-79aa86cb-ca52-166a-92a3-966e85d4094e
上手く貼れてなかったので貼り直しました!
このエラーはGamemaker studio2のエラーというよりかはWindows自体のエラーで似たような事象が起きた方のMicrosoftコミュニティのトピックとそこの解決方法に書いてあるコマンドについてのサポートページを見つけたので試してみてください](https://cdn.wikiwiki.jp/proxy-image?url=https%3A%2F%2Fsupport.microsoft.com%2Fja-jp%2Ftopic%2F%25E3%2582%25B7%25E3%2582%25B9%25E3%2583%2586%25E3%2583%25A0-%25E3%2583%2595%25E3%2582%25A1%25E3%2582%25A4%25E3%2583%25AB-%25E3%2583%2581%25E3%2582%25A7%25E3%2583%2583%25E3%2582%25AB%25E3%2583%25BC-%25E3%2583%2584%25E3%2583%25BC%25E3%2583%25AB%25E3%2582%2592%25E4%25BD%25BF%25E7%2594%25A8%25E3%2581%2597%25E3%2581%25A6%25E4%25B8%258D%25E8%25B6%25B3%25E3%2581%25BE%25E3%2581%259F%25E3%2581%25AF%25E7%25A0%25B4%25E6%2590%258D%25E3%2581%2597%25E3%2581%25A6%25E3%2581%2584%25E3%2582%258B%25E3%2582%25B7%25E3%2582%25B9%25E3%2583%2586%25E3%2583%25A0-%25E3%2583%2595%25E3%2582%25A1%25E3%2582%25A4%25E3%2583%25AB%25E3%2582%2592%25E4%25BF%25AE%25E5%25BE%25A9%25E3%2581%2599%25E3%2582%258B-79aa86cb-ca52-166a-92a3-966e85d4094e)
なるほど、そういうツールが作れたら便利そうですね。
ファイル分けを自動化するか、それが難しければ制作中は1つでやって最終的にファイルを分ける方法を考えたいと思います。
ありがとうございます!
素晴らしい
オブジェクトごとに作成したメソッドにF1で飛べるようになってますね。
https://github.com/YoYoGames/GameMaker-Bugs/issues/4322
編集したりするときは、全部の言語一緒の方が、一覧性だったり保管に便利だから一つのファイルの方が楽というのは、わかります。
fontのデータをゲーム実行時に追加できるfont_addがあるので、asaさんのやりたいことができそうかと思いました。
しかし、font_addはGameMakerのフォント画像に追加する文字を、開始と終了の範囲でしか指定できませんでした。
使っている文字だけ追加するエディター上のフォント追加と機能的違いがあります。
今のゲームメッセージリソースCSVはそのままで、
外部ツールとして、PHPでもpythonでもC#でも何でもよいのでCSVを読み込んで、所定の列を入れた新しいCSVを生成するプログラムを作成し、フォント作成のFont Rangeに各CSVを入れるようにするというのはどうでしょうか。
Excelでデータを作っているなら、ExcelのVBAなんかで、ファイル保存したときに自動的に各言語用CSVが生成されるようにすると手間がなくてよいかもしれません。
ゲームメッセージリソースCSVを読み込み
・日本語と英語の文字データだけのCSVを作成する。
・中国語の文字データだけのCSVを作成する。
日本語用と中国語用のフォントを作成し、Font Rangeに各ファイルを入れる。
これで各フォント必要な文字だけ入ったものが出来上がりそうです。
GameMakerで使う乱数は、「疑似乱数」となるので、乱数生成器にrandom_set_seed()で乱数の種を入れて、random()を呼ぶたびに出てくる数字の順番は毎回同じです。
random_set_seedを自発的に記述していない場合でも、内部的にrandom_set_seed(0)で乱数生成を行っているようです。
randomize() or randomise()を呼び出したときは、乱数の種に入れる数字を作り、random_set_seed()にその種を入れるようになっています。
歴史を遡って同じ乱数の値をとるためには、「データの作成時」にrandomizeを呼び出した後、random_get_seed()を使い、乱数の種を取得し、セーブデータや一時データに保管しておく。
その後、randomを使うときは、何回使ったかの回数を保管しておく。
セーブデータロードや戻るコマンド?などで3ターン目や2ターン目に戻ったときは、保管しておいた乱数の種をrandom_set_seed(種の数字)でリセットして、使った回数分randomize()呼び出しを行う。
すると、同じ乱数を取得することができます。
まとめると、
▼メイン処理
randomize()←最初の一回だけ
乱数の種変数「保管する」=random_get_seed()
▼乱数を使うとき
random(数字)
randomを呼び出した回数変数++「保管する」
▼元に戻したいとき
random_set_seed(乱数の種変数)
randomを呼び出した回数変数をループなどでまわして「random(00)」繰り返し呼ぶ
1つ前の乱数を使いたいのでループは「randomを呼び出した回数変数-1」にすればよいと思います。
保管しておくデータは
・乱数の種
・randomを呼び出した回数
だけで同じ乱数を取得できます。
一つ前だけに戻るのであれば、一つ前のサイコロの結果を保存するというのはどうでしょうか
レイヤーのインスタンスリストとインスタンスのインスペクターが同時に使えるようになったっぽい?
同時に使えないっていう仕様にずーっと苦労しているので、新しいバージョン使いたい……
mask_indexに関わる処理がバグってるっぽいです。
https://forum.gamemaker.io/index.php?threads/2024-6-release-thread.113707/post-676362
そんな法則があったとは...
マリオで言う所のクリボーを作るかクッパを作るかの違いってことですね!確かに作りたいものによりますよね.......ありがとうございます!!!
アクションゲームでいうと、
敵キャラが左右に歩き左右の壁にぶつかったら反転するだけというものから、
もっと複雑な条件で複雑に動くもの、そして本来の意味でのAIに近いようなものまであるので
何を作りたいか次第だと思います。
簡単なものなら初心者でも作れると思いますよ。
一応次のようなワークフローでやっていこうと思いやす。
1当たり判定ルームをそのままメインルームとして活用し、それをコピーしてタイル追加ルームを作成します(この時点で当たり判定が共有されます)
2タイルが完成したらタイル追加ルームをGITにプッシュします。
3受け取ったタイル追加ルームのタイル情報をツールを使ってメインルームにコピペします。
3当たり判定の変更やステージの追加の変更が起きたら1を繰り返します。
複数ルーム+コピペの自動化ツールというものにとりあえずなりました。
ツールといってもタイル追加ルームの.yyファイルにあるタイル情報を抜き取りそれをメインルームの.yyファイルに上書きするというだけのものです。
一旦はこれでコピペ作業が一瞬で終わらせることができます。
ここからまたいろんな問題がありますがとりあえずこれでなんとかやっていきます。
アイデアありがとうございました。
詳しい解説ありがとうございます!解決しました!
jsonファイルを扱うライブラリは各言語に星の数ほどあり、jsonを扱うという処理自体、プログラムでよくやりたいことにあがってくることなので、サンプルも数多ありなので、ツール作成の難易度やコストはそこまで高くないかもしれません。GMLがわかる人なら、たぶん簡単に作れるレベルそうです。
問題点があるとすれば、中身のデータが今回のようにただのテキストファイルだと楽ですが、バイナリなど独自の形式になったり、yyのフォーマットが変わったりしたときに、ツールをメンテナンスする必要があることがリスクかもしれません。
yoyoのさじ加減でアップデートが行われることを考えれば、メンテナンスコストの方が、高いかもしれません。
>> 9
ツール作成のコストがかかりますが、実現できたらかなり有効だと感じました。
アイデアありがとうございます!
.yyの中身はjsonフォーマットの様に見えて、中身を見るとレイヤーごとにデータが存在しています。
当たり判定オブジェクトレイヤーと背景などのグラフィックレイヤーが分かれているのであれば、レイヤーごとのデータを取得することができるので、yyに対してインポートやエクスポートできるツールを作って、抜き出したデータのみをgitなどのバージョン管理ツールで管理します。
抜き出したデータは、好きなバージョンをとってきてから、インポートツールでyyに入れることで、やり直したり、当たり判定オブジェクト担当者が、背景のタイル担当者の変更を入れ込むなどの開発ができそうです。
開発用サブツールは、pythonとかrubyとかphpとかwindowsで動く適当な言語で、サブツールを作ると便利になると思います。
>> 6
同じファイル(ここではroomの.yyファイル)を複数人で変更した際に起こる状態で、どちらかの変更を優先するかを選ばないといけません。
ですので、どちらかの変更をなかったことにしないといけないです。
案ありがとうございます!
作業用ルームと最終的なルームで分けるのはいいかもしれません。
ちょっと試してみようかなと思います
自分の作業用roomにコピペして作業してる間に相手も作業を進めるので、リアルタイムに同期するのは無理なのでこれがどれくらい問題になるか。
コピペして自分の作業用roomに反映させるのがどれくらい面倒くさいか。
が気になるところです。
追記
ここまで書いて、根本的に的外れか面倒にするだけのことを書いた気がします…!
「競合する」というのは具体的にどういうことが起こるのか教えてもらえるでしょうか?
同じプロジェクトを複数人で編集すると「上書きしちゃう」ってことが起こるという話でしょうか?
もっといい方法がある気がしますしどれくらい効率化できるかはやってみないと分かりませんが、
競合させずに同時並行する方法を考えました。
(1)と(2)の作業用roomを用意します。
(1)と(2)の担当者は「相手の作業用roomを変更しない」というルールを守ることとします。
(1)と(2)の作業が完了したら、最終的にroom1に統合します
(1)
当たり判定オブジェクト配置作業用room : room1_for_obj
必要なら背景をroom1_for_backgroundからコピペしてもってくる
(2)
背景制作用room : room1_for_background
必要なら当たり判定objをroom1_for_objからコピペしてもってくる
(3)
(1)(2)を統合して完成させるroom : room1
room1_for_objから当たり判定オブジェクトをコピペする
room1_for_backgroundから背景レイヤーをコピペする
(2)のところは背景タイルレイヤーのタイルを追加していく作業も含めます。
合ってます!
個人的にすごく興味があるこのトピック。
以下の内容で間違いないでしょうか?違っていたら教えて下さい。
roomの構成
(1) 当たり判定オブジェクトを置いてレベルを設計をする担当
ここでの作業は当たり判定用オブジェクトをroomに配置することでしょうか。
(2) 当たり判定オブジェクトに背景のタイルを追加する担当
ここでの作業は背景を描いて背景タイルレイヤーを作ることでしょうか。
同時並行して進めると時間は短縮されるはずだが、競合が起こる。
(1)→(2)または(2)→(1)の順で進めると競合はしないが時間がかかる。
という問題意識でしょうか。
Uses Physicsにチェックが入ってるとオブジェクト側で設定したfixtureがバインドされます。
そこから新たにコード上で用意したfixtureをバインドすると二つのfixtureがバインドされた状態になります。
fixtureは複数バインドすることが可能ですので現状だと複数のfixtureがバインドされている状態になっていると予想します。
どうしても、コード上で独自に用意したfixtureを用意する場合はUses Physicsのチェックを外し、物理変数を全部指定しないといけないっぽいです。
めんどくさいですが、次のようにするとよいかもしれません。
また、set_restitutionにはややこしいですが二つの関数があります。
・physics_fixture_set_restitution
・physics_set_restitution
physics_fixture_set_restitutionは上の例のように作成したfixtureのrestitutionを変更する関数です。
physics_set_restitutionはすでにバインドされたfixtureのrestitutionを変更する関数です。
physics_set_restitutionの使い方は次の通りです。
physics_fixture_bindの戻り値を利用してバインドされたfixtureを取得し、そのfixtureのrestitutionを変更します。
バインド済みなので再バインドする必要がありません。