GameMaker 日本語掲示板

views
16 フォロー
988 件中 921 から 960 までを表示しています。
2
サクレ 2020/12/26 (土) 17:43:36 >> 1

返信、検証ありがとうございます。

どうも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次元配列をスクリプトに参照ではなく値渡しする方法がわからず困っています。解決法を教えていただければ幸いです。

1
ディーン 2020/12/26 (土) 03:15:09

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も更新されます。
結果としては元々の仕様通り、配列は値渡し(コピー)になってました。

3
ぽんでり 2020/12/26 (土) 03:07:24

「Death's Gambit」もgamemaker製ですね。当時結構びっくりしました

1

しゅんさんありがたい...

1

たぶんshowcaseにあると思いますが
gamemakerはドット絵というイメージがある中で『THE SWORDS OF DITTO』は
Spineを使った例として珍しいですね。
(Spine使っても絵の内容はドット絵にもできますが)

9
生高橋 2020/12/18 (金) 01:11:15 >> 6

snippetの存在も完全に忘れてましたw

8
show_debug_message("id="+string(id)+" loc="+string(x)+","+string(y));

など、よく使うのをsnippetに登録するのも便利ですね

6
生高橋 2020/12/16 (水) 01:29:32 >> 5

こういうの毎回打ち直してたりしてました...
関数のコメントの部分参考になります

5

インスタンスの情報を表示するスクリプト
デバッグのために、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);
4
asa 2020/12/11 (金) 18:10:10 修正

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;
2
樹ひかり 2020/12/11 (金) 10:34:16

できました! 設定後にコードを開き直すと直ってました。
ずっと悩んでたので助かりました。ありがとうございます!

1

「環境設定」→「言語」→「GML」の項目の中にある、
「文を折りたたみ領域として扱う」のチェックボックスを外すといけました。

英語だと「Prefarences」→「Languages」→「GML」→「Enable statement folding as regions」
です。

3
生高橋 2020/12/11 (金) 03:54:57 >> 2

銀行丸めがなんのかわからなくてググりました。
gamemakerのroundそうなってるんですね。これ結構計算処理変わってくるのでびびってますw

2

gamemakerのround()は銀行丸めですが、四捨五入したいとき。

/// @desc scr_math_round();
/// @param {number} number

return	(argument0 + 0.5) div 1;
15
生高橋 2020/12/10 (木) 23:20:02 >> 14

逆に初歩的な質問は大歓迎です。

14
rdn_spiel 2020/12/10 (木) 22:49:30

はじめまして。
GMS2駆け出し手探りの身なので、とても有益な掲示板(しかも日本語!)を作っていただきありがたい限りです!
初歩的な質問をする時もあるかと思いますが、よろしくお願いします!

3
生高橋 2020/12/10 (木) 18:54:30 >> 2

ぽちっておこうかなと思います

2

買いました。ちらっと見ましたが分かりやすいです。
しゃべってる英語が全文テキストになってるのもありがたいですね。
内容は初級~中級者向けの基本的なことになってます。

1
ディーン 2020/12/10 (木) 01:34:15

記事や書籍というわけではないのですが、Githubでタグ検索することをおすすめします。
https://github.com/topics/gamemaker

GMSに出力できるツール系なども出てきますが、GameMakerのプロジェクトを公開している人が結構多いです。
GameMaker Discord Communityの公開リポジトリはおすすめです。
https://github.com/GameMakerDiscord
(GMEditもここで管理されてたりします)

シェーダーやモジュールなどが中心ですが、飛び抜けた方々のコードを参考にできるのでぜひ。

1
生高橋 2020/12/10 (木) 00:30:49

クラフト系ゲームのやつですよね。気になります...

13

はじめまして。
この掲示板は私のものではなく、
GMS2ユーザーが誰でも使えるみんなの掲示板として作成しましたので
ガンガン使ってくださいね!

12
ねこたみん 2020/12/09 (水) 20:24:35

