Game Maker - создание игр | HellRoom Games
Декабрь 08, 2025, 09:58:36 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

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

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

Пол: Мужской
API: Game Maker 8.0 Pro
Сообщений: 214


« Ответ #195 : Июль 29, 2012, 09:32:21 »

При этом коде,спрайт шлема с самого начала игры тупо прилипнет к ГГ и всё, а мне нужно что бы именно spr_armor_01_player менялся в зависимости от направления.
А что мешает тебе, вместо проверки спрайта, проверять направление? Я написал тебе примерный код, самый простой.
Вот другой вариант. Cоздай переменную у героя, и меняй ее в зависимости от нажатой клавиши (Влево- dir=0, Вправо- dir=1).
А в рисовании вместо image_index(кадр) подставляешь эту переменную. draw_sprite(s_helmet,dir,x,y);


Записан
Reylor
Пользователь
***

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

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



« Ответ #196 : Июль 29, 2012, 11:12:38 »

Зачем создавать переменные, если всё уже давно прописанно. Вот здесь я хочу переписать:
act_on = '
obj_hero.armor += 2;
obj_hero.s_helmet = spr_armor_01_player';
act_off = '
obj_hero.armor -= 2;
obj_hero.s_helmet = spr_no_spr;
';
Записан
Dva_Kota
Гл. Администратор
*

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

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



« Ответ #197 : Июль 30, 2012, 17:41:18 »

Sanek94 правильный код написал, нечего на него наезжать. Его, конечно, можно немного усовершенствовать, но в целом он работает как нужно.
В Draw у игрока есть такой код:
Код:
draw_sprite(sprite_index,-1,x,y);//Рисуем игрока
draw_sprite(s_armor,-1,x,y);//Рисуем броню
draw_sprite(s_helmet,-1,x,y);//Рисуем шлем

Замени третью строку на то что предлагает Sanek94. То что в условии if зависит от того как ты определяешь в какую сторону повернут ГГ, например если это смена спрайтов, то код именно как у него, а если отражением спрайта то
Код:
if (image_xscale)
{
draw_sprite(s_armor,нужный номер кадра,x,y);//Рисуем броню
}
else
{
draw_sprite(s_armor,нужный номер кадра,x,y);//Рисуем броню
}


Добавлено: Июль 30, 2012, 17:53:17
Может быть, я не совсем правильно объяснил. Я забыл что в примере для отображения на игроке используется другой спрайт, не тот который отображается в инвентаре. Но тут все то же самое, нужно сделать два кадра у спрайта который отображается на игроке: один когда игрок смотрит вправо, второй - когда игрок смотрит влево. В остальном все то же самое.
Записан

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

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

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


« Ответ #198 : Август 08, 2012, 02:11:11 »

А как сделать перетаскивание инвентаря за Title, а не за ячейки? Ведь вещи мешают перетаскиванию.

Инвентарь.png
Пример инвентаря
* Инвентарь.png (7.37 Кб, 432x447 - просмотрено 883 раз.)
Записан
Dva_Kota
Гл. Администратор
*

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

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



« Ответ #199 : Август 09, 2012, 12:51:18 »

Добавить в событие нажатия правой клавиши мыши, в самое начало, еще одну проверку "Если курсор находится в верхней части окна инвентаря", примерно так:
Код:
if (mouse_y < y+20 and mouse_y > y and mouse_x < x+200 and mouse_x > x)
    {
    if (!position_meeting(mouse_x,mouse_y,obj_inv_obm_2))
        {
        inv_move = true;
        m_x = mouse_x - x;
        m_y = mouse_y - y;
        }
    }

Это код для твоей картинки, т.е. перетаскиваем за заголовок, заголовок на всю ширину окна инвентаря , заголовок начинается с верхней части инвентаря и высота его 20, ширина 200 (числа взыл просто так, 200 должно быть равно ширине окна инвентаря).
Но, как я понимаю, заголовок не является частью инвентаря (у меня в примере заголовка нет), а просто рисуется. Тогда события нажатия клавиши не сработает и нежно будет заменить его на глобальное событие нажатия клавиши мыши.
Записан

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

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

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


« Ответ #200 : Август 11, 2012, 12:49:55 »

Не получилось. Почему-то перетаскивание происходит в этом районе (см. влож.). А можно ли сделать перетаскивание по спрайту spr_inv_back ?

134.png
Пример инвентаря
* 134.png (4.23 Кб, 176x150 - просмотрено 893 раз.)
Записан
Dva_Kota
Гл. Администратор
*

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

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



« Ответ #201 : Август 13, 2012, 17:13:58 »

