GameMaker 日本語掲示板

views
17 フォロー
1,131 件中 361 から 400 までを表示しています。
2

とてもとてもありがたいチュートリアルです!
一番最初のチュートリアルはいくつかあるのですが、
作り始めてから、こんなことしたい、あんなことしたいっていう部分がなかなかなくて、
GMLの情報をあつめつつも、わからないことだらけで・・

ここにたどり着けたので、
とりいそぎチュートリアル記事を全部読もうと思います!

2

そのような関数が追加されていたのですね!
重複もないので使えそうです。
ありがとうございます。

3
生高橋 2023/02/04 (土) 10:59:39 >> 2

ds_listのようなデータ構造は今後構造体とかになりそうな予感がしてます。

2

配列の関数がかなり充実して何でもできるようになってきてるので、DS_Listを使わなくてもよくなってきてますね

1
生高橋 2023/02/03 (金) 20:36:09

指定した値を配列の中身から探してインデックスを取得するarray_get_index関数が追加されてましたね。
indexを探すfor文は書かなくて済みそうです。

1
生高橋 2023/02/03 (金) 20:31:18

GameMaker最新版の2023.1から指定した値を配列の中身から探してインデックスを取得するarray_get_index関数が追加されました。
もし配列の中身に重複がなければ使えると思います。

サンプルコードです。

var _array = [2, 8, 10];
var _tile_index = choose(2,8,10);
var _new_tile_index = array_get_index(_array,_tile_index) + 1;
show_debug_message(_tile_index);
show_debug_message(_new_tile_index);
3
生高橋 2023/02/01 (水) 12:17:19

よかったです。
surface_copyのほうがシンプルだったかもしれませんね。

2
名前なし 2023/01/31 (火) 21:55:34 修正 >> 1

サンプルが一つのオブジェクトで複数の効果だったので求めてたものとはちょっと違いましたがご教授いただきありがとうございました!
考え方を知れたのでうまく実装することができました。
surface_copyとか使わないんですね・・・。

複数オブジェクトでの実装方法を書いておきます。

Createイベント

isSurface = false;

objSurface1(レイヤーが一番下)のStepイベント

isSurface = (instance_exists(objSurface2) || instance_exists(objSurface3)); //レイヤーが下であるほど多くなる

objSurface3(レイヤーが一番上)のDrawGUIイベント

var sfc = application_surface;
if(instance_exists(objSurface1)) sfc = objSurface1._surf; //レイヤーが上であるほど多くなる
if(instance_exists(objSurface2)) sfc = objSurface2._surf; 
	
if (!surface_exists(_surf)){
	var w = surface_get_width(application_surface);
	var h = surface_get_height(application_surface);
	_surf= surface_create(w,h);
}
if(isSurface) surface_set_target(_surf);
	shader_set(shd_grayscale);
		draw_surface(sfc, 0, 0);
	shader_reset();
if(isSurface) surface_reset_target();
1
生高橋 2023/01/30 (月) 20:08:15

シェーダーを複数回かけるマルチパスのことですかね。
とりあえずサンプルプロジェクトを用意しましたので、参考にどうぞ。
こちらからダウンロード

バージョンは以下で作成してます。バージョンが古いともしかしたら動かないかもしれません。
IDE 2022.11.1.56
Runtime v2022.11.1.75

内容は次の3つのシェーダーを画面全体に重ね掛けするというものです。
・歪みシェーダー
・グレースケールシェーダー
・色収差シェーダー

1,2,3キーでシェーダーの効果をオン、オフできます。

大まかな流れは次のとおりです。

  1. application_surfaceに対してshader1をかけたものを自作surface2に保存
  2. surface2に対してshader2をかけたものを自作surface3に保存
  3. surface3に対してshader3をかけたものを描画
    となっています。

サンプルを見てなにかわからないことがあれば聞いてください。

1

最後のUnityの話で思い当たることがありまして、
他のエンジンでの仕様や決まりごとに、ゲーム作りに役立つ概念がたくさんありますね。

2

おかげさまで実装できました!ありがとうございます。
GameMakerまとめWikiには載ってなかったのでやっぱり英語でも調べないと駄目だなと実感しました…

1

window_has_focus関数で検知できます

例:
stepイベント

if(!window_has_focus())
{
   // game pause code
}
1

これはいつかお世話になりそうな情報。ありがとうございます!🙏

1

おそらく自作が必要で、

  1. instance_create_layer() などで生成した後に、instance_deactivate_object() で無効化して配列かリストにプールする
  2. 必要になったら未使用のインスタンスから instance_activate_object() でアクティブにする
  3. 使い終わったら再び instance_deactivate_object() で無効化する

