GameMaker 日本語掲示板

views
16 フォロー
981 件中 801 から 840 までを表示しています。
21

コードエディタで、enumにカーソルを乗せた時に値をバルーン表示して欲しい

1

ver2.3にはルーラーがあるんですね。
4月中にはバージョンアップするんだ……

20

リソースツリーから直接サウンドリソースを鳴らして聴きたい。

19

コンパイルがエラーなどで止まった時にアラート音を鳴らす機能が欲しい。

18
asa 2021/03/18 (木) 18:32:13 修正

リソースツリーで、右クリックメニューに「グループに移動」機能が欲しい

2

共有ありがとうございます!イマイチwithとの併用がわからなくて自分のノートとにらめっこしていたのですが、asaさんの説明でやっと要領を得ました!otherが参照していたのはwithの外側のコードだったということを理解できてなったようです😳

1

otherは特定のインスタンスを参照するキーワードで、
使う場面によって参照するものが変わり、使い方が変わります。

withブロックの中で使った場合
withブロックの外側のコードを実行しているインスタンスを参照します。
instanceAで下記のコードを実行した場合、instanceB.nameは"taro"になります。

name = "taro";

with (instanceB)
{
  name = other.name;
}



collisionイベントの中で使った場合
otherは衝突した相手のinstanceを参照します。
例えば、obj_playerのobj_enemyとのcollisionイベントでのotherは、playerと衝突したenemyインスタンスを参照します。
下記コードはplayerのhpからenemyのdamage値がマイナスされます。

hp -= other.damage



というのが私の理解です(collisionイベントは使わないのでよく知りませんが)。

16

Animation EndやOutside Roomなど、それぞれのイベントに相当するような関数を用意して欲しい。

Updateイベントの中で

if (animation_end()) {
    // do something
}

if (outside_room()) {
    // do something
}

のような記述が出来るようにanimation_end()outside_room()のような関数があったら便利だと思うので。

15

今後、ロシア語や中国語などの言語がIDEでサポートされるらしいけど、日本語も公式でサポートして欲しい

14

文字列の置換機能だけだと何かと不便なので、Visual Studioとかにあるようなシンボル(変数名や関数名など)の一括リネーム機能が欲しい

5

!!
解決しました!ありがとうございました!
また活用させていただきます

13

プロジェクトのファイル数を少なくしてほしい。
今の仕様ではファイルとフォルダがどんどん増えてすぐ数万になる。
バックアップするのも大変になってしまった。

4
asa 2021/03/15 (月) 13:00:05 修正

ファイル読み込みの部分がうまくいってないようですね。

GMSのファイル読み書きのデフォルトのパスは確か
C:\Users\UserName\AppData\Local\ProjectName\
ですのでここにファイルがある必要があります。

ここにtext.txt(UTF-8で保存したもの)を置いて、これが動くか試してみてください。

var _file = file_text_open_read("text.txt");
var _str = file_text_read_string(_file);
show_debug_message("_str="+string(_str))
file_text_close(_file);

正しく読み込まれて動作すればこうなります。
画像1

ゲームからファイルを作成し、書き込み読み込みをする処理の場合はこれでいいと思います。
(ゲームのコンフィグデータなど)

ですが、シナリオのテキストは予め自分で作ったテキストファイルをゲームに付属させる形になると思います。
ゲームを配布する時に、ユーザーのPCにこれをどうやって配置すればいい?となりますよね。
プロジェクトにファイルをインクルードすることで実現できます。

画像1
リソースツリーのところからファイルをインクルードすると、プロジェクトのフォルダ内にdatafilesというフォルダが作られ、そこにファイルがコピーされます。これで完了。開発環境でも動くし配布したゲームも動くはずです。テキストを編集する際はdatafilesにあるファイルを編集してください。

配布するゲームをビルド(Ctrl+F8)すると、このファイルはexeファイルと同じ場所に付属する形でコピーされるはずです。やってみてください。

