Среда, 27 Ноября 2024, 19:34

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
фонарик в темной комнате
anna_masurowaДата: Суббота, 24 Января 2015, 13:12 | Сообщение # 1
был не раз
Сейчас нет на сайте
Привет, форумчане!
При создании квест-игры на Game Maker столкнулась вот с какой проблемой. Мне необходимо получить, чтобы при заходе в комнату она была полностью темная, виден лишь инвентарь и в нем фонарик. Когда из инвентаря берешь этот фонарь, он начинает освещать части комнаты. В интернете было много примеров подобных, на основе одного из них и был сделан пример, прикрепленный ниже, но в нем реализовано не до конца. Не получается сделать так,чтобы эффект фонаря получался только после того,как я взяла предмет из инвентаря... Помогите пожалуйста разобраться. Заранее большое спасибо!
P.s. Фонарь вне инвентаря просто для примера. Щелкните по нему,чтобы он перенесся в инвентарь.

А вот и сам пример:
http://rghost.ru/60526729


Всегда надо познавать что-то новое

Сообщение отредактировал anna_masurowa - Суббота, 24 Января 2015, 13:13
Raven84Дата: Суббота, 24 Января 2015, 14:29 | Сообщение # 2
старожил
Сейчас нет на сайте
Ну там делов-то. smile В объекте object0 в событии создания Create дописываем f=0.
А в событии Step код немного меняем на такой:
Код
surface_set_target(s1)
draw_clear(c_black)
if f=1 {
draw_set_blend_mode(bm_add)
draw_sprite_ext(sprite0,-1,mouse_x,mouse_y,1,1,0,c_white,1)
draw_set_blend_mode(bm_normal)
}
surface_reset_target()


Вот и все дела! Теперь комната просто черная. Если вам нужно "включить" фонарик то просто поменяйте переменную на f=1.

Добавлено (24 января 2015, 14:29)
---------------------------------------------
Если честно, то я остальной код особо не смотрел, так только мельком. И мне показалось что все слишком громоздко. По моему все это можно было гораздо проще и короче реализовать. Но это уже ваши дела. По фонарику надеюсь вам помог. Если что-то будет не понятно еще-спрашивайте.


Super Knight Story (в разработке)
Idolzzz - игра доступна в Steam и Play Market
Oliver's Adventures in the Fairyland


Сообщение отредактировал Raven84 - Суббота, 24 Января 2015, 16:17
anna_masurowaДата: Суббота, 24 Января 2015, 17:23 | Сообщение # 3
был не раз
Сейчас нет на сайте
Raven84, понимаете, тут основная проблема в том, как бы вытащить объект из инвентаря и на него нацепить еще и освещение.
Комнату можно сделать полностью темной просто не выполняя действие Step...


Всегда надо познавать что-то новое
Raven84Дата: Суббота, 24 Января 2015, 18:15 | Сообщение # 4
старожил
Сейчас нет на сайте
anna_masurowa, Не совсем понимаю, что именно вам нужно. Вы писали, что
Цитата
Не получается сделать так,чтобы эффект фонаря получался только после того,как я взяла предмет из инвентаря...

Так я же вам дал часть решения. Тут сразу возникает вопрос на сколько хорошо вы знакомы с Game Maker и с GML в частности. Если вы вообще с ними не знакомы, то всю игру за вас я конечно не возьмусь переписывать и вам нужно будет подучить основы хотя бы, но если знакомы, то мой код должен помочь. Алгоритм очень прост. У вас в инвентаре лежит лампа. С объектом освещения для начала делаем то, что я описал выше.
Потом делаем проверку такого плана, что если курсор наведен на лампу в инвентаре и нажата левая клавиша мыши, то мы в объекте object0 меняем переменную f на 1. Кодом это будет выглядеть как-то так:
Код
with(object0) {f=1}

Я вам описал сам алгоритм, порядок действий. А вообще вариантов исполнения масса, но как уже сказал нужно знать встроенный язык GML.
P.S. Вопрос: весь тот код, что есть в примере написан вами или тоже взят откуда-то ?