といった流れになりそうな気がします

4

フォントの質問についてはちょっと分からないのでテキスト表示の処理を考えました。
これで文字間と行間を指定できます。こういう方法はいかがでしょうか。


Draw GUI(Drawでも動きます)に貼り付けて「フォント」を使いたいフォントアセットに書き換えてください。

draw_set_font(フォント);
characters = ["今","日","は","い","い","天","気","。","\n", "そ","う","で","す","ね"];
char_width = 12;
char_space = 2;
line_height = 15;
line = 0;
char_index_in_line = 0;
x = 10;
y = 10;

for (var _i=0; _i<array_length(characters); _i++)
{
	if (characters[_i] == "\n")
	{
		line += 1;
		char_index_in_line = 0;
	}
	else
	{
		var _x = x + char_width*char_index_in_line + char_space*char_index_in_line;
		var _y = y + line_height*line;
		draw_text(_x, _y, characters[_i]);
		char_index_in_line += 1;
	}
}
3
サトヤガンジ 2022/12/07 (水) 21:52:36 >> 1

こんにちは!
文字間隔を調整できるフォントの作成の調査をしています。

font_add_sprite()で各文字の幅を指定できるようですが、べースとなるスプライトが必要とあります。
JIS 第一・第二水準を含む美咲ゴシックを導入したいのですが、可能でしょうか?(サイズが大きい気がしまして。)

現在は美咲ゴシック(JIS 第一・第二水準)をフォントアセットに取り込んでテキストを表示しているので、このフォントに対して文字間隔を指定する方法があればいいのですが・・・。

何かヒントでもいただければ幸いです。
よろしくお願いいたします。

4
ぽんでり 2022/12/05 (月) 01:06:15 >> 3

やはりそうですよねえ。今日たまたまドキュメントを見たら載ってたstring_split()を「こんな関数あったっけ」と思いつつやってみたら使えなかったので、新しい機能なんだと思います。→→→ランタイムのリリースノートに載ってますねえ。いやあーん失礼しました!

3

LTSは2022.9をベースにしてますので、これより後にリリースされた仕様は実装されないものと認識してます

2
ぽんでり 2022/12/04 (日) 19:33:55

string系のアプデ気になりますね!
LTSのほうでstring_split()が動かないのですが、ひょっとしてLTSにはまだ実装されてなくて、そちらに来てるのかも

1
サトヤガンジ 2022/11/30 (水) 18:13:55

ランタイムを個別にインストールできるようになった。
エフェクトが増えた。オールドフィルムとか。
値の桁や区切りとしてアンダーバー<_>が使えるようになった。10000 = 10_000
string系の関数がアップデートされた?
配列を使用するときに便利な関数が用意された?
キャッチアップするの大変だ('ω')

2
サトヤガンジ 2022/11/29 (火) 21:43:57 >> 1

海外フォーラムでも検索しましたが、カーニングを指定できる関数はなさそうですね。
1文字ずつ描画する関数の自作を研究してみます!
ありがとうございました('ω')

1

私の知る限り、文字間隔を指定できる関数は無いので(行間隔はdraw_text_ext()でできますが)
1文字ずつ描画する関数を自作する形になるでしょうかね。
自作関数なら1文字単位で文字間隔を変えることもできます。
私は文字単位で色を変えるために自作しました。

フォント単位で固定でいいなら、フォントの素材画像をスペース込みで作成する方法もあります。

4

しばらくってどれくらいなのか気になりますが、出ないことはないようで安心です!ありがとうございます

3

紹介記事によると、しばらくの間フィードバックを集めた後に出るとあります。
https://gamemaker.io/en/blog/release-2022-0

2

質問です、これはSteam版もリリースされますか?

1
ぽんでり 2022/11/06 (日) 22:20:16

ずっとLTS欲しかったので、とりあえずめでたいです

2

返事が遅くなってしまいすみません。
教えていただいた方法でdrawイベントを使って描画のみ拡大したところ、期待していた通りの実装が行うことができました!ありがとうございます!

1
asa 2022/11/02 (水) 14:08:53 修正

collision maskは、ビルトイン変数であるimage_xscale、image_yscale、image_angleに連動して変化します。
なのでこれらを使わずに
img_xscale, img_yscaleなどの自前の変数(変数名は何でもいいです)を使って拡大縮小させるといいですよ。

// create eventなどで
img_xscale = 2;
img_yscale = 2;