はじめまして。
asaさん。掲示板の作成ありがとうございます。
一人でGMS2を触ってると心細かったので、ありがたいです。
よろしくお願いいたします。

4

うぅ。やはりないですかね。
Pはレイヤーをスムーズに切り替えられるので重宝しそうです。

3

レイヤーがステージになっている。まさかそんな手法があるとは。
グリッドの背景は盲点でした。

描画される壁に直接当たり判定を持たせるのではなく、分けた方がよいという感じですね。
・描画される壁のレイヤー
・当たり判定が設置されたレイヤー
みたく別途に用意する。とても勉強になります。

2
asa 2020/12/09 (水) 00:55:45 修正

公式の説明を読む限り、十字キーなどで移動することはできないようです。

Sで選択ツール→ctrl+X→ctrl+Vが移動手段になります。
1つのタイルであればPを押しながら左クリックでマウスカーソル位置のタイルがピックされます。右クリックでタイル削除。
Ctrlで複数のエリアを選択できます。
Altで選択領域を削ります。

できるのはこんなところでしょうか。

1
生高橋 2020/12/08 (火) 22:58:50 修正

タイルを十字キーで移動僕も探してるんですが全然見つかりません...

2Dゲームのマップを作る際のこだわり(固定画面2Dパズルアクションの場合)

デバックグリッド

自分で設定したグリッド画像を作って、背景レイヤーでループ表示をさせてマップを作っています。
これはゲームが開始したら非表示になるよう設定しているのでRoomEditor上のみの表示です。
・緑色が3マスずつ並んでいるのはプレイヤーのジャンプ力に合わせている
・外側3マスには基本ギミックを置かない
などこれら細かいルールや目印がわかるように作ってます。
画像1

ステージごとにレイヤー分け

これは僕だけかもしれませんが、ステージを全部一つのルームで管理してます。
そのなかにステージの塊がいくつか存在します。
それらを移動する際、同じレイヤーだと別のステージも選択して移動する際めんどうです。
なのでレイヤーを分けることで選択中は同レイヤーのみ選択になり簡単に移動できるようになります。
検証はしてませんが、使ってないインスタンスレイヤーやタイルレイヤーを非表示にするとルームエディターの処理が軽くなる感じがします。

エディター上専用画像

ギミックや壁は基本半透明にした専用画像を使ってます。そうすることで、インスタンスの重複を察知することができます。たまに重なったままのゴミインスタンスがある場合があるので。

2

返信ありがとうございます。
自分が気づかずに環境設定で変な操作をしちゃったのでは、とヒヤヒヤしてました。

次のバージョンアップを待つことにします。

8
ディーン 2020/12/08 (火) 20:43:03

逆に言うと深度が使えるのでステンシルバッファを持てるんですよねぇ
実は本件に関する記事を書いているので良かったらご覧ください
これだけは押さえておこう!GMLベストプラクティス

1
生高橋 2020/12/08 (火) 20:29:48

自分もむっちゃでてました。全然気づきませんでした。

11

初めまして。GMS2を使い一人でゲームを作っているものです。
掲示板を作ってくださり感謝です。ありがとうございます。

var test = { /*test*/ inst : instance_create_layer(global.num, y/1-10, "Instances", o_test), }
7

これ知らなかったです。情報共有ありがとうございます。

4
生高橋 2020/12/08 (火) 16:33:23 >> 3

タグみたいなやつ作れた気がします。そこからタグ検索とかもできます。

3

こういう種類の投稿のタイトル、【知識】と付けてみましたがどういうのがいいですかね?

2

自分的には1ピクセルでVRAMを4バイト消費するってこと自体、勉強になりました。😃

1
生高橋 2020/12/08 (火) 16:13:41

サーフェース結構使ってるのでありがたいです。呼び出すだけでかなり動的メモリを節約できますね。

8

とっつきやすいしシンプルでスピーディに作れる反面、やろうとすることによっては物足りない面があるんですね。