ゲームを遊ぶユーザーから見ると、exeファイルがある場所にtext.txtがあるので開けば見たり編集できます。それをできにくくするなら暗号化したりという手段があります。それも解読不可能では無いと思うので、絶対見られたくないならシナリオテキストもプロジェクトのコード内に書く形にするしか無いのかなと思います。その場合でもリバースエンジニアリングで読まれる可能性は残ります。

私が書けるのはこんな感じで、「よく分からないがこうすると動く」的なことだけです。
コンピュータ、GMSのファイルI/Oについて、詳しい方からの解説を待ってます!
(サンドボックスとは?など私もちゃんと理解したい)

3

ご丁寧にありがとうございます。
細分化の考え方 非常に勉強になりました。

NPCの近くでSPACEキーを押すとシナリオが流れる機能と、全てのシナリオが終わるまでプレイヤーのスピードを0にしてキー受付を中断する簡単なポーズ機能は実装できました。
ですが各NPCにシナリオを割り当てる方法しか実装できず、色々調べてみたのですがテキストファイルを開いて配列に代入する方法がわかりませんでした。
シナリオはテキストファイルに一括で管理するイメージなので教えていただけるとありがたいです。

file_open_read()で開きfile_text_read_string()で配列に代入してfile_close()で閉じる流れはわかるのですが、テキストファイルの位置を指定してもファイルを開く関数でエラー(-1)が出てしまいます。

コード(NPCオブジェクトのcreateイベント内に記述しています)
fid = file_text_open_read("text.txt");
show_debug_message(fid);
str[0] = file_text_read_string(fid);
file_text_readln(fid);
str[1] = file_text_read_string(fid);
file_text_close(fid);

エラー文
ERROR!!! :: Failed to open file: text.txt
-1
ERROR!!! ::
ERROR in
action number 1
of Create Event
for object oNPC2:

File is not opened for reading.
 at gml_Object_oNPC2_Create_0 (line 7) - str[0] = file_text_read_string(fid);
画像1

12
ぽんでり 2021/03/15 (月) 01:54:00 修正

todoリストの機能をつけてほしいです。ただのtodoリストでもいいんですが、エディタ側にtodoのマーキングが出来て、todoリストからソースの該当箇所まで飛べたらさらにヨシです。

11

IMEをオンにするとショートカットが効かなくなる不具合を直してほしい。
(IMEをオフにして一度他のソフトの窓にフォーカスを移して戻ると直る)

10

日本語フォントの表示が荒れる問題を改善してほしい。
(何が原因か分からない。サイズ指定の問題?フォント固有の問題?しかしGMSだけで見られる諸問題)

9

code editorで日本語フォントの表示がおかしい不具合を改善してほしい。

8
サトヤガンジ 2021/03/14 (日) 20:09:10 >> 2

windows環境ならAutohotKeyってユーティリティーソフトで、強制的にショートカット自作できます。
が、オフィシャルで機能付く方が圧倒的にスマートなんで、ついてほしいですねぇ。

7

room editorでの拡大率の表示。
あと100%, 200%とか切りの良い拡大縮小。

6

スペースとタブの違いを無視(数も無視)しての検索

5

リソースツリーのグループを指定しての検索

2

