返信、検証ありがとうございます。
どうも1,2次元配列と3次元配列でスクリプトでの扱いに違いがあるみたいで、そこでつまづいています。 3次元配列を使ってこのようなコードを書いてみたのですが、
//オブジェクト Createイベント for(i=2; i>-1; i--){ for(var j=2; j>-1; j--){ for(var l=2; l>-1; l--){ _firld[i][j][l] = 0; } } } Scr_Return_Array(_firld);
//スクリプト function Scr_Return_Array(_a){ _a[0][0][0]=123; }
このように書くとオブジェクトの_firld配列は変更されないはずなのですが、実際には_firld[0][0][0]に123が書き込まれてしまいます。 2次元配列でほぼ同じコードとスクリプトを書くと元の配列に変更は加えられませんでした。 3次元配列をスクリプトに参照ではなく値渡しする方法がわからず困っています。解決法を教えていただければ幸いです。
2.3から仕様が変わったのかと思って簡単に調べました。
IDE:2.3.1.542 Rutime:2.3.1.409 Windows
var _arr1 = [1, 0, 0]; var _arr2 = _arr1; _arr2[1] = 1; show_debug_message(string(_arr1)); show_debug_message(string(_arr2));
結果
[ 1,0,0 ] [ 1,1,0 ]
もし参照になっている場合、_arr2の要素に更新をかけると参照されている_arr1も更新されます。 結果としては元々の仕様通り、配列は値渡し(コピー)になってました。
_arr2
_arr1
「Death's Gambit」もgamemaker製ですね。当時結構びっくりしました
Spineは確かに珍しいですね
しゅんさんありがたい...
たぶんshowcaseにあると思いますが gamemakerはドット絵というイメージがある中で『THE SWORDS OF DITTO』は Spineを使った例として珍しいですね。 (Spine使っても絵の内容はドット絵にもできますが)
snippetの存在も完全に忘れてましたw
最新版で修正入ったぽいです! https://twitter.com/YoYoGames/status/1339601661224865795?s=20
show_debug_message("id="+string(id)+" loc="+string(x)+","+string(y));
など、よく使うのをsnippetに登録するのも便利ですね
こういうの毎回打ち直してたりしてました... 関数のコメントの部分参考になります
インスタンスの情報を表示するスクリプト デバッグのために、drawイベントで使います 表示する項目は適宜追加したりして使ってます。
/// @ desc scr_dev_instance_info(); /// @param {num} x /************************************************************ desc インスタンスの情報を表示する return : n/a ************************************************************/ draw_text(x, y+10, "id: "+string(id)); draw_text(x, y+20, "loc: "+string(x)+","+string(y)); draw_circle(x, y, 2, false);
x座標をグリッドのセンターにスナップさせて返すスクリプト これのy座標版も作って、オブジェクトをグリッド(タイル)の中心に置くときとかに使います GRID_SIZEは定数です(32とか)
/// @ desc scr_x_to_grid_center(); /// @param {num} x /************************************************************ desc 指定したx座標に一番近いグリッドセンターのx座標を返す return : number ************************************************************/ return argument0 div GRID_SIZE * GRID_SIZE + GRID_SIZE/2;
できました! 設定後にコードを開き直すと直ってました。 ずっと悩んでたので助かりました。ありがとうございます!
「環境設定」→「言語」→「GML」の項目の中にある、 「文を折りたたみ領域として扱う」のチェックボックスを外すといけました。
英語だと「Prefarences」→「Languages」→「GML」→「Enable statement folding as regions」 です。
銀行丸めがなんのかわからなくてググりました。 gamemakerのroundそうなってるんですね。これ結構計算処理変わってくるのでびびってますw
gamemakerのround()は銀行丸めですが、四捨五入したいとき。
/// @desc scr_math_round(); /// @param {number} number return (argument0 + 0.5) div 1;
逆に初歩的な質問は大歓迎です。
はじめまして。 GMS2駆け出し手探りの身なので、とても有益な掲示板(しかも日本語!)を作っていただきありがたい限りです! 初歩的な質問をする時もあるかと思いますが、よろしくお願いします!
ぽちっておこうかなと思います
買いました。ちらっと見ましたが分かりやすいです。 しゃべってる英語が全文テキストになってるのもありがたいですね。 内容は初級~中級者向けの基本的なことになってます。
記事や書籍というわけではないのですが、Githubでタグ検索することをおすすめします。 https://github.com/topics/gamemaker
GMSに出力できるツール系なども出てきますが、GameMakerのプロジェクトを公開している人が結構多いです。 GameMaker Discord Communityの公開リポジトリはおすすめです。 https://github.com/GameMakerDiscord (GMEditもここで管理されてたりします)
シェーダーやモジュールなどが中心ですが、飛び抜けた方々のコードを参考にできるのでぜひ。
クラフト系ゲームのやつですよね。気になります...
はじめまして。 この掲示板は私のものではなく、 GMS2ユーザーが誰でも使えるみんなの掲示板として作成しましたので ガンガン使ってくださいね!
はじめまして。 asaさん。掲示板の作成ありがとうございます。 一人でGMS2を触ってると心細かったので、ありがたいです。 よろしくお願いいたします。
うぅ。やはりないですかね。 Pはレイヤーをスムーズに切り替えられるので重宝しそうです。
レイヤーがステージになっている。まさかそんな手法があるとは。 グリッドの背景は盲点でした。
描画される壁に直接当たり判定を持たせるのではなく、分けた方がよいという感じですね。 ・描画される壁のレイヤー ・当たり判定が設置されたレイヤー みたく別途に用意する。とても勉強になります。
公式の説明を読む限り、十字キーなどで移動することはできないようです。
Sで選択ツール→ctrl+X→ctrl+Vが移動手段になります。 1つのタイルであればPを押しながら左クリックでマウスカーソル位置のタイルがピックされます。右クリックでタイル削除。 Ctrlで複数のエリアを選択できます。 Altで選択領域を削ります。
できるのはこんなところでしょうか。
タイルを十字キーで移動僕も探してるんですが全然見つかりません...
2Dゲームのマップを作る際のこだわり(固定画面2Dパズルアクションの場合)
自分で設定したグリッド画像を作って、背景レイヤーでループ表示をさせてマップを作っています。 これはゲームが開始したら非表示になるよう設定しているのでRoomEditor上のみの表示です。 ・緑色が3マスずつ並んでいるのはプレイヤーのジャンプ力に合わせている ・外側3マスには基本ギミックを置かない などこれら細かいルールや目印がわかるように作ってます。
これは僕だけかもしれませんが、ステージを全部一つのルームで管理してます。 そのなかにステージの塊がいくつか存在します。 それらを移動する際、同じレイヤーだと別のステージも選択して移動する際めんどうです。 なのでレイヤーを分けることで選択中は同レイヤーのみ選択になり簡単に移動できるようになります。 検証はしてませんが、使ってないインスタンスレイヤーやタイルレイヤーを非表示にするとルームエディターの処理が軽くなる感じがします。
ギミックや壁は基本半透明にした専用画像を使ってます。そうすることで、インスタンスの重複を察知することができます。たまに重なったままのゴミインスタンスがある場合があるので。
返信ありがとうございます。 自分が気づかずに環境設定で変な操作をしちゃったのでは、とヒヤヒヤしてました。
次のバージョンアップを待つことにします。
逆に言うと深度が使えるのでステンシルバッファを持てるんですよねぇ 実は本件に関する記事を書いているので良かったらご覧ください これだけは押さえておこう!GMLベストプラクティス
自分もむっちゃでてました。全然気づきませんでした。
初めまして。GMS2を使い一人でゲームを作っているものです。 掲示板を作ってくださり感謝です。ありがとうございます。
var test = { /*test*/ inst : instance_create_layer(global.num, y/1-10, "Instances", o_test), }
これ知らなかったです。情報共有ありがとうございます。
むっちゃぽくなりましたねw
タグ作ってみました!
タグみたいなやつ作れた気がします。そこからタグ検索とかもできます。
こういう種類の投稿のタイトル、【知識】と付けてみましたがどういうのがいいですかね?
自分的には1ピクセルでVRAMを4バイト消費するってこと自体、勉強になりました。😃
サーフェース結構使ってるのでありがたいです。呼び出すだけでかなり動的メモリを節約できますね。
とっつきやすいしシンプルでスピーディに作れる反面、やろうとすることによっては物足りない面があるんですね。
マニュアル(ver2~2.2.x) マニュアル(ver2.3~) YoYoGames YoYoGames 公式コミュニティ GM関連のYoutubeチャンネル集 解説・資料サイト集(日本語) 解説・資料サイト集(英語)
返信、検証ありがとうございます。
どうも1,2次元配列と3次元配列でスクリプトでの扱いに違いがあるみたいで、そこでつまづいています。
3次元配列を使ってこのようなコードを書いてみたのですが、
このように書くとオブジェクトの_firld配列は変更されないはずなのですが、実際には_firld[0][0][0]に123が書き込まれてしまいます。
2次元配列でほぼ同じコードとスクリプトを書くと元の配列に変更は加えられませんでした。
3次元配列をスクリプトに参照ではなく値渡しする方法がわからず困っています。解決法を教えていただければ幸いです。
2.3から仕様が変わったのかと思って簡単に調べました。
IDE:2.3.1.542
Rutime:2.3.1.409
Windows
結果
もし参照になっている場合、
_arr2
の要素に更新をかけると参照されている_arr1
も更新されます。結果としては元々の仕様通り、配列は値渡し(コピー)になってました。
「Death's Gambit」もgamemaker製ですね。当時結構びっくりしました
Spineは確かに珍しいですね
しゅんさんありがたい...
たぶんshowcaseにあると思いますが
gamemakerはドット絵というイメージがある中で『THE SWORDS OF DITTO』は
Spineを使った例として珍しいですね。
(Spine使っても絵の内容はドット絵にもできますが)
snippetの存在も完全に忘れてましたw
最新版で修正入ったぽいです!
https://twitter.com/YoYoGames/status/1339601661224865795?s=20
など、よく使うのをsnippetに登録するのも便利ですね
こういうの毎回打ち直してたりしてました...
関数のコメントの部分参考になります
インスタンスの情報を表示するスクリプト
デバッグのために、drawイベントで使います
表示する項目は適宜追加したりして使ってます。
x座標をグリッドのセンターにスナップさせて返すスクリプト
これのy座標版も作って、オブジェクトをグリッド(タイル)の中心に置くときとかに使います
GRID_SIZEは定数です(32とか)
できました! 設定後にコードを開き直すと直ってました。
ずっと悩んでたので助かりました。ありがとうございます!
「環境設定」→「言語」→「GML」の項目の中にある、
「文を折りたたみ領域として扱う」のチェックボックスを外すといけました。
英語だと「Prefarences」→「Languages」→「GML」→「Enable statement folding as regions」
です。
銀行丸めがなんのかわからなくてググりました。
gamemakerのroundそうなってるんですね。これ結構計算処理変わってくるのでびびってますw
gamemakerのround()は銀行丸めですが、四捨五入したいとき。
逆に初歩的な質問は大歓迎です。
はじめまして。
GMS2駆け出し手探りの身なので、とても有益な掲示板(しかも日本語!)を作っていただきありがたい限りです!
初歩的な質問をする時もあるかと思いますが、よろしくお願いします!
ぽちっておこうかなと思います
買いました。ちらっと見ましたが分かりやすいです。
しゃべってる英語が全文テキストになってるのもありがたいですね。
内容は初級~中級者向けの基本的なことになってます。
記事や書籍というわけではないのですが、Githubでタグ検索することをおすすめします。
https://github.com/topics/gamemaker
GMSに出力できるツール系なども出てきますが、GameMakerのプロジェクトを公開している人が結構多いです。
GameMaker Discord Communityの公開リポジトリはおすすめです。
https://github.com/GameMakerDiscord
(GMEditもここで管理されてたりします)
シェーダーやモジュールなどが中心ですが、飛び抜けた方々のコードを参考にできるのでぜひ。
クラフト系ゲームのやつですよね。気になります...
はじめまして。
この掲示板は私のものではなく、
GMS2ユーザーが誰でも使えるみんなの掲示板として作成しましたので
ガンガン使ってくださいね!
はじめまして。
asaさん。掲示板の作成ありがとうございます。
一人でGMS2を触ってると心細かったので、ありがたいです。
よろしくお願いいたします。
うぅ。やはりないですかね。
Pはレイヤーをスムーズに切り替えられるので重宝しそうです。
レイヤーがステージになっている。まさかそんな手法があるとは。
グリッドの背景は盲点でした。
描画される壁に直接当たり判定を持たせるのではなく、分けた方がよいという感じですね。
・描画される壁のレイヤー
・当たり判定が設置されたレイヤー
みたく別途に用意する。とても勉強になります。
公式の説明を読む限り、十字キーなどで移動することはできないようです。
Sで選択ツール→ctrl+X→ctrl+Vが移動手段になります。
1つのタイルであればPを押しながら左クリックでマウスカーソル位置のタイルがピックされます。右クリックでタイル削除。
Ctrlで複数のエリアを選択できます。
Altで選択領域を削ります。
できるのはこんなところでしょうか。
タイルを十字キーで移動僕も探してるんですが全然見つかりません...
2Dゲームのマップを作る際のこだわり(固定画面2Dパズルアクションの場合)
デバックグリッド
自分で設定したグリッド画像を作って、背景レイヤーでループ表示をさせてマップを作っています。
これはゲームが開始したら非表示になるよう設定しているのでRoomEditor上のみの表示です。
・緑色が3マスずつ並んでいるのはプレイヤーのジャンプ力に合わせている
・外側3マスには基本ギミックを置かない
などこれら細かいルールや目印がわかるように作ってます。
ステージごとにレイヤー分け
これは僕だけかもしれませんが、ステージを全部一つのルームで管理してます。
そのなかにステージの塊がいくつか存在します。
それらを移動する際、同じレイヤーだと別のステージも選択して移動する際めんどうです。
なのでレイヤーを分けることで選択中は同レイヤーのみ選択になり簡単に移動できるようになります。
検証はしてませんが、使ってないインスタンスレイヤーやタイルレイヤーを非表示にするとルームエディターの処理が軽くなる感じがします。
エディター上専用画像
ギミックや壁は基本半透明にした専用画像を使ってます。そうすることで、インスタンスの重複を察知することができます。たまに重なったままのゴミインスタンスがある場合があるので。
返信ありがとうございます。
自分が気づかずに環境設定で変な操作をしちゃったのでは、とヒヤヒヤしてました。
次のバージョンアップを待つことにします。
逆に言うと深度が使えるのでステンシルバッファを持てるんですよねぇ
実は本件に関する記事を書いているので良かったらご覧ください
これだけは押さえておこう!GMLベストプラクティス
自分もむっちゃでてました。全然気づきませんでした。
初めまして。GMS2を使い一人でゲームを作っているものです。
掲示板を作ってくださり感謝です。ありがとうございます。
これ知らなかったです。情報共有ありがとうございます。
むっちゃぽくなりましたねw
タグ作ってみました!
タグみたいなやつ作れた気がします。そこからタグ検索とかもできます。
こういう種類の投稿のタイトル、【知識】と付けてみましたがどういうのがいいですかね?
自分的には1ピクセルでVRAMを4バイト消費するってこと自体、勉強になりました。😃
サーフェース結構使ってるのでありがたいです。呼び出すだけでかなり動的メモリを節約できますね。
とっつきやすいしシンプルでスピーディに作れる反面、やろうとすることによっては物足りない面があるんですね。