Результаты поиска
| |
Rean | Дата: Воскресенье, 04 Декабря 2016, 02:32 | Сообщение # 121 | Тема: Вопрос - Ответ (Game Maker) |
участник
Сейчас нет на сайте
| aedginvael, Цитата aedginvael ( ) Может у тебя есть чего почитать для обучения? К сожалению, всё что я могу порекомендовать - написано на английском. Самый полезный ресурс - это, безусловно, официальная документация. Редко бывает, когда кто-то может объяснить лучше создателя. Ещё, вроде как, есть какие-то книги по GM, но я не уверен переведены ли они на русский и есть ли подобная литература для актуальной версии студии. В любом случае, ковыряйте проекты, сами создавайте небольшие игры, задавайте вопросы, благо комьюнити здесь отзывчивое, в основном пытаются помочь Ну и конечно, потихоньку "грызите" официальный мануал. Хоть он и на английском, но лучше вряд ли кто-то расскажет. Остальное - это уже игровая логика, механика и соответствующие алгоритмы, которые в основном не зависят от среды разработки.
Цитата aedginvael ( ) но как взять координаты относительно окна - не нашел. Здесь, на странице мануала, есть картинка, которая примерно объясняет функции положения и размера окна. Стоит помнить, что отсчёт координат ведётся от верхнего левого угла. Соответственно, максимальный X в оконных координатах (правая граница окна) будет - window_get_width(), максимальный Y (нижняя граница окна) - window_get_height(). Если мы хотим отобразить что-то в DrawGUI, то нам необходимо уложиться в эти границы (от 0 до window_get_width() для X, и от 0 до window_get_height() для Y).
ProsstoBRO, отлично
|
|
| |
Rean | Дата: Воскресенье, 04 Декабря 2016, 01:58 | Сообщение # 122 | Тема: Вопрос - Ответ (Game Maker) |
участник
Сейчас нет на сайте
| ProsstoBRO, Цитата ProsstoBRO ( ) А что это за маска, как она и где работает? Маска спрайта для коллизии: открываешь окно спрайта, там группа Collision Checking и кнопочка Modify Mask. По нажатию кнопки откроется ещё одно окно - окно настройки маски. В нём необходимо поработать с двумя группами: Bounding Box и Shape. В принципе, там всё очевидно. Попробуй настроить маску так, чтобы она попадала лишь на тот участок тайла, который не перекрывается (который всегда сверху).
Цитата ProsstoBRO ( ) Плюсик уже кинул))
Сообщение отредактировал Rean - Воскресенье, 04 Декабря 2016, 01:59 |
|
| |
Rean | Дата: Воскресенье, 04 Декабря 2016, 01:49 | Сообщение # 123 | Тема: Вопрос - Ответ (Game Maker) |
участник
Сейчас нет на сайте
| ProsstoBRO, а ты маску спрайта настраивал?
|
|
| |
Rean | Дата: Воскресенье, 04 Декабря 2016, 01:42 | Сообщение # 124 | Тема: Вопрос - Ответ (Game Maker) |
участник
Сейчас нет на сайте
| ProsstoBRO, честно говоря, этого стоило ожидать. Всё зависело от порядка создания экземпляров тайлов. В таком случае, надо "привязываться" либо к глубине (depth), либо к координате Y. У тебя ведь "нахлёст" происходит, грубо говоря, по высоте? То есть, срабатывал нижний, на который нажимали, и верхний?
|
|
| |
Rean | Дата: Воскресенье, 04 Декабря 2016, 01:11 | Сообщение # 125 | Тема: Вопрос - Ответ (Game Maker) |
участник
Сейчас нет на сайте
| ProsstoBRO, в общем, идея такая: также, в обработчике нажатия мыши, нам необходимо проверить условную переменную "global.selected". Если она false, то продолжаем выполнять функцию, иначе - выходим.
Код if (global.selected) exit;
global.selected = true;
// Дальше идёт твой код ...
В событии Left Released нам нужно сделать только одну операцию - вернуть global.selected значение false;
Код //Left released global.selected = false;
// Далее, твой код, если есть ...
Таким образом обработка нажатия сработает только один раз, и неважно сколько объектов одного типа наслаивается.
Добавлено: я думаю и так понятно, но на всякий случай упомяну - global.selected необходимо объявить заранее, при создании объекта, либо комнаты, либо менеджера, в общем, в месте, где у тебя происходит объявление всех глобальных переменных.
Сообщение отредактировал Rean - Воскресенье, 04 Декабря 2016, 01:14 |
|
| |
Rean | Дата: Суббота, 03 Декабря 2016, 23:24 | Сообщение # 126 | Тема: Вопрос - Ответ (Game Maker) |
участник
Сейчас нет на сайте
| ProsstoBRO, в каком месте и каким образом обрабатываешь нажатие? У какого объекта?
|
|
| |
Rean | Дата: Суббота, 03 Декабря 2016, 02:41 | Сообщение # 127 | Тема: Изменение размера спрайта без потери качества |
участник
Сейчас нет на сайте
| nike070888, Первый вариант: изменить спрайт в другом графическом редакторе, с которым умеешь работать. Второй вариант: там же, в редакторе спрайтов, сперва изменить размер холста на требуемую величину (Transform -> Resize Canvas...), а затем и сам спрайт через масштабирование. Третий вариант: изменить непосредственно в коде с помощью параметра image_xscale и image_yscale - масштаб по ширине и высоте соответственно. Например:Код image_xscale = 1.5; // увеличит ширину спрайта в полтора раза
|
|
| |
Rean | Дата: Суббота, 03 Декабря 2016, 01:31 | Сообщение # 128 | Тема: Вопрос - Ответ (Game Maker) |
участник
Сейчас нет на сайте
| aedginvael, скаченный файл надо импортировать в проекты (File -> Import project...) Интерфейс я бы всё же рекомендовал рисовать в DrawGUI - потом меньше хлопот будет (по типу тех, что интерфейс отображается в двух видах). Суть в том, что в событии Draw ты рисуешь не в каком-то определённом виде, а непосредственно в комнате. Виды - отображают тот или иной участок комнаты с заданным масштабом. Когда ты рисуешь GUI в простом Draw событии, то ты рисуешь его в комнате, а потому он отобразиться во всех видах, которые буду смотреть на этот участок. Поэтому интерфейсы рисуем только в DrawGUI. Можем расположить элементы GUI за пределами комнаты (если по каким-то причинам необходимо кинуть их в комнату на этапе проектирования), а уже в методе DrawGUI рисуем с необходимым сдвигом. Так как процесс рисования в DrawGUI происходит по оконным координатам, то динамически менять положение GUI элементов нет необходимости. В примере, скинутом мной выше, как раз и показывается один из вариантов коллизии с одним типом объектов (допустим, родитель). Объектов может быть несколько. За один степ удастся проверить все объекты, с которыми происходит коллизия.
|
|
| |
Rean | Дата: Пятница, 02 Декабря 2016, 22:51 | Сообщение # 129 | Тема: Изменение размера спрайта без потери качества |
участник
Сейчас нет на сайте
| nike070888, каким образом увеличиваешь масштаб?
|
|
| |
Rean | Дата: Пятница, 02 Декабря 2016, 16:43 | Сообщение # 130 | Тема: Дистанция от экземпляра объекта |
участник
Сейчас нет на сайте
| geney, falcoware, ага, и обязательно нужно программировать это в машинном коде. И вот когда ты уже постигнешь боль, с чистой совестью сможешь заглянуть в справку и увидеть функцию distance_to_object(), которой пользуются простые смертные.
|
|
| |
Rean | Дата: Четверг, 01 Декабря 2016, 21:44 | Сообщение # 131 | Тема: Вопрос - Ответ (Game Maker) |
участник
Сейчас нет на сайте
| aedginvael, вариантов много. Один из: 1. Создать функцию, которая будет перебирать все экземпляры определённого объекта и проверять их на коллизию с необходимой областью. Формирует из них массив и уже с этим массивом мы делаем всё что нам хочется. Ещё один вариант: Создать объект с прозрачным спрайтом (или спрайтом отображающим нашу область), сделать у него маску (круглую, квадратную, в общем, какую нужно) - простой объект, который будет отвечать за нашу зону видимости. Отключим его отображение (Visible = false) и будем проверять его на коллизию со всеми необходимыми нам объектами. В событии коллизии мы может напрямую обращаться к тому или иному экземпляру, проверяя его свойства и т.д. Главное, чтобы объект-зона всегда совпадал с центром станции/корабля и имел на него ссылку (чтобы выполнять необходимые изменения). Возможно, не самый быстрый, но вполне наглядный и удобный при использовании. 2. Если орудия будут стрелять в одно время только по одному противнику, то лучше сделать функцию поиска-определения только для станции (а она уже будет напрямую связана с орудиями) 3. Если рисовать в методе Draw, то надо взаимодействовать с x и y координатами вида (view_xview, view_yview). Для GUI же лучше использовать события DrawGUI - там будут использованы координаты окна.
Добавлено: вот, набросал пример по первому пункту. CheckCollision.gmz Добавлено 2: поправил ссылку
Сообщение отредактировал Rean - Пятница, 02 Декабря 2016, 00:55 |
|
| |
Rean | Дата: Четверг, 01 Декабря 2016, 16:43 | Сообщение # 132 | Тема: Вопрос - Ответ (Game Maker) |
участник
Сейчас нет на сайте
| aedginvael, Цитата Подскажите, что я делаю не так? Код id_obj=collision_circle(x,y,500,all,0,1); if id_obj >0 { if id_obj.friend = 3 { sos = true; } if id_obj.friend = 1 sos = false; }
Во-первых, collision_circle всегда будет возвращать только один instance. И вполне возможно, что это будет один и тот же instance. Если, к примеру, пушка в одно время может иметь только одну цель - то, в принципе, это может сработать. А если надо проверить всех, кто находится в круге - здесь ждёт неудача. К тому же стоит иметь ввиду, что collision_circle не всегда возвращает ближайший объект, а лишь объект который попадает в зону коллизии. Во-вторых, более читаемый код выглядит с использованием конструкции switch:
Код ... if (id_obj != noone) switch (id_obj.friend) { case 0: тра-та-та; break; case 1: sos = false; break; case 3: sos = true; break; }
Можно, конечно, ещё компактней, но это для тривиальных случаев:
Код sos = (id_obj != noone) and (id_obj.friend == 3)
В-третьих, в событии Step орудия, ты в начале каждый раз обнуляешь индекс, а потом пытаешься сделать следующий (или предыдущий кадр), но в следующем степе у тебя всё будет заново (нулевой кадр +- 1). Таким образом анимация никогда не проиграется и всегда будет показывать кадры 0, 1. Думаю, перечисленные выше причины - краеугольный камень проблемы. Решив их, ситуация должна более-менее проясниться.
P.S. Все три конструкции (if distance_to_object (target)...), наверное, лучше расположить в конструкции if-else, чтобы лишний раз не дёргать проверки. Хотя, я не знаю задумку, поэтому здесь тяжело что-то советовать. P.P.S Вместо image_index += 1, я бы всё же предпочёл устанавливать image_speed. Иначе получается жесткая привязка к room_speed. Ну и при потере кадров, будут пролёты анимации.
Сообщение отредактировал Rean - Пятница, 02 Декабря 2016, 00:50 |
|
| |
Rean | Дата: Среда, 30 Ноября 2016, 17:52 | Сообщение # 133 | Тема: Решаем задачи по Construct 2 [вопрос-ответ] |
участник
Сейчас нет на сайте
| BESS55555, Цитата BESS55555 ( ) Хотя, уже как больше года назад они анонсировали С3, я вот теперь думаю, что это будет? Честно говоря, ничего не слышал про Construct 3. Вот только сейчас решил загуглить. Пролистав соответствующий сайт (www.construct3.com), как я понял, у них нет каких-то конкретных идей и наработок. Только так: ну, типа, мультиплатформенность, поддержка на разных языках по всему свету, обратная совместимость с Construct 2 и "And lots more". Больше похоже на то, что они просто домен заняли, чтобы его не увели А по итогу получится что-то типа GameMaker Studio 2. Поживём - увидим.
На счёт NWJS и версий ничего конкретного сказать не могу, потому как из-за специфической направленности Construct'а на HTML5, чаще приходится пользоваться другими инструментами.
|
|
| |
Rean | Дата: Среда, 30 Ноября 2016, 13:24 | Сообщение # 134 | Тема: Вопрос - Ответ (Game Maker) |
участник
Сейчас нет на сайте
| aedginvael, посмотри в сторону функции draw_sprite_ext. Один из аргументов - rot, отвечает за угл поворота спрайта.
Сообщение отредактировал Rean - Среда, 30 Ноября 2016, 13:45 |
|
| |
Rean | Дата: Среда, 30 Ноября 2016, 00:53 | Сообщение # 135 | Тема: Вопрос - Ответ (Game Maker) |
участник
Сейчас нет на сайте
| 1) Для кода лучше использовать специальные теги code. 2, 3, 4 - вот с этого и надо начинать. Чем больше информации, тем больше шансов, что кто-то сможет помочь. А иначе приходится угадывать, что там у кого случилось.
Такой момент: в каком событии код? Всё рисование должно происходить в Draw Event (Draw Begin, Draw End, etc) И правильно я понимаю, что больше в комнате нет никаких других объектов, фона и прочего? Views не задействованы?
Сообщение отредактировал Rean - Среда, 30 Ноября 2016, 01:01 |
|
| |
Rean | Дата: Вторник, 29 Ноября 2016, 22:38 | Сообщение # 136 | Тема: Вопрос - Ответ (Game Maker) |
участник
Сейчас нет на сайте
| aedginvael, не лучшая идея менять значение переменных в Draw Events. Точка с запятой после D не нужна. Объект имеет экземпляры в комнате и активный параметр Visible? Данный код говорит, что отрисовывать объект (сам объект и дополнительный спрайт) необходимо ТОЛЬКО при нажатии D. Всё остальное время ничего отрисовываться не будет.
Добавлено: а, ну и самое главное - ты рисуешь второй спрайт поверх первого по тем же координатам.
Сообщение отредактировал Rean - Вторник, 29 Ноября 2016, 22:47 |
|
| |
Rean | Дата: Суббота, 26 Ноября 2016, 22:12 | Сообщение # 137 | Тема: Как запустить игру оффлайн! |
участник
Сейчас нет на сайте
| Цитата musicfuns ( ) Написать свой сервер можно сказать практически невозможно. Да, как бы, запускай игру и лови все запросы которая делает игра, а потом пили сервер, который будет отвечать на конкретные запросы. Но это было бы реальнее, если бы ты перехватывал и сохранял запросы и ответы, которые делала и получала игра будучи рабочей После прочтения этих строк, с ностальгией вспомнились времена MaNGOS'а и халявных WoW серверов. Различные рейты, неработающие боссы, каждую неделю новые квесты, обилие багов и лагов... Эхх
|
|
| |
Rean | Дата: Суббота, 26 Ноября 2016, 22:05 | Сообщение # 138 | Тема: .net Что это, и так ли это страшно? |
участник
Сейчас нет на сайте
| Цитата blackcatkpi ( ) Насколько я понимаю .net - набор библиотек для С#. Это не только набор библиотек, это и перевод в промежуточный CLI, а также интерпретатор и JIT-компилятор в CLR. Всё это есть ничто иное, как прямой ответ платформе Java (с её JVM).
Цитата blackcatkpi ( ) На самом деле С# аналог джавы, а не .Net Смотря что подразумевать под Java. В данном контексте - платформа .NET и платформа Java - всё верно.
В своём исходном виде C# и .NET Framework нераздельны. Программируя на C#, вы программируете в среде .NET.
|
|
| |
Rean | Дата: Суббота, 26 Ноября 2016, 13:46 | Сообщение # 139 | Тема: Как измерить, много ли это займёт пространства в сохранялке? |
участник
Сейчас нет на сайте
| alexsilent, строка значения в реестре Windows может содержать не более 16383 символов (если тип строки REG_QWORD, 64-бит, то получается как раз 1 мегабайт). Но мне кажется, это не самый оптимальный вариант. А если решишь портировать игру на другие устройства, то и там могут вылезти какие-нибудь ограничения. Как вариант: пересмотреть способ и структуру хранения данных перков. Может не надо хранить все, а только те которые имеются? Подумай о том, как бы упростить хранение данных, есть ли какие-нибудь зависимости и т.д. В крайнем случае, конечно, можно и так оставить или использовать запись в файл.
|
|
| |
Rean | Дата: Пятница, 25 Ноября 2016, 00:07 | Сообщение # 140 | Тема: Как измерить, много ли это займёт пространства в сохранялке? |
участник
Сейчас нет на сайте
| Присоединяясь к высказываниям выше, добавлю, что если уж сильно хочется, то в C# есть такое пространство:
В котором находится класс StringBuilder. Вот пример использования:
Код string test = "12345"; // Исходная строка
void Start () {
StringBuilder temp = new StringBuilder(test); temp[2] = '!'; test = temp.ToString(); // Результирующая строка Debug.Log(test); } // Результат: 12!45
Либо можно использовать StringBuilder для этих целей изначально. Но выше уже предложили более очевидную альтернативу. В общем, есть из чего выбрать)
Сообщение отредактировал Rean - Пятница, 25 Ноября 2016, 00:08 |
|
| |
|