sprite_indexで試してみたところ想定している挙動どうりになりました! ありがとうございます!!
全体の作りがわからない部分があるので的外れになるかもしれませんが、 オブジェクトO_step1がroom内に複数配置されていて、 playerオブジェクトがそれを踏むと✘が◯に、◯が✘に変わる(spriteが変わる) という前提で考えてみます。
object_get_sprite() object_set_sprite() は、オブジェクトアセットのspriteを取得/セットする関数です。 (インスタンスではないというのが要です) これのせいでロジックがおかしくなっていて意図通りに動かなくなっているように思います。
インスタンスのspriteを取得/セットするには、 sprite_indexでできます(これはインスタンスが持つ読み書き可の変数です)。
sprite_indexの更新だけでできるはずなので、これを踏まえて考えてみてください。
返信ありがとうございます。 本来のルールですと ・×を踏むと丸になる ・もう一度踏むと△になりその後は踏んでも何も起きなくなります。 ・全て×になった状態で左にあるスイッチを押したらクリア といったような形になっています。
一度自分で組んでみたのですが反応しない部分が出てきてしまうといった状況になっております。
こちらが×側のstepで組んだプログラムです。 とりあえず現在は〇と×は踏まれたら交互に出るようにしています。
このパズルを知らないので動画で調べましたが一筆書きパズルでしょうか。
というルールでしょうか。 どのあたりのプログラムの書き方が分からないか、わかりますか?
気軽に使っていきたいと思います。回答ありがとうございました!
開設作業を私がやったので私から回答させていただきます。
この掲示板は生高橋さんと私で話し合って軽い気持ちで開設されました。 誰のものでもなく、GameMakerユーザーみんなの掲示板として存在しています。 お金は発生していません。広告が自動で付きますがお金はzawazawa運営に入っているものと思います。 管理者・モデレーターはいません。 管理画面のアクセス権限を今は私が持っているので問題が起きたら私ができる範囲で対処します。 万が一、対処しきれない事になったら閉鎖します。
などの当たり前のルールを守ればOKです。 過去に重複する内容があるかどうかも気にせず投稿してください。 掲示板が使いにくくなるような事態になったらその時考えます。 投稿内容は、GameMakerに関連しているかGameMakerでゲームを作っている人に向けた内容であればOKです。
購入前の人でも初心者でも上級者でも、どなたでも気軽に使ってください!
回答ありがとうございます。しばらくはリンク先のマニュアルを参考にしていきたいと思います。 一つ気になっていることなのですが、自分はこちらのサイトの掲示板を使用するのがこれが初めてです。 参加するにあたって何か、暗黙の了解や投稿、回答する際の決まり事(同じ投稿内で異なる質問をしない)などが まとめられている投稿を探してみましたが、特にそれらしきものは発見できませんでした。
現状では、基本として他人に不快を与える投稿内容や言葉遣いに注意しながら、その投稿内容や回答が Game maker関連から大きく乖離していなければ、特に制約等を設けていないということでしょうか。
オンラインのマニュアルはここで、これが最新だと思います https://manual.yoyogames.com/#t=Content.htm
私は英語マニュアルをオフラインで使ってますが、ダウンロードできない理由は分からないです。 PCのセキュリティが関係してるでしょうか。
displayのページは無いようですが、試したところおそらくIDEウィンドウの最小サイズのようです
譜面データの形式や内容 外部ファイルの読み込み方 ゲーム中での譜面データの処理の仕方 など
どの辺りが分からないか分けて考えるといいかもしれません。 どういうものを作るのかを具体的にして、質問の焦点が絞られていると より回答されやすいのかなと思います。
ご回答ありがとうございます!! 紹介されたスレッド参考にします。
前に似たスレッドがありましたので共有します。 https://zawazawa.jp/gamemaker_jp/topic/81 もし、まだわからないことがあれば聞いてください
なるほど、確かにクラスの概念がなかったりプレハブがなかったりすると作業量が多くなるほどに大変になるというのはなんとなく想像できますね。 ありがとうございます。とりあえず少し触ってみようと思います。
最新のアプデで修正されたみたいです。
Unityを使ったことがないので比較はできないですが、 GameMakerはGML(Game Maker Language)という独自の言語でプログラミングします(コードを書かないモードで作ることもできますが)。 GMLは型とかクラスとかアクセス修飾子などのプログラミングの難しいあれこれが簡略化されてる分、入門者でも簡単に取っつきやすいと言われています。だれでもすぐにゲームを作り始めることができます。 裏を返すとそれらが使えないのでゲームが複雑かつ大規模になるほど作るのが難しくなる可能性があるのかなと思います。
APIの制約に関しては通常の2Dゲームを作る分にはそこまで不便に感じてませんが、 大ボリュームのゲームや3Dゲーム、物理演算のゲームをつくろうとするとそういった制約が気になってくると思います。
UnityやUnrealみたいな実行中に値を確認したり変更したりできるSceneView、プレハブなどの機能がないのでパラメーター調整やステージ作成がUnityとかに比べると大変です。
Win環境で、Alt+F4のウインドウクローズが効かなくなるバグがあるそうです。 テストプレイのウインドウを当該ショートカットで消していたユーザーが発狂していました。
IDEを長時間使ってると動作が重くなって、 その状態だとタブが勝手に新しいウィンドウに切り離されちゃうことがよくあったんですが、 その新しいウィンドウに切り離す機能が廃止されたようで誤動作も起きなくなったらしいです。 代わりにタブ右クリックで切り離すコマンドができました。
質問があるとこの掲示板も更新されるのでありがたいです。 他の人のためにもなりますので、遠慮なく投稿してください!
すみません、ページはroomの誤字です。 いつも質問に答えてくださりありがとうございます。
すいません、タイトルにroomとありますね。roomでしたら、
変数Aにroomを入れて記憶してからroomを移動する ↓ 移動先のroomで変数Aに記憶したroomに戻る処理をする でできます。
ただ、roomを移動するとroom中のインスタンスも破棄されますので、変数をroom間で受け渡すことが出来ません。 情報をroom間で受け渡すには、
ページが何なのか分からないので一般的な回答になりますが、
変数にページを入れてからページを移動する ↓ 移動先のページで保存したページに戻る処理をする
でできます。
ありがとうございます!
room中にobjAとobjBがあるとします。
objAが1つしかないなら、objBでobjA.vspと書いて参照できます。 with (objA) vsp でも参照できます。 例 objBで
show_debug_message(objA.vsp); // 値がoutputウィンドウに出力されます
objAが複数あるなら参照したい1つを特定しないといけません。 1つを特定してそのインスタンスidを取得することで参照できるようになります。 objBにおいて、条件を満たすobjAのインスタンスIDを変数instに入れてinst.vspで参照できます。 with (instanceid) vsp でも参照できます。 例 objBで
inst = instance_place(x, y, objA); // ここではobjBと重なるobjAのインスタンスIDを取得 show_debug_message(inst.vsp); // 値がoutputウィンドウに出力されます
上下回転させたい場合はyscaleでしょうか?
Drawイベントに何も書いてないか、draw_self();と書いてあると仮定します。
CreateやStepなど、どれかのイベントにて、image_xscale = -1;とします。 これで左右反転します。
いろいろやり方がありますが、下記のような方法もできると思います。これが正解というわけではなく、1つの方法として参考になればと思います。
ノーマル状態とぶつかり状態があり、それぞれにspriteをセットしています。
STEPイベント
switch (state) { case "normal": if (place_meeting(x, y, objB)) { sprite_index = Player_colision; state = "butsukari"; } break; case "butsukari": // ぶつかり状態の処理 if (ぶつかり状態の終了条件) { state = "normal"; sprite_index = Player_normal; } break; }
この後でさらに再現条件を見つけました。 roomサイズがwidth928px, height832pxの時に再現します。他の値に変えると再現しなくなる。 roomサイズが何の関係があるのか訳が分かりませんが、roomサイズで再現するしないが変わるのは事実です。 もちろん、これはただの擬似相関かもしれません。
まとめると
この条件が重なるとゲームがクラッシュまたはフリーズします。
たぶん、このバージョンからだと思いますが、 Path移動中に、room_goto(), room_restart(), game_restart()などでゲームまたはroomを再ロードしようとすると ゲームがクラッシュしたりフリーズします。 再現のタイミングは一定せず、10回ビルドしたらその内の2回~10回という頻度で起こる感じです。
ランタイムのバージョンを2023.4に下げると起こらなくなります。
今日再現プロジェクトを送ってバグ報告しました。
ユーザーの投稿によると、ローカルパッケージの作成とインポートの挙動が変わったらしいです。 自分は以前からこの機能をちゃんと理解できず振り回されてプロジェクトをおかしくしたりしたので 今は怖くてテストしませんが…
指定範囲を0 ~ 1の間に正規化する関数
//Normalizeの略 function norm(value,minValue,maxValue) { return (value - minValue) / (maxValue - minValue); }
指定xy位置がspriteの中央位置になるように表示します (spriteの原点を無視します)
原点がバラバラの複数の画像を上下左右中央揃えで表示するのに使ってます
// 指定xy位置がspriteの中央位置になるように表示する /// @param {Asset.GMSprite} sprite /// @param {Real} image_index /// @param {Real} x /// @param {Real} y /// @param {Real} image_xscale /// @param {Real} image_yscale /// @param {Real} image_angle /// @param {Real} image_blend /// @param {Real} image_alpha function scr_draw_sprite_ext_vcentered(_spr, _idx, _x, _y, _xscl, _yscl, _angle, _color, _alpha) { var _offsetx = (sprite_get_xoffset(_spr) - sprite_get_width(_spr)/2) * _xscl; var _offsety = (sprite_get_yoffset(_spr) - sprite_get_height(_spr)/2) * _yscl; draw_sprite_ext(_spr, _idx, _x+_offsetx, _y+_offsety, _xscl, _yscl, _angle, _color, _alpha); }
2023/06/28: 拡大率を反映させるよう修正
1000は多いなぁ...w
再インストールしても駄目だったのですが、リンク先の跡形もなく消すソフトを試したら直りました!! ありがとうございます!
謎ですね。 たぶんこれと同じ原因のFeatherの問題をバグ報告しましたので、今後の修正を待ちたいと思います。
Createイベントを編集してみたら、見事に警告が復活しました。
なんとも謎と思える動きですね。
検証ありがとうございます!
構造体MyDataの_dataを別の名前にしましたが私の環境では消えませんでした。
一回警告が消えた後でo_testのCreateイベントを適当にいじって更新させるとどうなるでしょうか。また警告出ませんか? Featherのスキャンのタイミングの関係で消えたり出たりするようなので。
構造体の引数にある_dataを別の名前にして、test()を消してから、またtest()を入れるとどうなるでしょうか? こちらだと、上記の方法で警告は消えました。
Featherの警告の認識が微妙という気がします。
出ましたか! 再現性があることが分かっただけでもちょっともやもやが晴れました ありがとうございます!
マニュアル(ver2~2.2.x) マニュアル(ver2.3~) YoYoGames YoYoGames 公式コミュニティ GM関連のYoutubeチャンネル集 解説・資料サイト集(日本語) 解説・資料サイト集(英語)
sprite_indexで試してみたところ想定している挙動どうりになりました!
ありがとうございます!!
全体の作りがわからない部分があるので的外れになるかもしれませんが、
オブジェクトO_step1がroom内に複数配置されていて、
playerオブジェクトがそれを踏むと✘が◯に、◯が✘に変わる(spriteが変わる)
という前提で考えてみます。
object_get_sprite()
object_set_sprite()
は、オブジェクトアセットのspriteを取得/セットする関数です。
(インスタンスではないというのが要です)
これのせいでロジックがおかしくなっていて意図通りに動かなくなっているように思います。
インスタンスのspriteを取得/セットするには、
sprite_indexでできます(これはインスタンスが持つ読み書き可の変数です)。
sprite_indexの更新だけでできるはずなので、これを踏まえて考えてみてください。
返信ありがとうございます。
本来のルールですと
・×を踏むと丸になる
・もう一度踏むと△になりその後は踏んでも何も起きなくなります。
・全て×になった状態で左にあるスイッチを押したらクリア
といったような形になっています。
一度自分で組んでみたのですが反応しない部分が出てきてしまうといった状況になっております。
こちらが×側のstepで組んだプログラムです。
とりあえず現在は〇と×は踏まれたら交互に出るようにしています。
このパズルを知らないので動画で調べましたが一筆書きパズルでしょうか。
というルールでしょうか。
どのあたりのプログラムの書き方が分からないか、わかりますか?
気軽に使っていきたいと思います。回答ありがとうございました!
開設作業を私がやったので私から回答させていただきます。
この掲示板は生高橋さんと私で話し合って軽い気持ちで開設されました。
誰のものでもなく、GameMakerユーザーみんなの掲示板として存在しています。
お金は発生していません。広告が自動で付きますがお金はzawazawa運営に入っているものと思います。
管理者・モデレーターはいません。
管理画面のアクセス権限を今は私が持っているので問題が起きたら私ができる範囲で対処します。
万が一、対処しきれない事になったら閉鎖します。
などの当たり前のルールを守ればOKです。
過去に重複する内容があるかどうかも気にせず投稿してください。
掲示板が使いにくくなるような事態になったらその時考えます。
投稿内容は、GameMakerに関連しているかGameMakerでゲームを作っている人に向けた内容であればOKです。
購入前の人でも初心者でも上級者でも、どなたでも気軽に使ってください!
回答ありがとうございます。しばらくはリンク先のマニュアルを参考にしていきたいと思います。
一つ気になっていることなのですが、自分はこちらのサイトの掲示板を使用するのがこれが初めてです。
参加するにあたって何か、暗黙の了解や投稿、回答する際の決まり事(同じ投稿内で異なる質問をしない)などが
まとめられている投稿を探してみましたが、特にそれらしきものは発見できませんでした。
現状では、基本として他人に不快を与える投稿内容や言葉遣いに注意しながら、その投稿内容や回答が
Game maker関連から大きく乖離していなければ、特に制約等を設けていないということでしょうか。
オンラインのマニュアルはここで、これが最新だと思います
https://manual.yoyogames.com/#t=Content.htm
私は英語マニュアルをオフラインで使ってますが、ダウンロードできない理由は分からないです。
PCのセキュリティが関係してるでしょうか。
displayのページは無いようですが、試したところおそらくIDEウィンドウの最小サイズのようです
譜面データの形式や内容
外部ファイルの読み込み方
ゲーム中での譜面データの処理の仕方
など
どの辺りが分からないか分けて考えるといいかもしれません。
どういうものを作るのかを具体的にして、質問の焦点が絞られていると
より回答されやすいのかなと思います。
ご回答ありがとうございます!!
紹介されたスレッド参考にします。
前に似たスレッドがありましたので共有します。
https://zawazawa.jp/gamemaker_jp/topic/81
もし、まだわからないことがあれば聞いてください
なるほど、確かにクラスの概念がなかったりプレハブがなかったりすると作業量が多くなるほどに大変になるというのはなんとなく想像できますね。
ありがとうございます。とりあえず少し触ってみようと思います。
最新のアプデで修正されたみたいです。
Unityを使ったことがないので比較はできないですが、
GameMakerはGML(Game Maker Language)という独自の言語でプログラミングします(コードを書かないモードで作ることもできますが)。
GMLは型とかクラスとかアクセス修飾子などのプログラミングの難しいあれこれが簡略化されてる分、入門者でも簡単に取っつきやすいと言われています。だれでもすぐにゲームを作り始めることができます。
裏を返すとそれらが使えないのでゲームが複雑かつ大規模になるほど作るのが難しくなる可能性があるのかなと思います。
APIの制約に関しては通常の2Dゲームを作る分にはそこまで不便に感じてませんが、
大ボリュームのゲームや3Dゲーム、物理演算のゲームをつくろうとするとそういった制約が気になってくると思います。
UnityやUnrealみたいな実行中に値を確認したり変更したりできるSceneView、プレハブなどの機能がないのでパラメーター調整やステージ作成がUnityとかに比べると大変です。
Win環境で、Alt+F4のウインドウクローズが効かなくなるバグがあるそうです。
テストプレイのウインドウを当該ショートカットで消していたユーザーが発狂していました。
IDEを長時間使ってると動作が重くなって、
その状態だとタブが勝手に新しいウィンドウに切り離されちゃうことがよくあったんですが、
その新しいウィンドウに切り離す機能が廃止されたようで誤動作も起きなくなったらしいです。
代わりにタブ右クリックで切り離すコマンドができました。
質問があるとこの掲示板も更新されるのでありがたいです。
他の人のためにもなりますので、遠慮なく投稿してください!
すみません、ページはroomの誤字です。
いつも質問に答えてくださりありがとうございます。
すいません、タイトルにroomとありますね。roomでしたら、
変数Aにroomを入れて記憶してからroomを移動する
↓
移動先のroomで変数Aに記憶したroomに戻る処理をする
でできます。
ただ、roomを移動するとroom中のインスタンスも破棄されますので、変数をroom間で受け渡すことが出来ません。
情報をroom間で受け渡すには、
方法があります。
ページが何なのか分からないので一般的な回答になりますが、
変数にページを入れてからページを移動する
↓
移動先のページで保存したページに戻る処理をする
でできます。
ありがとうございます!
room中にobjAとobjBがあるとします。
objAが1つしかないなら、objBでobjA.vspと書いて参照できます。
with (objA) vsp でも参照できます。
例
objBで
objAが複数あるなら参照したい1つを特定しないといけません。
1つを特定してそのインスタンスidを取得することで参照できるようになります。
objBにおいて、条件を満たすobjAのインスタンスIDを変数instに入れてinst.vspで参照できます。
with (instanceid) vsp でも参照できます。
例
objBで
上下回転させたい場合はyscaleでしょうか?
Drawイベントに何も書いてないか、draw_self();と書いてあると仮定します。
CreateやStepなど、どれかのイベントにて、image_xscale = -1;とします。
これで左右反転します。
ありがとうございます!
いろいろやり方がありますが、下記のような方法もできると思います。これが正解というわけではなく、1つの方法として参考になればと思います。
ノーマル状態とぶつかり状態があり、それぞれにspriteをセットしています。
STEPイベント
この後でさらに再現条件を見つけました。
roomサイズがwidth928px, height832pxの時に再現します。他の値に変えると再現しなくなる。
roomサイズが何の関係があるのか訳が分かりませんが、roomサイズで再現するしないが変わるのは事実です。
もちろん、これはただの擬似相関かもしれません。
まとめると
この条件が重なるとゲームがクラッシュまたはフリーズします。
たぶん、このバージョンからだと思いますが、
Path移動中に、room_goto(), room_restart(), game_restart()などでゲームまたはroomを再ロードしようとすると
ゲームがクラッシュしたりフリーズします。
再現のタイミングは一定せず、10回ビルドしたらその内の2回~10回という頻度で起こる感じです。
ランタイムのバージョンを2023.4に下げると起こらなくなります。
今日再現プロジェクトを送ってバグ報告しました。
ユーザーの投稿によると、ローカルパッケージの作成とインポートの挙動が変わったらしいです。
自分は以前からこの機能をちゃんと理解できず振り回されてプロジェクトをおかしくしたりしたので
今は怖くてテストしませんが…
指定範囲を0 ~ 1の間に正規化する関数
指定xy位置がspriteの中央位置になるように表示します
(spriteの原点を無視します)
原点がバラバラの複数の画像を上下左右中央揃えで表示するのに使ってます
2023/06/28: 拡大率を反映させるよう修正
1000は多いなぁ...w
再インストールしても駄目だったのですが、リンク先の跡形もなく消すソフトを試したら直りました!!
ありがとうございます!
謎ですね。
たぶんこれと同じ原因のFeatherの問題をバグ報告しましたので、今後の修正を待ちたいと思います。
Createイベントを編集してみたら、見事に警告が復活しました。
なんとも謎と思える動きですね。
検証ありがとうございます!
構造体MyDataの_dataを別の名前にしましたが私の環境では消えませんでした。
一回警告が消えた後でo_testのCreateイベントを適当にいじって更新させるとどうなるでしょうか。また警告出ませんか?
Featherのスキャンのタイミングの関係で消えたり出たりするようなので。
構造体の引数にある_dataを別の名前にして、test()を消してから、またtest()を入れるとどうなるでしょうか?
こちらだと、上記の方法で警告は消えました。
Featherの警告の認識が微妙という気がします。
出ましたか!
再現性があることが分かっただけでもちょっともやもやが晴れました
ありがとうございます!