Подходящих рабочих устройств на платформе Android под рукой нет, но игра выглядит довольно стильно. Полагаю, коробки шагают/перекатываются к правой стороне экрана, чему игрок должен активно препятствовать?
Если собрана через Adobe AIR, то применимо лицензионное соглашение AIR (в одном файле версии соглашения на кучке языков; русскую версию можно найти текстовым поиском по слову "лицензия"). Лицензия позволяет свободно публиковать свои игры (в том числе даже без лицензии на Flash Professional, поскольку AIR идет отдельно от него), что играет на руку популярности среды выполнения.
Moving = true; // :bool APoint = transform.position; // отправная точка:Vector3 // [установка BPoint] StartTime = Time.time; // время начала движения :float
На кадре:
Код
if (Moving) { var t = (Time.time - StartTime) / 2; transform.position = Vector3.Lerp(APoint, BPoint, t); if (t >= 1) Moving = false; }
Открывая документацию для перепроверки факта, что Lerp обрезает фактор до 0..1, мной был обнаружен аналогичный пример движения между точками по времени.
Если внутри геометрии есть какого-то рода кости (насколько я помню, некоторый инструментарий имеет опцию экспорта "коробок/палок" для костей), то их можно сделать отдельными объектами и подвязать друг в дружке как кости. Если же подразумевается преобразование точечной анимации в костную, то это не выглядит как тривиальная задача - такой скрипт должен будет просматривать и сравнивать кадры моделей и подбирать позиции и настройки костей для максимальной схожести выходящего результата. Не уверен, насколько хорошо это бы работало.
Можно утащить пример отсюда (для GameMaker; использует DirectX9; бесплатная версия программы подходит для открытия примера). Способ с цветными объектами на вспомогательном буфере немного дурацкий, но нередко им и пользуются, поскольку он гарантирует "попадание" по видимому пользователю объекту. Еще способ - вычислить вектор мыши (вектор направления взгляда камеры, повернутый по X и Z в зависимости от смещения мыши от центра экрана), и по нему бросать луч для определения столкновения и следовательно объекта под мышью.
В GM8.0 это убрать нельзя. Насколько я помню, игра выдает ошибку на запуске, но все же работает. В GM8.1 игра не проводит инициализацию звуковой карты если в нее не добавлены звуки. В GM:S код воспроизведения звуков был переписан и ошибок не выдает (вроде бы).
Полагаю, что это будет зависеть от реализации отдельно взятой библиотеки, но виснуть не должно - "кнопки" из библиотек преобразовываются в мини-функции, что вызываются игрой на месте нахождения кнопки в действии. При желании можно расковырять библиотеку (с помощью Extension Maker) и сделать скрипты для ее кнопок. Это подразумевает вызов скриптов через код, но, если библиотека включает в себя действия для простого рисования/позиционирования моделей, то это должно будет оставаться удобным. Так же, если библиотека совместима с GameMaker: Studio, можно попробовать импортировать тестовый проект с библиотекой в него. В GM:S делали различные улучшения генерации кода и это может решить проблему.
Если это MP3 звуки и версия GameMaker 8.1 или ниже, то за раз может проигрываться лишь один (потому что проигрываются они средствами [url=https://ru.wikipedia.org/wiki/MCI_(%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81)]MCI[/url]). Способы исправления - преобразовать звуки в формат WAV или взять DLL для проигрывания звуков (например, SuperSound).
Стоит добавить - если в файл нельзя записать данные (например, он занят другим приложением), то file_text_open_write вернет -1. Код можно структурировать как
Код
mname = get_save_filename("MapGameMaker|*.mgm",'NewMap') if (mname <> "") { smap = file_text_open_write(mname); if (smap >= 0) { // запись в файл file_text_close(smap); } }
Добавлено: Хотя можно получить искомый результат если устанавливать magnet_x/y на "точку крепления" а x/y объекта на mouse_x/y (до применения кода магнита):
Создание:
Код
magnet_x = x magnet_y = y magnet_r = 50 radius = 10
Шаг:
Код
x = mouse_x y = mouse_y // var dx, dy, dr, df; dx = x - magnet_x // delta x dy = y - magnet_y // delta y dr = dx * dx + dy * dy // squared distance if (dr > magnet_r * magnet_r) { dr = sqrt(dr) // normal distance df = magnet_r / dr // distance factor x = magnet_x + dx * df y = magnet_y + dy * df }
Сообщение отредактировал YellowAfterlife - Среда, 25 Февраля 2015, 19:14
Страница Greenlight Название игры: BiteSizeWars Жанр: 2D RTS Платформы: PC, Mac, Linux Средство разработки: GameMaker: Studio Разработчики:YellowAfterlife (код), Cameron Znojemsky (графика), Mariano S. Pizzorno (игровая музыка) Начало разработки: Январь 2015 Описание: BiteSizeWars это мини-стратегия в реальном времени с 5-минутными матчами и онлайн мультиплеером.
Эта игра о сборе ресурсов, покупке юнитов, их улучшении, и сражении с оппонентами. Цель игры заключается в уничтожении всех юнитов противника и захвате их базы.
Планируйте свои атаки, упражняйтесь в микро-управлении армиями, и громите противников.
Поскольку события в игре происходят довольно быстро, онлайн мультиплеер делается специально с расчетом на то, чтобы быть как можно более сглаженным и честным для всех игроков.
На данный момент есть Windows версия игры с полностью рабочим онлайн мультиплеером на двоих игроков, что станет доступна в режиме раннего доступа (в Steam) после прохождения игрой greenlight. В будущем планируется следующий функционал:
Лобби, организация матчей, и ранги.
Поддержка карт большего размера и до 8 игроков (для наиболее эпичных битв)
Картостроительство и моддинг (включая поддержку Steam Workshop)
Mac и Linux версии
Отзывы приветствуются.
Сообщение отредактировал YellowAfterlife - Среда, 25 Февраля 2015, 18:38
Значения откалибровать под свои. "obj_player" заменить на имя объекта игрока.
Добавлено: Если пользоваться кнопками, то можно создать новый объект для отрисовки полоски жизни, с двумя действиями в событии рисования - одним для перемещения экземпляра к игроку (на obj_player.x, obj_player.y) и другим для непосредственного рисования полоски вокруг центра координат, с поставленным флагом relative.
Сообщение отредактировал YellowAfterlife - Суббота, 29 Июня 2013, 23:59
Первое, что бросается в глаза, это дописанные пути для INI файлов. GameMaker (по какой-то своей причине) не позволяет манипулировать INI вне папки игры (и даже с дописанными путями для папки игры). То есть использование должно быть как
Код
ini_open('scores.ini')
Вторая проблема в том, что считываемые значения никуда не идут - ini_read_real возвращает полученное значение, но в приведенном коде оно никуда не присвается вовсе. Это можно исправить так:
(добавлено присвоение результата в переменную) Если значения все равно не будут считываться, можно попробывать убрать точку из имени переменной для ини, изменив это на "var" или "global_var".
GameMaker разрешает манипулировать INI файлами лишь в папке программы. Если нужно что-то сделать с файлом в другом месте, нужно скопировать его в папку программы, изменить, и скопировать обратно (file_copy). Или написать свою реализацию для манипуляции INI (не рекоммендуется).
Можно упростить код и дальше. Это уже получается минималистичная симуляция таймера. Create
Код
cooldown = 0 // "нагрев" оружия. если 0 то можно стрелять
Step
Код
if (cooldown > 0) cooldown -= 1 // "остывание" оружия со временем if (keyboard_check(vk_control) && (cooldown <= 0)) { // если нажата кнопка и оружие уже "остыло" cooldown = room_speed / 2 // пол секунды, в шагах. instance_create(x, y, o_ammo) // собственно создание пули }
Есть, например, Adventus, что включает в себя практически все возможные особенности таких движков.
Если есть желание делать что-то самому, есть: 2D dynamic soft shadows - довольно подробный пост, видел несколько реализаций по нему. Проблемой являются лишь "стыкующиеся" фигуры - между ними будет видна пенумбра, если нет пересечения. 2D visibility - очень интересный подход к данной проблеме, базированный на бросании лучей (подобный подход использовался в первых "3д" шутерах вроде wolfstein / doom).
Model Creator - для моделивания, поддерживает импорт .obj моделей GmModelFix - программа специально предназначена для конвертирования уже готовых моделей под ГМ. Поддерживает набор инструментов для исправления типичных глюков, возникающих при экспорте-импорте моделей (вроде переворота по оси Y или неправильных координат текстуры)
"Зазоры" на тайлах это не столько проблема GameMaker, сколько "особенности" видеокарты. Появляются из-за того, что видеокарта "хватает" один лишний пиксель на текстуре, хотя и не должна (сюда же относится знаментальная особенность с тем, что разные видеокарты рисуют прямоугольники для draw_rectangle разных размеров). Исправляется добавлением "рамки" размером в один пиксель вокруг каждого тайла (см. запись YoYoGames) или трюком с поверхностями.