Но, как я понимаю, заголовок не является частью инвентаря (у меня в примере заголовка нет), а просто рисуется. Тогда события нажатия клавиши не сработает и нежно будет заменить его на глобальное событие нажатия клавиши мыши.

Код:
if (mouse_y < y+20 and mouse_y > y and mouse_x < x+200 and mouse_x > x)
заменить на
Код:
if (mouse_y < y and mouse_y > y-20 and mouse_x < x+200 and mouse_x > x)

(Числа сам подбери, можно нарисовать еще один спрайт - спрайт заголовка, потом рисовать его отдельно)
Записан

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

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

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


« Ответ #202 : Август 14, 2012, 00:07:31 »

Dva_Kota, спасибо тебе!
Записан
Reylor
Пользователь
***

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

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



« Ответ #203 : Август 17, 2012, 19:23:56 »

Dva_Kota но если использовать твой код то на ГГ с самого начала игры будет надет этот спрайт!
Записан
Dva_Kota
Гл. Администратор
*

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

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



« Ответ #204 : Август 17, 2012, 22:02:51 »

Reylor, ты пример смотрел? В сообщении #197 написан код, который сейчас в Draw. s_armor это не спрайт, а переменная, в которую записывается индекес спрайта брони. Если брони на игроке нет, то в эту переменную записывается индекс пустого (прозрачного) спрайта и броня не отображается. Аналогично и переменная s_helmet.
Записан

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

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

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



« Ответ #205 : Август 19, 2012, 17:45:18 »

Ну вот сделал с твоим кодом, что не так? (s_armor это не спрайт - знаю, просто не так выразился)

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

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

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



« Ответ #206 : Август 20, 2012, 09:29:44 »

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

В Step у игрока замени код на это:

Код:
if keyboard_check (ord('A')) && place_free (x-hero_speed,y)
{
x-= hero_speed;
image_xscale = -1;
}
if keyboard_check (ord('D')) && place_free (x+hero_speed,y)
{
x+=hero_speed
image_xscale = 1;
}
if keyboard_check (ord('W')) && place_free (x,y-hero_speed)
y-= hero_speed;
if keyboard_check (ord('S')) && place_free (x,y+hero_speed)
y+= hero_speed;

Если тебе нужно сделать поворот игрока не отражением спрайта, а заменой, то в событии рисования, там где выбирается какой кадр брони рисовать, нужно делать проверку не по отражению спрайта игрока, а по спрайту игрока.
Записан

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

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

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



« Ответ #207 : Август 20, 2012, 15:53:09 »

О, благодарю.  Плюс
Записан
wargamen
Участник
****

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

Пол: Мужской
API: Game Maker 6.1
Деятельность: Java, GMS, pixelart
Сообщений: 155

Java, i love you:3


« Ответ #208 : Август 22, 2012, 17:12:43 »

мм, у меня возник вопросик, как можно в этом инвентаре реализовать две вещи:
1.Чтобы при нажатии в одном инвентаре, в другом находился какойто итем и уничтожалось какое то количество из них
2.Вопрос посложнее, вот допустим у меня есть обьект - итем, когда он создается у него случайно генерируется какойто параметр, как можно это сделать только при первом создании, тоесть например если выкинешь из инвентаря и снова подберёш - у него были такие же параметры
Записан

"Если ты играешь в престолы, ты должен либо умереть, либо победить! Среднего не бывает!". Песнь льда и пламени.

"Закон бесконечной всемирной извращенности или закон Феликса." Когда сисадмины правили Землей.
Sanek94
Участник
****

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

Пол: Мужской
API: Game Maker 8.0 Pro
Сообщений: 214


« Ответ #209 : Август 22, 2012, 18:41:54 »

мм, у меня возник вопросик, как можно в этом инвентаре реализовать две вещи:
1.Чтобы при нажатии в одном инвентаре, в другом находился какойто итем и уничтожалось какое то количество из них
2.Вопрос посложнее, вот допустим у меня есть обьект - итем, когда он создается у него случайно генерируется какойто параметр, как можно это сделать только при первом создании, тоесть например если выкинешь из инвентаря и снова подберёш - у него были такие же параметры
1. Не понял вопроса.
2. Нужно записывать эти параметры в ячейку инвентаря. А в событии выкидывания делаем следующее.
Код:
predmet=instance_create(x,y,object) // создаем предмет, и записываем его id в переменную predmet
А дальше присваиваешь к этой переменной параметры, которые ты записал в ячейку инвентаря.
Записан
Страниц: 1 ... 12 13 [14] 15 16 ... 28   Вверх
  Печать  
 
Перейти в:  

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