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

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

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

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



« Ответ #255 : Декабрь 13, 2012, 18:53:51 »

Везде, где идет вычисление координат ячеек через цикл добавлять ширину/высоту расстояния между ячейками. По умолчанию расстояние между ячейками равно 0.
Записан

RussFakt
Новичок
*

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

Пол: Мужской
API: Game Maker 8.0 Pro
Деятельность: Дизайнер, программист.
Сообщений: 6


« Ответ #256 : Декабрь 16, 2012, 19:37:21 »

Как сделать, чтобы при старте игры инвентарь был закрыт?
Записан
Hadarak
Активный участник
*****

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

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



« Ответ #257 : Декабрь 16, 2012, 20:27:55 »

obj_inv Create
Код:
visible = false;
Записан

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

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

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



« Ответ #258 : Декабрь 21, 2012, 11:23:40 »

Я сделал несколько инвентарей (с помощью двойного инвентаря, как я раньше не додумался Хм...) ну так вот, если мы подбираем obj_shoes_01, переносим ботинки в основной инвентарь. Зажимаем shift жмём ПКМ ботинки переносятся во inv_3 опять жмём ПКМ на ботинках, они переносятся в inv_2. Опять ПКМ и ботинки переносятся в obj_inv.
У меня есть вопрос почему я не могу ложить все предметы в inv_3,2 с помощью obj_item_base.
Вот отрезок кода из Left Pressed inv_3  такойже и в inv_2.


        switch (name_obj[klick_x,klick_y])//Выбираем в зависимости от названия предметак какое действие выполнить
            {
            case obj_shoes_01:             //записываем все данные из этого слота в переменные для перетаскивания
                            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];
Если я ставлю вместо obj_shoes_01, obj_item_base то предметы вообще не ложатся в inv_2,3.
В чем проблемма?

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

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

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



« Ответ #259 : Декабрь 21, 2012, 15:53:56 »

obj_item_base - родитель для всех предметов-объектов которые присутствуют в комнате (не в инвентаре!). Он используется для проверки столкновения с предметами в комнате - нужен для того чтобы при добавлении новых предметов не создавать еще одно событие столкновения - весь код перемещения предмета (для всех предметов) написан в одном событии.
Записан

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

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

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



« Ответ #260 : Декабрь 26, 2012, 20:04:13 »

Да, я понял. Как то глупо получилось, ну да ладно.
Как бы мне осуществить систему крафта не поможешь. Пока, что крафт реализован как в начальном примере, в inv_3 кидаем 2 предмета (в моём случае Лечебное зелье + Меч = Кровавый меч) как сделать крафт как в моей прошлой нарисовке? Не могу сделать что бы после проверки на предметы в inv_3 (Зелье + меч) в inv_2 создавался предмет (кровавый меч). Как бы это реализовать?

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

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

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



« Ответ #261 : Декабрь 27, 2012, 11:12:28 »

Я бы посоветовал сделать немного по другому:
В Draw проверять какие предметы в inv_3, в соответствии с этим рисовать в inv_2 спрайт создаваемого предмета. Проверять то же самое при клике мышкой по inv_2, при этом удаляя все предметы из inv_3 и создавая предмет (кровавый меч) сразу в основном инвентаре. Так будет на много проще. Думаю что проверить какие предметы находятся в inv_3 не составит труда, т.к. в первом сообщении темы описано как сделать такую проверку. Код очистки инвентаря там тоже есть.
Записан

UniversalCreator
Активный участник
*****

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

Пол: Мужской
Награды:
За постоянность! [10 дней на форуме]
API: Game Maker 8.0 Pro
Деятельность: Я занят!
Сообщений: 443



WWW
« Ответ #262 : Декабрь 27, 2012, 11:55:59 »

ух ты! прикольный инвентарь!
Мне обязательно пригодится
Записан
Reylor
Пользователь
***

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

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



« Ответ #263 : Декабрь 27, 2012, 21:39:38 »

