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

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

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

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



« Ответ #270 : Декабрь 29, 2012, 02:04:19 »

Reylor, ну, вроде бы, так и нужно...

Vulcano
1. Да.

2. Лучше оставить его в событии Draw инвентаря. Переменную тоже задавай в инвентаре (в Create) а изменяй ее значение при нажатии стрелок.

3. Скорее всего не правильно ограничил. Размеры инвентаря задаются в событии Create инвентаря, там и нужно менять размеры инвентаря.

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

Строку
Код:
draw_sprite(spr[inv_stolb,slot_y],image_index,x+inv_stolb*slot_width_x,y+slot_y*slot_height_y);
Нужно изменить так:
Код:
draw_sprite(spr[inv_stolb,slot_y],image_index,x,y+slot_y*slot_height_y);

Строку
Код:
draw_text_ext(x+inv_stolb*slot_width_x+sprite_get_width(spr[inv_stolb,slot_y]),y+slot_y*slot_height_y,txt[klick_x,klick_y],14,100);
Изменить так:
Код:
draw_text_ext(x+sprite_get_width(spr[inv_stolb,slot_y]),y+slot_y*slot_height_y,txt[klick_x,klick_y],14,100);

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

Reylor
Пользователь
***

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

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



« Ответ #271 : Декабрь 29, 2012, 18:36:09 »

Dva_Kota, так я и говорю, прописываю вроде бы правильно. А рисует спрайт в левом верхнем углу.
Записан
Dva_Kota
Гл. Администратор
*

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

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



« Ответ #272 : Декабрь 30, 2012, 01:43:31 »

это:
Код:
draw_sprite(spr_sword_red,0,x=obj_inv2,y=obj_inv2)//решил рисовать через draw_sprite

заменить на это:
Код:
draw_sprite(spr_sword_red,0,x.obj_inv2,y.obj_inv2)//решил рисовать через draw_sprite
или на это:
Код:
draw_sprite(spr_sword_red,0,x.obj_inv2+5,y.obj_inv2+5)//решил рисовать через draw_sprite
//вместо 5 подобрать число.

Или (если в Step или в Draw объект obj_inv2 не перемещается за видом) заменить x.obj_inv2 y.obj_inv2 и y.obj_inv2 на соответствующие координаты вида (view_xview, view_yview).
Записан

Vulcano
Новичок
*

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

API: Game Maker 8.0 Pro
Сообщений: 3


« Ответ #273 : Январь 03, 2013, 01:11:54 »

Я вернулся к тому, с чего начал. Я разобрался с некоторыми переменными и теперь весь массив рисуется в пределах одних координат. Т.о. получается, что все ячейки наслаиваются друг на друга и в конечном итоге отображаются те, что нарисованы последними.
Цикл отрисовки ячеек инвентаря теперь выглядит так:
Но как теперь в коде отразить зависимой между изменяемой переменной, которая изменяется в случае нажатия на определенную стрелочку, и видимостью определенной части инвентаря - я не знаю. Просто изменять глубину у каждой рисующейся части в зависимости от означенной ранее переменной. Так в цикле это сделать не получится. Здесь используется простой перебор и любое условие со значением true будет действовать на все части инвентаря, а не только на промежуток - все 5 ячеек inv_stolb=0. Если это как-то можно сделать, я весь во внимании. Ну или всю эту "несложную задачу" можно решить каким-то другим логическим способом... Для меня она уже не просто сложная, а гиперсложная. Прошу помощи и совета у людей более сведущих в этом вопросе.
Записан
Reylor
Пользователь
***

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

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



« Ответ #274 : Январь 04, 2013, 22:44:58 »

Ну вот и финальная версия крафта. У меня остался только один вопрос. Вот отрезок кода из Left Pressed;obj_inv;
   if (keyboard_check(vk_shift))//Если зажата клавиша Shift
{if (visible)
    {
    klick_x=floor((mouse_x-x)/slot_width_x);
    klick_y=floor((mouse_y-y)/slot_height_y);

    if (txt[klick_x,klick_y]!='')//елси в слоте, над которым сейчас находится курсор, что-то есть
        {
        switch (name_obj[klick_x,klick_y])//Выбираем в зависимости от названия предметак какое действие выполнить
            {
            case obj_sword:             //записываем все данные из этого слота в переменные для перетаскивания
                            inv_item_x=klick_x;
                            inv_item_y=klick_y;
                            inv_txt=txt[klick_x,klick_y];
                            inv_item=1;//item[klick_x,klick_y];
                            inv_spr=spr[klick_x,klick_y];
                            inv_max_number=max_number[klick_x,klick_y];
                            inv_name_obj=name_obj[klick_x,klick_y];
                        case obj_potion_health:             //записываем все данные из этого слота в переменные для перетаскивания
                            inv_item_x=klick_x;
                            inv_item_y=klick_y;
                            inv_txt=txt[klick_x,klick_y];
                            inv_item=1;//item[klick_x,klick_y];
                            inv_spr=spr[klick_x,klick_y];
                            inv_max_number=max_number[klick_x,klick_y];
                            inv_name_obj=name_obj[klick_x,klick_y];  

                            /*txt[klick_x,klick_y]='empty';/*помечаем эту ячейку "пусто", но в нее пока что ничего положить нельзя будет.
                                    Если переменная txt[] будет равна 'empty', то предмет в этой ячейке рисоваться не будет,
                                    хотя фактически он будет там находиться.*/
Меня немного смущает выделенный отрезок кода, что бы перемещать в инвентарь все предметы придётся добавлять для каждого предмета свой отрезок кода, но тогда код получиться совершенно не оптемизированн.
Сейчас в inv_3 можно скинуть лишь 2 предмета зелье здоровья и меч, а остальные при нажатии ПКМ + shift просто удаляются,а это ни есть хорошо. Хотелось бы сделать, что бы все предметы можно было кидать в inv_3 либо только отдельные предметы (на выбор), но, что бы не приходилось писать для каждого предмета такой код как выше. Крафт уже реализовал так что это последний вопрос по инвентарю. Если есть время посмотри пример.

Записан
Dva_Kota
Гл. Администратор
*

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

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



« Ответ #275 : Январь 06, 2013, 02:09:15 »

Vulcano
Нужно просто убрать первую строку
for (inv_stolb=0; inv_stolb<inv_height_y mod 5; inv_stolb+=1)
и задавать переменную inv_stolb, равную номеру нужного столбца

Reylor
Наверное, не самый лучший вариант, но у меня сейчас нет веремени придумывать что-то другое. Суть способа в следующем: не перемещаем предмет в инвентарь, а создаем под ногами игрока. Тогда, если предметы перемещаются в инвентарь при прикосновении к игроку, он сам туда переместится. Если нужно нажимать клавишу - попробуй эмитировать нажатие этой клавиши.
Для того чтобы то сделать достаточно заменить
Цитировать
switch (name_obj[klick_x,klick_y])//Выбираем в зависимости от названия предметак какое действие выполнить
(и весь код который ты выделил)
на одну строку:

Код:
instance_create(игрок.x,игрок.y,name_obj[klick_x,klick_y])
Записан

Reylor
Пользователь
***

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

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



« Ответ #276 : Январь 06, 2013, 14:13:23 »

Dva_Kota,сделал немного по-другому (циклы просто в коде перепутал), но все равно спасибо. Крафт довёл до ума. Добавил ещё один рецепт меч+зелье маны = меч маны. (так от делать нечего).
Пример крафта выложу ниже, может кому пригодиться.
P.S.
Если кто будет использовать пример.
Добавление "рецептов" думаю не составит труда т.к использованы не сложные коды. Да и комментарии там тоже присутствуют.

Добавлено: Январь 10, 2013, 12:15:07
Ах да, и ешё Dva_Kota как бы мне в инвентаре экипировке переставить слоты для одежды/оружия.
Сам переставлял, но они всё равно ложатся не на место.
Может что пропустил. Хотелось бы сделать как на картинке.
P.S.
И ещё хотелось бы убрать переменные для правой/левой рук. И оставить одну т.к. меч один. Но на мои попытки убрать одну из "рук" Выскакивала ошибка компиляции.

* РџСЂРёРјРµСЂ_инвентаря_Dva_Kota_Bodimir_Alexis_1.0078_move_inv.gmk (93.2 Кб - загружено 766 раз.)

* spr_inv_equip_back.png (6.36 Кб, 108x108 - просмотрено 2151 раз.)
« Последнее редактирование: Январь 10, 2013, 12:15:08 от Reylor » Записан
Hadarak
Активный участник
*****

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

Пол: Мужской
Награды:
За постоянность! [10 дней на форуме]За отличную игру Burn it down!
API: GameMaker Studio 2
Сообщений: 372



« Ответ #277 : Январь 10, 2013, 12:40:55 »

Во сделал как нужно. Посмотри изменения в obj_inv_weapon create, там я поменял типы предметов. И obj_item_base, там сменил n_x_(1,2) у некоторых предметов (меча, перчаток, амулетов)

Записан

Reylor
Пользователь
***

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

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



« Ответ #278 : Январь 10, 2013, 15:51:44 »

Hadarak, делал как ты. Но проблема в том, что после крафта предмета (К примеру, кровавый меч). Предметы ложатся как в стандартном spr_inv_equip_back. В чем причина, не пойму.
Записан
Hadarak
Активный участник
*****

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

Пол: Мужской
Награды:
За постоянность! [10 дней на форуме]За отличную игру Burn it down!
API: GameMaker Studio 2
Сообщений: 372



« Ответ #279 : Январь 10, 2013, 16:06:38 »

Вот ещё немного изменил пример, а то если активировать меч из инвентаря он одевался во вторую руку тоже.
Вообщем тебе во всех switch с n_x_1, n_y_1 нужно заменить:
Код:
case 1:...break;
case 2:...break;
case n:...break;
на
Исправил бы сам, но не знаю как и где происходит крафт.


Добавлено: Январь 10, 2013, 16:08:00
А хотя я вроде всё правильно сделал, ты же имел ввиду после крафта ты активируешь в инвентаре, а потом уже встаёт не на то место.

Записан

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

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

API: Game Maker 8.0 Pro
Сообщений: 24


« Ответ #280 : Январь 21, 2013, 16:51:02 »

Скажите можно ли убрать цифры количества предметов в инвентаре?
И ещё как сделать чтобы при отпускании мыши (в которой объект из инвентаря) вне инвентаря объект возвращался в инвентарь , а если например над объектом stacan (определённого предмета) выполнялось действие?
Записан
Dva_Kota
Гл. Администратор
*

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

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



« Ответ #281 : Январь 22, 2013, 01:45:14 »

1. Числа модно отключит в событии Draw. Нужно убрать строку, с функцией draw_text() (ту, которая отображает значение item[])

2. В событии "Глобальное отпускание клавиши", в самом конце, есть такая часть кода:
Код: (Код1)
with (instance_create(obj_hero.x-16,obj_hero.y+16,inv_name_obj))
                {
                number = other.inv_item;
                }

            inv_txt='';//показываем что больше ничего не перетаскиваем

            txt[inv_item_x,inv_item_y]='';//очищаем переменные для ячейки из которой перетаскивали (удаляем предмет из инвентаря)
            item[inv_item_x,inv_item_y]=0;
            max_number[inv_item_x,inv_item_y]=0;
замени ее на это:
Код: (Код2)
with (other)
                        {
                        txt[inv_item_x,inv_item_y]=inv_txt;//записываем в массив имя

                        inv_txt='';//показываем что больше ничего не перетаскиваем
                        }
Тогда предметы не будут выбрасываться.

Выше (в том же событии) есть проверка ячейки, над которой находится выбрасываемый предмет (смотри комментарии в коде). Где сравнивается перетаскиваемый предмет с предметом, который в ячейке добавь еще свою проверку (если в ячейке предмет stacan - выполнять действие).
Записан

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

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

API: Game Maker 8.0 Pro
Сообщений: 24


« Ответ #282 : Январь 22, 2013, 16:31:17 »

1. Числа модно отключит в событии Draw. Нужно убрать строку, с функцией draw_text() (ту, которая отображает значение item[])

2. В событии "Глобальное отпускание клавиши", в самом конце, есть такая часть кода:
Код: (Код1)
with (instance_create(obj_hero.x-16,obj_hero.y+16,inv_name_obj))
                {
                number = other.inv_item;
                }

            inv_txt='';//показываем что больше ничего не перетаскиваем

            txt[inv_item_x,inv_item_y]='';//очищаем переменные для ячейки из которой перетаскивали (удаляем предмет из инвентаря)
            item[inv_item_x,inv_item_y]=0;
            max_number[inv_item_x,inv_item_y]=0;
замени ее на это:
Код: (Код2)
with (other)
                        {
                        txt[inv_item_x,inv_item_y]=inv_txt;//записываем в массив имя

                        inv_txt='';//показываем что больше ничего не перетаскиваем
                        }
Тогда предметы не будут выбрасываться.

Выше (в том же событии) есть проверка ячейки, над которой находится выбрасываемый предмет (смотри комментарии в коде). Где сравнивается перетаскиваемый предмет с предметом, который в ячейке добавь еще свою проверку (если в ячейке предмет stacan - выполнять действие).



А если Объект стакан(stacan) не в инвентаре?
Записан
Dva_Kota
Гл. Администратор
*

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

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



« Ответ #283 : Январь 22, 2013, 17:03:08 »

Если не в ячейке, тогда нужно делать по-другому:
перед кодом
Код:
with (other)
                        {
                        txt[inv_item_x,inv_item_y]=inv_txt;//записываем в массив имя

                        inv_txt='';//показываем что больше ничего не перетаскиваем
                        }
(который ты вставил)
нужно добавить проверку "находится ли под курсором объект "Стакан". Если true - выполнять действие, иначе - выполнять код выше.
Записан

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

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

API: Game Maker 8.0 Pro
Сообщений: 24


« Ответ #284 : Январь 22, 2013, 17:37:30 »

Если не в ячейке, тогда нужно делать по-другому:
перед кодом
Код:
with (other)
                        {
                        txt[inv_item_x,inv_item_y]=inv_txt;//записываем в массив имя

                        inv_txt='';//показываем что больше ничего не перетаскиваем
                        }
(который ты вставил)
нужно добавить проверку "находится ли под курсором объект "Стакан". Если true - выполнять действие, иначе - выполнять код выше.

Спасибо!!!!!  А можно ли чтобы если определённый предмет отпущен над стаканом(stacan) то выполнялось действие, а если другой предмет не выполнялось?
Записан
Страниц: 1 ... 17 18 [19] 20 21 ... 28   Вверх
  Печать  
 
Перейти в:  

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