фонарик в темной комнате
| |
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 |
старожил
Сейчас нет на сайте
| Ну там делов-то. В объекте 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. Кодом это будет выглядеть как-то так: Я вам описал сам алгоритм, порядок действий. А вообще вариантов исполнения масса, но как уже сказал нужно знать встроенный язык GML. P.S. Вопрос: весь тот код, что есть в примере написан вами или тоже взят откуда-то ?
Добавлено (24 января 2015, 18:07) --------------------------------------------- Цитата Комнату можно сделать полностью темной просто не выполняя действие Step Согласен, но если вы потом захотите все таки включить фонарик? Я просто ввел переменную 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 и разбираться.
Взаимодействие с объектами инвентаря - это у нас одна из заключительных проблем, с остальным мы в принципе справились, так что к счастью со всей игрой вам помогать не приедтся
Всегда надо познавать что-то новое
|
|
| |
Raven84 | Дата: Суббота, 24 Января 2015, 18:31 | Сообщение # 6 |
старожил
Сейчас нет на сайте
| anna_masurowa, Ну я бы конечно помог, но ваш код это нагромаждение символов. Не охота в нем копаться. Но как уже сказал- нужно найти место в коде, где вы подбираете фонарь из инвентаря и в этот момент менять переменную f на 1 или 0. К примеру, чтобы понять, что код работает, я долго копаться в коде и вникать в него не стал. Нашел просто место где зажимается клавиша мыши и отпускается и туда встроил свой код. Все работает. Можете сами попробовать. В объекте obj_inv в событии Left Pressed добавьте такую строчку кода в начале перед всем кодом: А в событии Glob Left Released тоже в начале такую строчку: Далее пишем в объекте object0 то что я вам выше указывал. Теперь войдите в игру. Берети фонарь и таскайте его по экрану. У вас будет свет. Когда отпустите клавишу мыши, то света не будет.
Правда как вы можете заметить проблема в том, что свет будет при доставании любого объекта из инвентаря. Наведите на пустую ячейку,зажмите клавишу мыши и потяните вверх и свет так же будет светить. Хотя вы взяли не фонарь.
Тут в событии зажатия кнопки мыши (Left Pressed) нужно добавить еще проверку, что мы берем именно фонарь.Это не сложно, но нужно в коде копаться.
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, Сейчас немного углубился в код и решил доделать начатое. Предоставить так сказать уже вам готовое решение. Но покопавшись в коде, я понял, что делать этого не буду! Там столько всего лишнего!!! Вы попробуйте к примеру положить лампу в инвентарь, потом зажать клавишу Shift и вытянуть лампу из инвентаря (зажатием левой кнопки мыши как обычно). Правильно! Выдает ошибку, так как у нас нет объекта obj_hero или как его там. А в коде это все прописано. Там очень много лишнего! Плюс ко всему кнопочка "И" не закрывает инвентарь, а просто его не рисует. Вы нажмите на нее. Когда инвентарь скроется, то попробуйте вытянуть что-нибудь из инвентаря. И увидите, что из пустого места будет появлятся свет ну или просто доставаться предмету. Т.е. инвентарь как бы есть, но его не видно. Короче много-много лишнего и не доработанного. Так что мой совет: изучайте GML и создавайте все с нуля. А этот пример взят вообще для платформера или RPG с участием на экране главного героя и т.д. По этому в коде копаться не стал. Проще и быстрее с нуля написать. Удачи вам с игрой!
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, Опять не совсем понял вас. Вам нужно когда вы ставите лампу на определенную область, чтобы все черное полотно с экрана просто удалилось? Если так, то тут все опять же очень просто. В момент, когда вы поставили лампу на эту самую прозрачную область, то просто удаляйте объект с этим полотном. object0 вроде бы он назывался. Т.е. кодом это будет выглядеть так: Код with(object0) instance_destroy() Т.е. именно этот код ставите в момент постановки лампы. Если я вас конечно правильно понял. Если нет, то спрашивайте еще. Мне не сложно отвечать. Добавлено (25 января 2015, 15:22) --------------------------------------------- А то, что вы фон меняете, то вы конечно все правильно думаю делаете и он на самом деле меняется. Просто вы его не видите,т.к. над ним это самое черное полотно, которое нужно убрать. Дайте знать, если все получилось.
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
|
|
| |
|