GameMaker 日本語掲示板

選択肢の実装

12 コメント
views
16 フォロー

gamemaker始めて半年です。
5日ぐらい奮闘していますが、調べても解決策が出てこないので、初の掲示板使わせていただきます…。

選択肢を実装したいのですが、上手くいきません…。

選択肢を選択した時おかしくなります。

選択肢①・選択肢②があるとして、選択肢②を選び決定ボタンを押すと、なぜか選択肢②とともに選択肢①も起動してしまいます。

一体どうしたら良いのでしょうか?😭
画像1
画像2

ZUN is my dream(19)
作成: 2024/02/15 (木) 03:16:41
通報 ...
1

今同じ方法で試してみたら正常に動作しました。
投稿した内容以外に関係してる箇所があって、そこが悪さしてる可能性はないでしょうか?
下記のようにして変数の値をoutputさせて、Outputに出力される値を見て期待通りに動いてるか確認してみてください

if (keyboard_check_pressed(vk_up))
{
	erabu--;
	if (erabu < 0) { erabu = sentaku-1; }
	show_debug_message($"erabu={erabu}, sentaku={sentaku}");
}

if (keyboard_check_pressed(vk_down))
{
	erabu++;
	if (erabu >= sentaku) { erabu = 0; }
	show_debug_message($"erabu={erabu}, sentaku={sentaku}");
}

if (keyboard_check_pressed(vk_space))
{
	switch (erabu)
	{
		case 0: 
			show_debug_message($"selected 0");
			instance_create_layer(100, 300, layer, obj_sakuya_hutuu);
			break;

		case 1: 
			show_debug_message($"selected 1");
			instance_create_layer(300, 300, layer, obj_sakuya_naku);
			break;
	}
}

2
ZUN is my dream(19) 2024/02/15 (木) 15:35:51

コメントありがとうございます。
出力の所を見てみると、

選択肢①を決定した時 "selected 0"
選択肢②を選んだ時 "erabu=1,sentaku=2"
選択肢②を決定した時 "selected 0""selected 1"

とやはり…同時に表示されてます。

ここで試しに選択肢③を作ったところ、

選択肢③を選んだ時

"erabu=2,sentaku=3"
"erabu=1,sentaku=3"

と表示され、

選択肢③を決定した時

"selected 2""selected 1""selected 0"

と、やはり他の選択肢も同時に表示されてしまいます…😭

3

それは不思議ですね
一度ここにコードを貼ってもらえますか?(CreateイベントとStepイベント)
コードの投稿の仕方はここを御覧ください
https://zawazawa.jp/official/topic/53

4
ZUN is my dream(19) 2024/02/15 (木) 16:12:24

ありがとうございます。
とりあえず今の選択肢三つあるコードを貼っておきます。

Createイベント↓


op_border = 300;
op_space = 65;

erabu = 0;

option[0] = "FIGHT";
option[1] = "AITEM";
option[2] = "test";

sentaku = array_length(option);

5
ZUN is my dream(19) 2024/02/15 (木) 16:12:51 >> 4

Stepイベント↓


if(keyboard_check_pressed(vk_up)) {
	erabu--;
  if(erabu < 0) {erabu = 0}
  show_debug_message($"erabu={erabu},sentaku={sentaku}");
}

//下ボタン
if(keyboard_check_pressed(vk_down)) {
    erabu++;
  if(erabu >= sentaku) {erabu = 2;}
  show_debug_message($"erabu={erabu},sentaku={sentaku}");
}


//それぞれの選択肢結果
if(keyboard_check_pressed(vk_space)) {
switch(erabu){
			
			case 0:
			show_debug_message($"selected 0");
            instance_create_layer(100, 300, layer, obj_sakuya_hutuu);
            break;

            case 1:
			show_debug_message($"selected 1");
            instance_create_layer(300, 300, layer, obj_sakuya_naku);
            break;
			
			case 2:
			show_debug_message($"selected 2");
            instance_create_layer(500, 300, layer, obj_sakuya_warau);
            break;
}	
}

6
asa 2024/02/15 (木) 16:52:47 修正

やはりこちらでは正常に動作しました。

Stepイベントのspaceを押した時の処理部分にこれをコピペして試してもらえますか?
0を選択してspaceを押す
1を選択してspaceを押す
2を選択してspaceを押す
それぞれOutputに出力された内容を確認してください

//それぞれの選択肢結果
if(keyboard_check_pressed(vk_space)) {
	show_debug_message($"erabu={erabu} (id={id})");
	switch(erabu){
		case 0:
		show_debug_message($"selected 0");
		break;

		case 1:
		show_debug_message($"selected 1");
		break;
			
		case 2:
		show_debug_message($"selected 2");
		break;
	}	
}
7
ZUN is my dream(19) 2024/02/15 (木) 18:52:32

ありがとうございます。

0を選択しspaceを押すと、

erabu=0 (id=ref instance 107860)
selected 0
erabu=0 (id=ref instance 107861)
selected 0
.
.
.

1を選択しspaceを押すと、

erabu=1 (id=ref instance 111334)
selected 1
erabu=0 (id=ref instance 111335)
selected 0
.
.
.

2を選択しspaceを押すと

erabu=2 (id=ref instance 100261)
selected 2
erabu=1 (id=ref instance 100262)
selected 1
erabu=0 (id=ref instance 100349)
selected 0
.
.
.

のようになりました🤔

8
asa 2024/02/15 (木) 19:41:38 修正

id値はそのコードを実行してるインスタンスを示しますが、
それが全部違っているのはなぜだか分かりますか?
(本来1つだけのはずだと思うのです)

他の部分がどうなっているのか分からないので、なぜそうなるのか推測するしかありませんが、
そのオブジェクトが複数存在しているとか動的に作成されているということはありませんか?

9
ZUN is my dream(19) 2024/02/15 (木) 20:42:02

なるほど…
とすると、他のルームにもそのオブジェクトがあるとダメって感じですか…?

10
asa 2024/02/15 (木) 22:12:02 修正

とりあえず他のroomは考えなくていいです
このコードが書かれているオブジェクトがroom内に1つだけある形であれば正常に動くはずです

ですがインスタンスidが操作をするたびに変わっています
プロジェクトの作りがどうなっているのか不明なので私にはその理由までは分かりません
どういう作りになっているか一度見直してみてはどうでしょうか

追記
roomがpersistentになってる場合はそのroomにこのオブジェクトがあると競合すると思います
(操作を複数のインスタンスが拾うので)

11
ZUN is my dream(19) 2024/02/16 (金) 00:19:18

こんばんは
新しいルームでもう一度動かしたところ正常に動作しました。😅
何が悪かったのか原因を探ってみたところ、別のオブジェクトの


switch(_start){
case BATTLE.BATTLE_MODE_1:

instance_create_layer(x,y,layer,obj_battle)

case BATTLE.BATTLE_MODE_2:

のinstance_create_layer(x,y,layer,obj_battle)が問題だったようです😅
(今までのコードがobj_battleのコードです)

(確かに、これはやってることおかしいですわ…)

教えてくれたおかげで、なんとか問題に辿り着けたので助かりました!
分からないままだったら、ずっと同じコード直してました😅

12

全体を見直して、ご自分で原因にたどり着いたと。最高ですね!

私がよくやることですが、

  1. とにかくshow_debug_message()を多用して何がどう動いてるのか視認します(デバッガをうまく使えこなせないので)
  2. 問題をできるだけ小さく切り分けて新しいプロジェクトに最小限の要素だけで問題を再現させます

今回は新しいroomで動かしたのが原因究明につながったようですね
原因がわかってよかったです!