Добавлено (24 января 2015, 18:07)
---------------------------------------------
Цитата
Комнату можно сделать полностью темной просто не выполняя действие Step

Согласен, но если вы потом захотите все таки включить фонарик? smile Я просто ввел переменную f, которая его включает при 1 и выключает при 0. Как ей распоряжаться, думал догадаетесь уже.

Добавлено (24 января 2015, 18:15)
---------------------------------------------
Еще вопрос: вам нужно, чтобы когда вы брали фонарь из инвентаря, то он летал за курсором мыши вместе с освещением или чтобы просто только свет перемещался как в данном примере?


Super Knight Story (в разработке)
Idolzzz - игра доступна в Steam и Play Market
Oliver's Adventures in the Fairyland


Сообщение отредактировал Raven84 - Суббота, 24 Января 2015, 18:09
anna_masurowaДата: Суббота, 24 Января 2015, 18:20 | Сообщение # 5
был не раз
Сейчас нет на сайте
Raven84, с GM работаю всего пару месяцев. Код для инвентаря брали из примера и частично модифицировали, по фонарику так же=)

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

Касательно последнего вопроса. да, фонарь должен витать вместе с освещением.

И спасибо за пояснение,будем дальше осваивать GM и разбираться.

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


Всегда надо познавать что-то новое
Raven84Дата: Суббота, 24 Января 2015, 18:31 | Сообщение # 6
старожил
Сейчас нет на сайте
anna_masurowa, Ну я бы конечно помог, но ваш код это нагромаждение символов. smile Не охота в нем копаться. Но как уже сказал- нужно найти место в коде, где вы подбираете фонарь из инвентаря и в этот момент менять переменную f на 1 или 0. К примеру, чтобы понять, что код работает, я долго копаться в коде и вникать в него не стал. Нашел просто место где зажимается клавиша мыши и отпускается и туда встроил свой код. Все работает. Можете сами попробовать. В объекте obj_inv в событии Left Pressed добавьте такую строчку кода в начале перед всем кодом:
Код
with(object0) {f=1}

А в событии Glob Left Released тоже в начале такую строчку:
Код
with(object0) {f=0}

Далее пишем в объекте object0 то что я вам выше указывал.
Теперь войдите в игру. Берети фонарь и таскайте его по экрану. У вас будет свет. Когда отпустите клавишу мыши, то света не будет.

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

Тут в событии зажатия кнопки мыши (Left Pressed) нужно добавить еще проверку, что мы берем именно фонарь.Это не сложно, но нужно в коде копаться. smile


Super Knight Story (в разработке)
Idolzzz - игра доступна в Steam и Play Market
Oliver's Adventures in the Fairyland
anna_masurowaДата: Суббота, 24 Января 2015, 18:45 | Сообщение # 7
был не раз
Сейчас нет на сайте
Raven84, все равно спасибо=)) Будем разбираться дальше во всем этом "нагромаждении символов".

Всегда надо познавать что-то новое
Raven84Дата: Суббота, 24 Января 2015, 18:50 | Сообщение # 8
старожил
Сейчас нет на сайте
anna_masurowa, Сейчас немного углубился в код и решил доделать начатое. Предоставить так сказать уже вам готовое решение. Но покопавшись в коде, я понял, что делать этого не буду! biggrin
Там столько всего лишнего!!! Вы попробуйте к примеру положить лампу в инвентарь, потом зажать клавишу Shift и вытянуть лампу из инвентаря (зажатием левой кнопки мыши как обычно). Правильно! Выдает ошибку, так как у нас нет объекта obj_hero или как его там. А в коде это все прописано. Там очень много лишнего!
Плюс ко всему кнопочка "И" не закрывает инвентарь, а просто его не рисует. Вы нажмите на нее. Когда инвентарь скроется, то попробуйте вытянуть что-нибудь из инвентаря. И увидите, что из пустого места будет появлятся свет ну или просто доставаться предмету. Т.е. инвентарь как бы есть, но его не видно. smile
Короче много-много лишнего и не доработанного. Так что мой совет: изучайте GML и создавайте все с нуля. А этот пример взят вообще для платформера или RPG с участием на экране главного героя и т.д.
По этому в коде копаться не стал. Проще и быстрее с нуля написать. biggrin
Удачи вам с игрой!