// drawイベントで
draw_sprite_ext(spr_character, image_index, x, y, img_xscale, img_yscale, image_angle, c_white, image_alpha);

こんな感じで。

7

PCを買い替えたのとIDEのバージョンを上げたのが同時なので何が影響してるのか分かりませんが、
コードを書いてるとIDEがどんどん重くなっていく問題は感じられなくなりました。

5

公式が用意してくれるなら不要かもですが、昔作った自動改行(正確には文字列分割して、for文で draw_text() する想定) のスクリプトを添付しておきますね。

分割文字 (sep) が見つかればそれで改行 (分割) できますし、warpに文字の幅を指定すれば string_width() で文字幅を計算して改行するようにできます。

/// @description 文字列分割 (自動折返し).
/// @param str 分割する文字列
/// @param sep 分割文字
/// @param wrap 分割する幅
/// @return 分割された文字列 (array 1d)
function string_split2(argument0, argument1, argument2) {

	var str  = argument0; // source string.
	var sep  = argument1; // seperate string.
	var wrap = argument2; // wrap width.

	// 戻り値.
	var ret = [];
	var s = ""; // 切り出し中の文字列.
	var idx = 0; // 文字の位置.
	while(true) {
		var s2 = string_char_at(str, 1);
		if(s2 == sep) {
			// 分割文字.
			ret[idx] = s;
			idx++;
			s = "";
		}
		else if(string_width(s + s2) > wrap) {
			// 自動折返し.
			ret[idx] = s;
			idx++;
			s = s2;
		}
		else {
			s += s2;
		}
		str = string_copy(str, 2, 65535);
		if(string_length(str) <= 0) {
			// 終わり.
			if(string_length(s) > 0) {
				// 空文字でないので追加
				ret[idx] = s;
			}
			break;
		}
	}
	
	// 返却する.
	return ret;
}
5
ralsoon 2022/10/24 (月) 17:27:43

これも追加で

Null合体演算子(??)を使ってシンプルに

var val = gameData[?"time"];
if (is_undefined(val)) time = 100;
else                   time = val;

// 三項演算子でもいいが……
var val = gameData[?"time"];
time = is_undefined(val) ? 100 : val;

// こうするとシンプル
// gameData[?"time"]がundefinedなら100が代入される
time = gameData[?"time"] ?? 100;

ただしnooneは-4の定数なのでNull合体演算子(??)は使えない

var val1 = noone;
var val2 = val1 ?? 100; // val2には-4が代入される
4
yOichi 2022/10/22 (土) 13:41:43

行頭、行末文字までやりだすとわかりにくく、他の言語の同様のルールに対応しなくちゃならないので大変かと思いますし、draw_text_ext() を日本語に対応させるだけでそこそこ大変な気がするので、まずはそこで十分な気が。
プロの現場とかでも、行頭、行末に関しては手入力というのがほとんどでしたし(機能がない場合と、よみやすさにこだわると手動改行になってしまう場合の二種類)。

5

返信が遅くなってすみません。
ネットで検索しても同じような症状の人が見つからず心配だったので、レスポンスをいただいて助かります。
Mac版特有のバグなんですね・・・。
とりあえずYoYoGamesさんにバグ報告をして、修正される間はコピペで凌ごうと思います。
本当に助かりました。ありがとうございます!

6

Ctrl+Tで出すGOTOメニューでキーワードが部分一致しても検索結果に出て来ないのでバグ報告しました。
(再現できないって言ってきたので日本語環境だけまたは自分の環境だけのことかも)

3
生高橋 2022/10/17 (月) 19:25:28

自分は9個くらいありましたw
自分の場合はおそらく別のPCでログインしたり、別のインターネットでログインしたりしたせいかもしれません。

2

私の場合IPアドレスは自分のもの1つだけで、暗号みたいな英数字の羅列の名前がいくつかありました(IPが自分のものもそうなってました)。
今Opera関係でその辺をごっそり作り直してるところなので変なバグがあるのかもしれません。
原因がわからない場合は報告した方がいいと思いますね。

1
ハンドソープ 2022/10/13 (木) 22:23:01

ごめんなさい。初めて投稿したものですから、変なリンクが付いてしまいました。
これをクリックしてもpage not foundで何もありません。

4

GameMakerは現在は日本語も公式にサポートしてますのでバグ報告するといいと思います。
正直YoYoGamesへのバグ報告は疲れるし失望することが多くてしんどいですけど、
しないと修正もされないし、そもそも彼らは日本語の問題を認識できないので、
ユーザーががんばるしかない部分ではあります。