キーボードショートカットのカスタマイズ機能が欲しい(´_ゝ`)

1

IDEのUIで、検索窓のサイズと位置を記憶して欲しい。
IDEのUIで、Workspace Overview(Ctrl+Tabで出るやつ)のサイズと位置を記憶して欲しい。

2

どこまで出来ているのかが分からないので、もしすでに出来ていることならすみません。
まずこういうシンプルなものを作ってみてはどうでしょうか。

画像1
▲画面にhello!と表示するだけ。
それができたら、
Spaceキーを押したらhello!と出す動きにする。
それができたら、
Spaceキーを押すごとに、hello!→good!→tank you! とテキストを順に表示する動きを実装する。

それができたら、キャラクターを動かす部分と「NPCの近く」の判定を実装。

自キャラを矢印キーで動かし、NPC(移動はしない)の近くでSpaceキーを押すとテキストを表示する。
画像1

このように、要素を切り分けて1つずつ実装していってみるのをおすすめします。
そうすると何が出来て何ができないのかも分かると思います。

1

その動作を実装するためにはいろいろな要素が関わってくるので、まず切り分けて考えてみます。

  1. NPCの近くにいる判定
  2. ゲームをポーズ
  3. テキストを外部ファイルから読み込み
  4. 読み込んだテキストを1行ずつ表示(ボタンで送る)

(1)はpoint_distance()などで判定できます。

(2)のゲームポーズは、これだけで1つの大きなテーマになり得ます。ポーズ中のフラグでオブジェクトの処理をスキップさせる、ポーズの瞬間の画面を静止画で表示しその間オブジェクトを非アクティブにする、など複数の実現方法が考えられます。ポーズと言っても完全に全てを止めるのか一部だけを止めるのかなどいろいろあるので、どういうものを作りたいのか具体的に仕様をまとめるといいと思います。

(3)外部ファイルから読み込む方法も複数あります。file_text_read_string()でもいいと思いますし、JSONに対応することもできます。"read text file gamemaker"、 "dialogue system gamemaker"などで検索するといろいろ出てきます。

(4)表示はdraw_text()でいいと思います。「1行ずつ」を実現するには、これもいろいろ方法があるでしょうが、配列に1行ずつテキストを保持し、現在の行を保持する変数を作り、Drawイベントで現在の行のテキストを表示、ボタンで行を送れるようにする、という形でいいと思います。

できるだけ要素を区切って考えて、1つずつ個別に実装してみてください、そしてうまくいかなければ
その部分のコードをここに貼って質問もらえれば具体的な回答を得られると思います。

質問があるとこの掲示板が活発になり、他のgamemakerユーザーにも役立ちますので大変ありがたいです。
遠慮せず気軽にどしどし質問してください。
誰かが何かかしら教えてくれると思います!

18
ぽんでり 2021/03/12 (金) 02:36:19

ついでに似たやつ。プロジェクトのとっかかりに配置バランスを見たりするのに使います。

/// @description draw_center_v_line(view_number,color)
/// @param view_number
/// @param color

	/*===============================================================================
		ビューのヨコ中央にタテ線を描画するためのスクリプト。
		引数に対象となるビューの番号と色を入れる。
		色は c_XX でビルトイン定義されているものか、make_color_rgb() で定義したものを使う。
			※別スクリプト、cener_xpos()が必要
	================================================================================*/
function draw_center_v_line(argument0, argument1){
	var view_number = argument0;
	var color = argument1;
	var line_thickness = 1;	//垂直ラインの線幅
	var xpos = center_xpos(view_number, line_thickness);
	
	draw_line_width_color(xpos, 0, xpos, view_get_hport(view_number), line_thickness, color, color);
}
17
ぽんでり 2021/03/12 (金) 02:27:20

上に書いたビューのX方向(ヨコ方向)の真ん中を返すスクリプト、念の為argumentを使うように直しておきます。おかしくなるかもしれないので。(そういうので引っかかることありますよねえ)

/// @description center_xpos(view_number, drawing_width) return center x-position.
/// @param view_number
/// @param drawing_width

	/*===============================================================================
		描画の対象となるビューのX方向(ヨコ)の中央にスプライトやテキストを描画するための
		X座標を返すスクリプト。引数に対象となるビューの番号と描画対象物の横幅を入れる。
	================================================================================*/
	
function center_xpos(argument0, argument1){
	var view_number = argument0;
	var drawing_width = argument1;
	
	var xpos = view_get_wport(view_number) /2 - drawing_width /2
	return xpos;
}
2

そうなんですね。
(背景がない場合)これをオンにしても残像が出る理由がまだ分かってないのですが、
Clear viewport Backgroundの設定が優先されるということかもしれません。

自分のゲームの場合、viewを使っていて、背景が全て不透明の画像なので、
Clear viewport BackgroundもClear Display Bufferもオフにしています。

ありがとうございました。

1
ディーン 2021/03/10 (水) 21:42:09

サーフェイスのクリアみたいなもののようです。

現在のフレームから次のフレームに移る際、描画をクリアしてから再描画するのですが、ウィンドウ範囲内のルーム全体が完全な不透明で描画されている場合は「上書き」しても問題ないので、クリアしなくても良い事になります。

「クリアする処理」がなくなるので、若干負荷が下がる的な話に見えます。

例えば、ルーム内をスクロールしないようなゲームの場合は、一度描画してしまえば、クリアして再描画する処理を省ける事になります。

実際に使ったことはないので、マニュアルを読む限りの推測です。
用語として「バックバッファ」とか「ディスプレイバッファ」とか混在してて、若干の意味の違いはありますが、要するにApplicationSurfaceの後に描画されるネイティブウィンドウ描画領域の話かと思います。

9
asa 2021/03/10 (水) 00:40:35 修正 >> 8

GMSは関数への参照idを変数に入れたり、それを他の関数に渡したり渡された関数を実行したりできるので、それが該当するようです(GMSでの呼び方はよく分かりません)。

例えば、
Aが「歩く」のあとでBに演出表示をさせて「止まって」待機し、Bが完了したタイミングで「ジャンプ」に移る場合は、Aの「ジャンプする」の部分を関数jumpとして切り出しておいて、AがBに指示を出す時点で関数jumpを渡す(=コールバック関数)。Bは自分の処理が終わったら渡されてるA関数jumpを実行。その結果、Aはジャンプすると。

// AからBに指示
with (B) { scr_effect_show(id, scr_jump); }

イメージ的にはAはBに「ジャンプ」の動きを移譲し、ぼーっと待機。Bは自分の処理を終えて関数jumpを呼び出し。Aは遠隔で操られ動かされる感じでしょうか(全然違うかもしれませんが)。

関数jumpがどうやってAを参照し動かすのかですが、たぶん上記のコードのように、Aがコールバック関数を渡す時に自分のidを一緒に渡しておけば下記のようにBはwith構文で実行できるのでこれで対処できそうです。

// Bの終了時
with (someone) { script_execute(scr_jump); }

これでBはAが誰だろうと知ったこっちゃなく何をするのかも知ったこっちゃなく済みます(と思います…)

教えていただいたキーワードでいろいろ調べてみようと思います。ありがとうございます。

8

>仮にBが終了したことをAに伝える形にする場合、どういう方法にすると独立性を保てるのでしょうか?

「Bが終了したら呼び出される関数」をBに登録できるようにして、Bは終了時に登録されている関数を呼び出す、という形で実現できます。Bは誰に何の関数を登録されたのか知りません。終了時にただ機械的に登録された関数を呼び出すだけです。この設計にすることでBはAの存在を知ることなく終了したことを知りたい人に伝えることが出来ます。

C/C++では関数ポインタやファンクタ、C#ではデリゲート等で実装できます。
(GMSは触ったことがないので実現方法が分かりません、、、ごめんなさい、、、)

私が最初のポストで挙げた「コールバック型」というのはまさに上記のような実装のことです。特定のタイミングで呼び出してもらいたい関数を登録する設計です。

7

無視できる負荷を気にするあまり、仕組みが手に負えない複雑さになるのも良くないですからね。
ありがとうございます!

6

考え方の説明も含めて参考になります。ありがとうございます!

5

ポーリング型、コールバック型、オブザーバーパターン、いろいろ勉強になります。
仮にBが終了したことをAに伝える形にする場合、どういう方法にすると独立性を保てるのでしょうか?