Super Knight Story (в разработке)
Idolzzz - игра доступна в Steam и Play Market
Oliver's Adventures in the Fairyland


Сообщение отредактировал Raven84 - Суббота, 24 Января 2015, 18:51
anna_masurowaДата: Воскресенье, 25 Января 2015, 15:05 | Сообщение # 9
был не раз
Сейчас нет на сайте
Raven84, еще один маленький вопрос. С освещением и самим инвентарем мы разобрались, теперь вот возник вопрос такой. Мы когда этот фонарь отпускаем и ставим на определенную область (думаем ее сделать просто прозрачным объектом, на него фонарь ставится. Если же например фонарь отпустили не на этот объект,он возвращается в инвентарь), то черное затемнение убирается и меняется фон.
Пробовали сделать это и через обычные действия, т.е когда над этим объектом отпускается левая кнопка мыши,то рисуется новый фон или кодом draw_background(background7,0,0).
Ни один из вариантов почему-то не сработал, хотя вроде бы все логично. Не подскажете, получится ли разобраться с такими вариантами или искать другой?

P.S. Это последний вопрос к вам=)


Всегда надо познавать что-то новое
Raven84Дата: Воскресенье, 25 Января 2015, 15:22 | Сообщение # 10
старожил
Сейчас нет на сайте
anna_masurowa, Опять не совсем понял вас. smile Вам нужно когда вы ставите лампу на определенную область, чтобы все черное полотно с экрана просто удалилось? Если так, то тут все опять же очень просто. В момент, когда вы поставили лампу на эту самую прозрачную область, то просто удаляйте объект с этим полотном. object0 вроде бы он назывался. Т.е. кодом это будет выглядеть так:
Код
with(object0) instance_destroy()

Т.е. именно этот код ставите в момент постановки лампы. Если я вас конечно правильно понял. Если нет, то спрашивайте еще. Мне не сложно отвечать. smile

Добавлено (25 января 2015, 15:22)
---------------------------------------------
А то, что вы фон меняете, то вы конечно все правильно думаю делаете и он на самом деле меняется. Просто вы его не видите,т.к. над ним это самое черное полотно, которое нужно убрать.
Дайте знать, если все получилось. smile


Super Knight Story (в разработке)
Idolzzz - игра доступна в Steam и Play Market
Oliver's Adventures in the Fairyland
anna_masurowaДата: Воскресенье, 25 Января 2015, 15:44 | Сообщение # 11
был не раз
Сейчас нет на сайте
Raven84, темноту убрали. Но фон все равно не меняется. На мой взгляд все логично, сначала убираем темноту, затем прорисовываем новый фон. Все это происходит в событии Glob Left Released объекта obj_inv, поскольку у нас именно идет взаимодействие ячейки инвентаря в котором находится определенный объект с другим объектом в комнате.
{with(object0) {f=0}
if inv_txt='Фонарь' {
if instance_position(mouse_x,mouse_y,probnik)
{with(object0) instance_destroy()
{draw_background(background22,0,0)}}


{
txt[inv_item_x,inv_item_y]=inv_txt;
instance_create(mouse_x,mouse_y,inv_name_obj);
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;}}


Всегда надо познавать что-то новое
Raven84Дата: Воскресенье, 25 Января 2015, 16:31 | Сообщение # 12
старожил
Сейчас нет на сайте
anna_masurowa, Ошибка скорее всего в том, что все события рисования должны быть прописаны в событии Draw, а не в событии Glob Left Released. Т.е. draw_background(background22,0,0) будет работать только в событии Draw. Тут тоже все поменять не мудрено. Думаю догадаетесь как.

Super Knight Story (в разработке)
Idolzzz - игра доступна в Steam и Play Market
Oliver's Adventures in the Fairyland
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг