Game Maker - создание игр | HellRoom Games
Декабрь 13, 2024, 01:43:31 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти
Новости:
 
   Начало   Game Maker Помощь Правила форума Поиск Календарь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Как найти в Grid нужный мне Id предмета?  (Прочитано 962 раз)
0 Пользователей и 1 Гость смотрят эту тему.
HUNTon
Новичок
*

Репутация: 0
Offline Offline

API: GameMaker Studio 2
Сообщений: 9


« : Июнь 18, 2023, 19:53:26 »

Здравствуйте! Подскажите, пожалуйста, где закралась ошибка?
Хочу выполнить проверку на наличие Id предмета (ключ) в инвентаре ,после чего, (если он действительно присутствует) добавить его в список, который в последствии я проверяю при взаимодействии с другим объектом (сундуком).


function IsItemIDInInventory(_Id){ // _Id номер предмета
   
   global.checkInventory_items = ds_list_create();
   
       for (var xx = 0; xx < w; xx++)
       {
           for (var yy = 0; yy < h; yy++)
           {
            var val = ds_grid_get(obj_inventory.grid, xx, yy)            
            if val == _Id {
               ds_list_add(global.checkInventory_items, 0, _Id);
            }
           }
       }
}

Но почему-то, при начилии искомого Id предмета в инвентаре, проверка ds_grid_get не дает результата и скрипт не заносит предмет в список. :-(
Возможно я неправильно использую ds_grid_get или нужна другая функция?
Записан
Dmi7ry
Гл. Администратор
*

Репутация: 1379
Offline Offline

Пол: Мужской
Награды:
5000 сообщений!За постоянность! [200 дней на форуме]За лояльность! [+1000 репутации]За помощь в развитии форума!Знаток Game Maker!За помощь новичкам!
API: GameMaker Studio Master
Деятельность: Code, design
Сообщений: 6626



WWW
« Ответ #1 : Июнь 19, 2023, 04:58:09 »

Проверьте, чему равны w и h. По-хорошему, они должны вычисляться в этой же функции.
И вижу ещё пару проблем:
1. У вас лишний аргумент в ds_list_add.
2. При каждом вызове этой функции вы создаёте новый список ds_list. Тут два варианта. Либо нужно после каждого вызова этой функции уничтожать список, чтобы не было утечки, либо возвращать результат в массиве.

Если проблему не найдёте, то просто ставьте точку останова в этой функции и отладчиком смотрите, что там происходит.
Записан

- А какой, собственно, командой процессора колобок ест черта?
- Командой EAT...
Справка и FAQ в правом верхнем углу...
HUNTon
Новичок
*

Репутация: 0
Offline Offline

API: GameMaker Studio 2
Сообщений: 9


« Ответ #2 : Июнь 20, 2023, 16:16:30 »

Спасибо! Заработало)

По поводу списка - не понимаю как его грамотно уничтожить. Если список создать вне функции, то внутри функции он не срабатывает, почему-то, а если список  создается внутри функции, то вне этой функции при попытке его уничтожить, вылезает ошибка, в духе " я не знаю что такой список существует". Я искал проверку вроде "if ds_list_exists ", но не нашел ничего подходящего..

upd.: функция ds_list_clear нормально срабатывает, думаю ее оставить.
« Последнее редактирование: Июнь 20, 2023, 18:54:11 от HUNTon » Записан
Dmi7ry
Гл. Администратор
*

Репутация: 1379
Offline Offline

Пол: Мужской
Награды:
5000 сообщений!За постоянность! [200 дней на форуме]За лояльность! [+1000 репутации]За помощь в развитии форума!Знаток Game Maker!За помощь новичкам!
API: GameMaker Studio Master
Деятельность: Code, design
Сообщений: 6626



WWW
« Ответ #3 : Июнь 20, 2023, 20:52:55 »

ds_list_clear очищает содержимое списка, но сам список при этом не уничтожается.
ds_list, ds_grid, ds_map и другие ds_структуры данных являются глобальными, а потому, могут быть доступны из любого места.
Если есть какая-то ошибка, то либо структура данных создаётся позже, чем было обращение к переменной, в которой она сохранена, либо эта переменная была затёрта другим значением уже после создания структуры данных.

Функция ds_list_exists() не существует, есть ds_exists().
Записан

- А какой, собственно, командой процессора колобок ест черта?
- Командой EAT...
Справка и FAQ в правом верхнем углу...
HUNTon
Новичок
*

Репутация: 0
Offline Offline

API: GameMaker Studio 2
Сообщений: 9


« Ответ #4 : Июнь 20, 2023, 21:58:41 »

Спасибо за ответ, вы очень помогли! 
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  

HellRoom Games © 2006-2012 All Rights Reserved
Powered by SMF 1.1.21 | SMF © 2013, Simple Machines
Страница сгенерирована за 1.247 секунд. Запросов: 27.