アイテムインベントリを作成しています。
アイテムの選択&使用&使用したアイテムの削除までは出来たのですが、アイテムインベントリにアイテムが何も入ってない時に、Enterキーを押すと「インデックス範囲外」のエラーメッセージが出てしまうので、アイテムインベントリにアイテムが何も入ってない時に、Enterキーを押せないようにしたいのですがどうすればよいでしょうか?
プログラムコード↓
「作成」
function create_item(_name,_desc,_spr,_siyou)constructor
{
name = _name;//アイテムの名前
description = _desc;//アイテムの説明
sprite = _spr;//アイテムの画像(いらなくてもいい)
siyou = _siyou;//アイテムの使用効果
}
global.item_list =
{
aitem_1 : new create_item("アイテム1","アイテム1だ",spr_aitem_1,
function(){test_player.move_speed = 30;
array_delete(inv,selected_item,1);
}),
}
inv = array_create(0);
inv_max = 10;//インベントリ上限値の設定(アイテムが持てる上限値)
selected_item = 0;
「ステップ」
//上ボタン/////////////////////////////////////////////////////////////////////////////////////////
if(keyboard_check_pressed(vk_up)) {
selected_item--;
if(selected_item < 0) {selected_item = 0}
show_debug_message($"selected_item={selected_item},inv={inv}");
}
//下ボタン/////////////////////////////////////////////////////////////////////////////////////////
if(keyboard_check_pressed(vk_down)) {
selected_item++;
if(selected_item >= array_length(inv)) {selected_item = array_length(inv)-1;}
show_debug_message($"selected_item={selected_item},inv={inv}");
}
//もしアイテムを使用したら///////////////////////////////////////////////////////////////////////////
if keyboard_check_pressed(vk_enter){
inv[selected_item].siyou();
if selected_item != 0{selected_item -= 1;}//アイテムが消えたら手前のアイテムを選択する(もし一番手前の選択肢ならそのまま)
}
この方の動画を参考にしてプログラムコードを書きました。↓
この方はマウスを使ってアイテムを選択していますが、自分はキーボード操作でアイテムを選択している感じです↓
https://youtu.be/fa26B54JDDk?si=V9-0sJQsZx3A7zuD
エンターキーを押したときに、配列の変数「inv」内、現在のアイテム欄のカーソル位置ID(順番)を参照しようとしているが、配列が空だと参照しようがないのでエラーになっている状態です。
配列の範囲外を参照しないようにチェックするとエラーが出ないようにできます。
「inv[selected_item]」で配列の値を参照しているので、その前のif文で、配列が空だったら処理しないように条件文を追加します。
配列変数invの配列要素数が0(アイテムがない状態)より大きい かつ キーボードのエンターキーが押されたら
という条件にすれば配列要素数1以上の時に、エンターキーの処理を実行する状態になります。
「&&」は&&で両方の条件を満たしたときにtrueになります。
試してみてください。
す、すごい...。&&については初めて使いました...。
解決しました。ありがとうございます。