Начал делать как ты сказал но спрайт кровавого меча рисует не там где надо как быть.
И ещё как сделать, что бы спрайт рисовался когда именно два предмета определенны. (меч, зелье)
Пытался сделать так
            {
            if (txt[slot_x,slot_y]='меч')//когда находим ячейку с таким же предметом
if (txt[slot_x,slot_y]='зелье')
                {
Но эффекта ноль как быть.

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

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

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



« Ответ #264 : Декабрь 27, 2012, 23:10:28 »

Так ты проверяешь наличие двух предметов в одной и той же ячейке.
Создай переменную, значение которой false.
Нужно сначала проверить все ячейки на наличие первого предмета. Как только найдешь первый предмет меняй значение этой переменной на true. затем проверяем переменную. Если она true - меняем ее значение на false и проверяем все ячейки на наличие второго предмета. Если находим второй предмет - меняем значение переменной на true. Если после поиска всех предметов значение переменной true - рисуем спрайт.

Приблизительный код:
Код:
a = false;

//поиск первого предмета
for (slot_y=0; slot_y<inv_height_y; slot_y+=1)
        {
        for (slot_x=0; slot_x<inv_width_x; slot_x+=1)
            {
            if (txt[slot_x,slot_y]='зелье')
                {
                     a = true;
                }
            }
        }
if (a)
        {
        a = false
        for (slot_y=0; slot_y<inv_height_y; slot_y+=1)
                {
                for (slot_x=0; slot_x<inv_width_x; slot_x+=1)
                    {
                    if (txt[slot_x,slot_y]='Меч')
                        {
                             a = true;
                        }
                    }
                }
}

if (a)
{
//Здесь рисуем спрайт
}

Разумеется, если много различных вариантов крафта то такой код не очень удобен. В примерах крафта, вроде бы, было описано как лучше это организовать.
Записан

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

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

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



« Ответ #265 : Декабрь 27, 2012, 23:59:26 »

С этим понятно, но почему я не могу задать собственные координаты спрайту.? Он рисуется как при координатах х=0 у=0
Записан
Vulcano
Новичок
*

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

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


« Ответ #266 : Декабрь 28, 2012, 00:08:18 »

Инвентарь отличный. Маленько переработал код, добавил кое-что свое и сделал всякие красивости в виде нарисованных спрайтов. Но наткнулся на камень, под который никак не затекает вода!
Как логически сообразить, что нужно для кода, при котором будут отображаться только части инвентаря. Поясню подробнее.

Есть инвентарь только из одной колонки. В нем 15 ячеек, но изначально рисуются только 5 (понятно, что в них отображаются взятые предметы, если они уже взяты). При нажатии кнопки, или области нарисованного спрайта (стрелка вправо), исчезают первые пять ячеек и на тех же позициях появляются следующие 5 (т.е. начиная с 5, т.к. массив хранит переменные с 0 - 1 ячейка и т.д., если я правильно понял ). Нажатие на стрелку влево, возвращает первые пять ячеек с предметами (начиная с 0-й). По этому принципу в инвентаре получается как бы 3 страницы, которые отображают разные адреса ячеек. Если видно какую-то одну страничку, то не видно остальные, или они вообще не прорисовываются.

Просто дичайшими затратами и так уставшего мозга после работы сидел вечерами больше недели. Все, что удалось выжать - страницы две не исполняющегося кода:

Сломал себе уже весь мозг. Не хватает у меня логического мышления, чтобы решить, скорее всего, пустяковую задачу. Элементы кода, что я приложил, возможно вообще бред. Я даже в этом ничуть не сомневаюсь. Подскажите, в каком направлении хотя бы соображать
Записан
Dva_Kota
Гл. Администратор
*

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

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



« Ответ #267 : Декабрь 28, 2012, 00:22:14 »

Reylor, а как именно задаются координаты рисующегося спрайта? (сейчас нет возможности посмотреть твой пример)

Vulcano, задача, вроде бы, не сложная. Наверное, нужно сделать так: Задаем переменную, которая показывает какой столбец сейчас активный. По умолчанию задаем ей значение 0. При нажатии стрелок увеличиваем/уменьшаем ее значение на 1 (не забываем поставить ограничение, чтобы значение переменной не получилось отрицательным или большим чем количество столбцов -1).

В коде (в Draw и в событиях нажатия клавиш мыши) убираем строки   for (slot_x=0; slot_x<inv_width_x; slot_x+=1) и slot_x в коде заменяем на нашу переменную (про которую я написал выше). Возможно (скорее всего), нужно будет еще изменить настройки маски инвентаря. Они задаются в событии Create (где-то в начале, там есть комментарии). Маска размером как одна ячейка растягивается по Х и У таким образом, чтобы она покрывала все ячейки - нужно убрать растягивание по Х, оставить только по У.

Записан

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

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

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



« Ответ #268 : Декабрь 28, 2012, 22:27:29 »

a = false;

//поиск первого предмета
for (slot_y=0; slot_y<inv_height_y; slot_y+=1)
        {
        for (slot_x=0; slot_x<inv_width_x; slot_x+=1)
            {
            if (txt[slot_x,slot_y]='зелье')
                {
                     a = true;
                }
            }
        }
if (a)
        {
        a = false
        for (slot_y=0; slot_y<inv_height_y; slot_y+=1)
                {
                for (slot_x=0; slot_x<inv_width_x; slot_x+=1)
                    {
                    if (txt[slot_x,slot_y]='Меч')
                        {
                             a = true;
                        }
                    }
                }
}

if (a)
{
draw_sprite(spr_sword_red,0,x=obj_inv2,y=obj_inv2)//решил рисовать через draw_sprite
}
Записан
Vulcano
Новичок
*

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

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


« Ответ #269 : Декабрь 28, 2012, 23:10:42 »

Сделал все так, как было подсказано.
Остается пара вопросов и как обычно незавершенный код.
1. slot_x стоило убрать из всех строк и заменить его новой переменной, определяющей столбец? Даже из массивов (spr[], txt[] и т.д.)
2. весь код отрисовки стоит оставить в draw объекта инвентаря, или можно перенести его в draw стрелок и отрисовывать нужные ячейки массивов в момент нажатия при изменении переменной (скорее можно и так и так, но у меня не получается).
3. я ограничил отрисовку ячеек инвентаря относительно размера, т.о. у меня получилось в каждой колонке он рисует только 5 ячеек - это вообще правильно, т.к. в неотрисованные ячейки просто не записываются взятые предметы. Я прекрасно понимаю, что взятый предмет сначала записывается в массив, а уже потом отрисовывается в определенной ячейке, но с такими ограничениями как у меня, вылазит ошибка:

Почему программа считает slot_y неизвестной? На мой взгляд потому, что следующая позиция массива просто не отрисована и отображаться спрайту следующего взятого предмета - негде. Как это исправить? Рисовать все сразу и делать ячейки массива невидимыми, это вообще может помочь или я опять что-то недопонимаю?
4. код draw теперь выглядит так:

Верно ли я понял ваши замечания, либо вконец все испортил и снова иду в неправильном направлении?

Вроде бы все, я правда, стараюсь, однако, как видите, получается плохо. Заранее спасибо за проявленное внимание, жду хоть каких-нибудь советов по теме.
Записан
Страниц: 1 ... 16 17 [18] 19 20 ... 28   Вверх
  Печать  
 
Перейти в:  

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