Game Maker - создание игр | HellRoom Games
Ноябрь 17, 2025, 15:26:24 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти
Новости:
 
   Начало   Game Maker Помощь Правила форума Поиск Календарь Войти Регистрация  
Страниц: 1 ... 14 15 [16] 17 18 ... 28   Вниз
  Печать  
Автор Тема: Пример инвентаря  (Прочитано 335559 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
Dva_Kota
Гл. Администратор
*

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

Пол: Мужской
Награды:
3000 сообщений!За постоянность! [500 дней на форуме]За лояльность! [+500 репутации]Настоящий игродел!Тру Админ :D1 место за игру: Energy Wars (Конкурс Золотые Руки)...
API: GameMaker Studio Standard
Сообщений: 3245



« Ответ #225 : Сентябрь 19, 2012, 16:31:06 »

act_on[] и act_off[] содержат не по одной строчке, по этому загрузка будет не удачной (загружается ведь все по одной строчке).
По этому лучше было бы записывать в файл готовый код и потом выполнять его с помощью  execute_file()

С остальным попробую позже разобраться.

Добавлено: Сентябрь 19, 2012, 18:10:13
Разобрался с проблемой. На самом деле проблема не только со спрайтами, но и с объектами (аналогичная проблема). Дело в том что в массивы записываются индексы (числа) спрайтов и объектов (которые должны создаваться если выбросить предмет из инвентаря). По этому сохранять name_obj[] нужно через object_get_name (по аналогии со спрайтами). т.е. мы переводим индексы в текст. При загрузке нужно сделать обратную процедуру. Делается это через execute_string().


Но проблема с act_on[] и act_off[], в которых несколько строк, осталась. Чтобы не переделывать весь код загрузки можно код, записанный в эти переменные, записывать одной строкой, а не несколькими, как у меня в примере.
Записан

ALT
Посетитель
**

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

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


« Ответ #226 : Сентябрь 19, 2012, 18:14:02 »

Ну у меня проект под Андроид, в Studio разрабатываю, так что о такой роскоши как execute_string приходится забыть. В act_on у меня несколько иное написано, поэтому одной строчки вполне хватает.
А насчет сохранения картинок, одна идейка все же есть. В общем полные картинки предметов я только в магазине, да в некоторых комнатах использую, так что ассоциируем спрайты с этими объектами и забудем про них. А вот то что в инвентаре отображается можно в принципе в один спрайт все картинки записать и выводить на экран только его, сохраняя в массиве лишь номер кадра с необходимой картинкой. Точно так же и сохранять все в файл. То есть в массиве spr хранить не спрайты, а порядковые номера  картинок в спрайте ассоциированные с этими предметами.Ну в общем для obj_inv строка вывода спрайта хранящегося в инвентаре будет выглядеть так
Код:
draw_sprite(spr_mini,spr[slot_x,slot_y],x+slot_x*slot_width_x,y+slot_y*slot_height_y);//рисуем спрайт предмета, находящегося в этой ячейке инвентаря (в своих координатах)
Где spr_mini как раз и есть тот самый спрайт в котором содержатся картинки предметов. Вроде работает как надо и сохраняет и загружает
Записан
Dva_Kota
Гл. Администратор
*

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

Пол: Мужской
Награды:
3000 сообщений!За постоянность! [500 дней на форуме]За лояльность! [+500 репутации]Настоящий игродел!Тру Админ :D1 место за игру: Energy Wars (Конкурс Золотые Руки)...
API: GameMaker Studio Standard
Сообщений: 3245



« Ответ #227 : Сентябрь 19, 2012, 18:17:53 »

Ну, если без execute_string то попробую что-то другое придумать. Проблему с индексом объекта все равно нужно будет решать, она аналогичная, но без ее решения нельзя будет выбрасывать предметы.
Записан

ALT
Посетитель
**

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

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


« Ответ #228 : Сентябрь 19, 2012, 18:56:46 »

А без execute_string обошелся примерно так. В act_on и act_off что-то типа "hp10" или "str-5" писал. Потом в событии нажатия левой клавиши в нужных местах Switch ставил и там уже описывал то что нужно. Предметов у меня не слишком много. Так что вроде нормально все обрабатывается. Падения FPS не заметно. Можно конечно было по названию предмета все парсить, но у меня есть разного типа предметы, но с одинаковыми свойствами, так что такая запись короче получается.

Добавлено: Сентябрь 19, 2012, 19:01:28
Единственное над чем голову ломаю, как действия двух кнопок мыши на одну повесить. На тач скрине правой клавиши мыши по определению нет, так что надо что-то придумывать с длинными, короткими, двойными или тапами с удержанием придумывать. Хотя пока мыслей нет никаких. Через alarm чтоли мутить или фиг его знает как
Записан
Dva_Kota
Гл. Администратор
*

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

Пол: Мужской
Награды:
3000 сообщений!За постоянность! [500 дней на форуме]За лояльность! [+500 репутации]Настоящий игродел!Тру Админ :D1 место за игру: Energy Wars (Конкурс Золотые Руки)...
API: GameMaker Studio Standard
Сообщений: 3245



« Ответ #229 : Сентябрь 19, 2012, 19:27:16 »

Использование предметов делать при отпускании клавиши (если отпущена над той же ячейкой над которой нажата). этой же клавишей и перетаскивание предметов между ячейками и выбрасывание.
Записан

ALT
Посетитель
**

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

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


« Ответ #230 : Сентябрь 19, 2012, 21:04:56 »

  Хорошая идея. Попробую. Что-то сразу до этого не додумался
Записан
Dva_Kota
Гл. Администратор
*

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

Пол: Мужской
Награды:
3000 сообщений!За постоянность! [500 дней на форуме]За лояльность! [+500 репутации]Настоящий игродел!Тру Админ :D1 место за игру: Energy Wars (Конкурс Золотые Руки)...
API: GameMaker Studio Standard
Сообщений: 3245



« Ответ #231 : Сентябрь 20, 2012, 10:39:30 »

Проблема решена.
Индексы спрайтов и объектов, хранящиеся в переменных нужно сохранять в виде чисел.
Код
Код:
file_text_write_string(file,obj_inv.name_obj[slot_x,slot_y]);
сохранит пустую строку,

Код
Код:
file_text_write_string(file,object_get_name(obj_inv.name_obj[slot_x,slot_y]));
сохранит имя ресурса-бъекта,

а вот код
Код:
file_text_write_string(file,string(obj_inv.name_obj[slot_x,slot_y]));
сохранит число, хранящееся в переменной как строку. Это именно то что нам нужно.

Теперь загрузка. При загрузке кодом
Код:
obj_inv.name_obj[slot_x,slot_y]=file_text_read_string(file);
в obj_inv.name_obj[slot_x,slot_y] будет записана строка (не зависимо от того как и что записано в файл сохранения - хоть число, хоть строка - все равно это будет строкой). Для правильной загрузки числа как числа нам нужна такой код:
Код:
obj_inv.name_obj[slot_x,slot_y]=real(file_text_read_string(file));

Со спрайтами аналогично.

Полный код сохранения и загрузки:
Записан

ALT
Посетитель
**

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

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


« Ответ #232 : Сентябрь 20, 2012, 12:41:43 »

Про string() real() не думал даже. Так и file_text_write_string и file_text_write_real для спрайтов и объектов в любом случае пустую строку выдавали. Надо попробовать будет твой способ. Заодно и посмотреть, что это за индексы объектов такие, которые и не цифрой и не текстом не являются

Добавлено: Сентябрь 20, 2012, 12:53:54
Еще вопрос такой из разряда придирок, но все же спрошу. Почему массив item_type текстового типа? Там же все равно только цифры хранятся. Или я немного не правильно понимаю строку в событии create obj_inv: item_type[x,y]='' ?('' - это ж пустая строка вроде, хотя все вроде работает и так, поэтому не критично, но немного понимание затрудняет)
Записан
Dva_Kota
Гл. Администратор
*

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

Пол: Мужской
Награды:
3000 сообщений!За постоянность! [500 дней на форуме]За лояльность! [+500 репутации]Настоящий игродел!Тру Админ :D1 место за игру: Energy Wars (Конкурс Золотые Руки)...
API: GameMaker Studio Standard
Сообщений: 3245



« Ответ #233 : Сентябрь 20, 2012, 12:59:30 »

1. Я уже пробовал, перед написанием поста - все работает.
2. Копировал часть кода выше и не поменял тип. Нужно было 0 поставить, я просто об этом забыл. (там даже в названии переменной опечатка).
Записан

ALT
Посетитель
**

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

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


« Ответ #234 : Октябрь 08, 2012, 20:56:44 »

Глупый вопрос наверно, да и инвентаря скорее всего косвенно касается, но все же спрошу.
При открытом инвентаре когда клацаешь мышкой по инвентарю иногда срабатывают события кнопок мыши у объектов находящихся под окном инвентаря. Можно ли этого как-то по простому избежать?
Если непонятно спросил - поясню.
Допустим есть комната. В ней объект дверь. По клику на двери перемещаемся в другую комнату. Открываем инвентарь. Окно инвентаря полностью перекрывает дверь. В инвентаре, допустим, есть зелье. По координатам на экране его местоположение примерно совпадает с координатами двери.  При попытке кликнуть на зелье, если не попасть точно в спрайт, происходит клик по двери и перемещение в другую комнату. Как избежать этого кроме как для всех объектов в зоне риска прописывать:
if (!obj_inv.visible)
{
...
Действия по клику мыши для предмета
...
}
Объектов и комнат много, так что прописывать много придется
Записан
AndrewVideoGames
Главный Модератор
*

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

Пол: Мужской
Награды:
За постоянность! [500 дней на форуме]За лояльность! [+750 репутации]5000 сообщений!За помощь новичкам!
API: GameMaker Studio Pro
Деятельность: А я кто? А я руководитель!
Сообщений: 7316



« Ответ #235 : Октябрь 08, 2012, 21:12:04 »

 В событии нажатия пиши так:
Код:
if !place_meeting(x,y,объект_окна_инвентаря)
{
//переход в другую комнату
}
Или диактивируй объекты при явлении инвентаря.
Записан
ALT
Посетитель
**

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

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


« Ответ #236 : Октябрь 08, 2012, 22:27:40 »

Вообще да. С деактивацией объектов как раз такое можно замутить. Спасибо. Что-то сразу об этом не подумал. Лови плюсик
Записан
Reylor
Пользователь
***

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

Пол: Мужской
API: Game Maker 8.0 Pro
Деятельность: Чём я занимаюсь в игрострое?... хм. да всем с чем приходится работать. Всего по немногу.
Сообщений: 90



« Ответ #237 : Октябрь 12, 2012, 18:41:45 »

А как сделать квестовые предметы, где то в этойтеме уже был подобный вопрос подскажите пожалуйста.
Немного перефразирую как сделать что бы разная переменная отвечала за щит и за меч. Что бы можно было надеть только один меч и один щит.
Записан
Dva_Kota
Гл. Администратор
*

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

Пол: Мужской
Награды:
3000 сообщений!За постоянность! [500 дней на форуме]За лояльность! [+500 репутации]Настоящий игродел!Тру Админ :D1 место за игру: Energy Wars (Конкурс Золотые Руки)...
API: GameMaker Studio Standard
Сообщений: 3245



« Ответ #238 : Октябрь 12, 2012, 21:14:30 »

1. Про квестовый предмет вопрос уже был ты хочешь чтобы кто-то за тебя полистал тему и нашел? А вообще все ответы на важные вопросы, которые могут повторяться, я выношу в первый пост темы. Если имеется ввиду предмет, который нельзя выбросить, то ответ на него под последним спойлером.

2. Сделай разные типы слотов для щита и меча (как для всех остальных предметов), убери ту часть кода которая отвечает за выбор руки.
Записан

ALT
Посетитель
**

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

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


« Ответ #239 : Октябрь 14, 2012, 18:46:04 »

А как сделать квестовые предметы, где то в этойтеме уже был подобный вопрос подскажите пожалуйста.
Так в шапке темы по моему был как раз ответ на этот вопрос
Записан
Страниц: 1 ... 14 15 [16] 17 18 ... 28   Вверх
  Печать  
 
Перейти в:  

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