|
Результаты поиска
| |
| YellowAfterlife | Дата: Вторник, 13 Октября 2015, 09:37 | Сообщение # 261 | Тема: Считывание строки посимвольно из файла в Love2D |
Сейчас нет на сайте
| Зачем считывать файл посимвольно если можно разбить строку на символы?
Код function love.load() level = { }; for line in love.filesystem.lines("data.txt") do local row = { }; for index = 1, #line do row[index] = string.sub(line, index, index); end table.insert(level, row); end end
function love.draw() for row = 1, #level do local lrow = level[row]; for col = 1, #lrow do local lc = lrow[col]; love.graphics.print(lc, 64 + 20 * col, 64 + 20 * row); end end end
Сообщение отредактировал YellowAfterlife - Вторник, 13 Октября 2015, 09:38 |
|
|
| |
| YellowAfterlife | Дата: Пятница, 16 Октября 2015, 14:53 | Сообщение # 262 | Тема: Удаление ячеек массива. |
Сейчас нет на сайте
| Цитата XDominator (  ) Берешь, создаешь скрипт типа delete_val_from_arr(arrname, index, maxindex) Внутри пишешь в цикле смещение всех элементов на -1, начиная с index и до maxindex. Подвох в том, что размер исходного массива это не уменьшит, и последующие вызовы array_length_1d будут давать неправильный результат. А хранить в ячейке массива его длину - ещё больший костыль. ds_list не имеет этих ограничений и под цель подходит лучше.
|
|
|
| |
| YellowAfterlife | Дата: Суббота, 17 Октября 2015, 11:16 | Сообщение # 263 | Тема: Генерация уровня |
Сейчас нет на сайте
| Я делал пример схожей генерации уровня. Есть так же чье-то объяснение его работы. "Прямота коридоров" и прочее регулируется.
|
|
|
| |
| YellowAfterlife | Дата: Суббота, 17 Октября 2015, 23:47 | Сообщение # 264 | Тема: Ошибки в скрипте |
Сейчас нет на сайте
| Цитата Zilius (  ) Код codeusing UnityEngine; Возможно, этот префикс "code" был скопирован случайно и является лишним.
|
|
|
| |
| YellowAfterlife | Дата: Воскресенье, 18 Октября 2015, 11:18 | Сообщение # 265 | Тема: Генерация уровня |
Сейчас нет на сайте
| Цитата maksim1221232 (  ) Подойдёт, вот только я не могу добавить что нибуть своё, например генерацию патрон в комнатах. В примере создается игрок в первой из комнат. Секция кода помечена комментарием "// Plug in your room-related code here:" (вставляйте сюда ваш код для комнат). К примеру, чтобы создавать по коробке патронов в каждой комнате, можно добавить после комментария какой-нибудь instance_create( wsiz2 * irandom_range(rgx, rgx + rw), wsiz2 * irandom_range(rgy, rgy + rh), obj_ammo)
|
|
|
| |
| YellowAfterlife | Дата: Вторник, 20 Октября 2015, 11:47 | Сообщение # 266 | Тема: Какой конструктор игр дает больше возможностей? |
Сейчас нет на сайте
| Construct из трех самый простой в использовании (простую игру можно склепать полностью на стандартных "поведениях") но и самый ограниченный - нестандартные вещи на встроенном языке визуального программирования делаются очень и очень странно. Возможно, от того и получается, что у C2 2.5 миллионов скачиваний (согласно их сайту) но лишь десяток больших игр, сделанных на нем.
Clickteam Fusion имеет несколько более гибкий язык визуального программирования. Местами использование всё равно может быть неуклюжим, но люди делают вполне сложные игры на нем.
В GameMaker можно (и желательно) писать непосредственный код, и это дает большую гибкость с точки зрения реализации. Всевозможных игр на GM созданы горы.
Ещё двухмерные игры можно делать на Unity. Инструменты по созданию двухмерных игр в него были добавлены относительно недавно, но готовых примеров\расширений\модулей можно найти массу.
Сообщение отредактировал YellowAfterlife - Вторник, 20 Октября 2015, 11:48 |
|
|
| |
| YellowAfterlife | Дата: Вторник, 20 Октября 2015, 12:40 | Сообщение # 267 | Тема: Рентабельно ли нынче создавать игру |
Сейчас нет на сайте
| Цитата pixeye (  ) http://steamspy.com/ ответит на твои вопросы. Посмотри инди проекты. В целом без претензий с нескольких платформ в совокупности сделать тысяч 150-200$ можно. Но как правильно в одном интервью сказал Орловский - делать игры это не только деньги и профит. Если дело только в этом, то лучше искать другой бизнес.
На фалько не бывал.
SteamSpy как раз рисует не наиболее живописную картину, если присмотреться поближе. В списке выпущенных в 2015 году игр у наиболее популярных инди игр сотни тысяч владельцев. Но, в то же время, у последних 200 (9%) из 2350 игр нет никаких данных о владельцах вовсе (обычно означает, что было продано меньше сотни копий), у 490 (20%) игр 1000 или меньше владельцев, а более 10 000 владельцев есть лишь у трети всех игр (включая не-инди).
Rami Ismail (Vlambeer) недавно делал доклад о том, что излишне "разгонятся" (в отношении размеров игры, команды, и прочего) на первых публикуемых играх не стоит - лишь маленькая часть независимых разработчиков зарабатывают достаточно для обеспечения себя, и немало разработчиков в попытке создать "следующую великую игру" влазят в долги.
|
|
|
| |
| YellowAfterlife | Дата: Среда, 21 Октября 2015, 14:59 | Сообщение # 268 | Тема: Танк.Плавный поворот башни на указатель. |
Сейчас нет на сайте
| Я делал небольшую запись с иллюстрациями по поводу плавных поворотов. Можешь разобрать или просто взять оттуда функции cycle и angle_rotate.
|
|
|
| |
| YellowAfterlife | Дата: Воскресенье, 01 Ноября 2015, 14:40 | Сообщение # 269 | Тема: Game Maker Studio Master Collection |
Сейчас нет на сайте
| Если были деньги на Master Collection, можно приобрести готовый проект на Marketplace и не страдать. Там даже более "сложные" колёса поддерживаются. Иначе убедится что GMS текущей версии (1.2 вышла два года назад, например, и содержит буквально сотни неисправленных багов), что колеса правильно центрированы (можно создавать fixture кодом), и что они правильно прикреплены (physics_joint_wheel_create) и не сталкиваются с кузовом автомобиля
|
|
|
| |
| YellowAfterlife | Дата: Среда, 04 Ноября 2015, 13:54 | Сообщение # 270 | Тема: Столкновение с платформой. |
Сейчас нет на сайте
| Всегда можно сделать так, как это работает в GameMaker'е: 1. Сделать игроку функцию, возвращающую, столкнется ли он с каким-либо твердым объектом, если его сместить на указанное количество пикселей по x\y:
Код boolean placeFree(float dx, float dx) { // сместить на указанные координаты: this.rect.y += dx; this.rect.x += dx; // перебор платформ: Platform[] platforms = Game.platforms; // список платформ int n = platforms.length; boolean result = true; for (int i = 0; i < n; i++) if (platforms[i].rect.Intersect(this.rect)) { // Если на новой позиции игрок пересекает i-ую платформу, пометить результат и прекратить перебор. result = false; break; } // сместить обратно: this.rect.x -= dx; this.rect.y -= dy; // вернуть результат return result; } 2. Построить логику на этом:
Код int walkSpeed = 4; // скорость ходьбы (пкс\кадр) float ySpeed = 0f; // текущая вертикальная скорость (пкс\кадр) float jumpVelocity = 10f; // прирост вертикальной скорости при прыжке float gravity = 0.5f; // "сила" гравитации void update() { // выполняется раз в кадр boolean isOnGround = !placeFree(0f, 1f); if (isOnGround) { // стоит на земле if (jumpPressed()) { // была нажата кнопка прыжка? this.ySpeed = -this.jumpVelocity; } } else { // в воздухе: применить гравитацию this.ySpeed += this.gravity; } // вычислить горизонтальное направление движения (-1\0\1): int sx = 0; if (leftDown()) sx -= 1; if (rightDown()) sx += 1; // само горизонтальное движение (если нужно): if (sx != 0) for (int i = 0; i < this.walkSpeed; i++) { if (placeFree(sx, 0f)) { // можно сдвинуться на пиксель в направлении - сдвигаемся this.rect.x += sx; } else { // ударились в стену. прекратить цикл break; } } // вертикальное движение: int ay = (int)(this.ySpeed + 0.5); // округлить скорость int sx = 0; // направление движения по вертикали if (ay > 0) { sx = 1; } else if (ay < 0) { ay = -ay; sx = -1; } // само вертикальное движение: if (sy != 0) for (int i = 0; i < ay; i++) { if (placeFree(0f, sy)) { // можно сдвинуться на пиксель в направлении - сдвигаемся this.rect.y += sy; } else { this.ySpeed = 0f; // сбрасываем вертикальную скорость при ударе об платформы break; } } }
Вариант с неиспорченным форматированием: https://gist.github.com/anonymous/f444b4e781c555bc785a
Сообщение отредактировал YellowAfterlife - Среда, 04 Ноября 2015, 14:04 |
|
|
| |
| YellowAfterlife | Дата: Воскресенье, 08 Ноября 2015, 17:44 | Сообщение # 271 | Тема: Как просмотреть вложенные файлы? |
Сейчас нет на сайте
| Вариант 1: Скопировать (с помощью string_copy) интересующий вложенный файл в удобную тебе внешнюю папку и оттуда забрать.
Вариант 2: Разбить GMK-файл на составляющие с помощью GMK-Splitter.
Вариант 3: Импортировать GMK-файл в GameMaker: Studio (работоспособность после импорта значения не имеет), собрать вложенные файлы из папки "datafiles" в созданной для импортированного проекта папке.
|
|
|
| |
| YellowAfterlife | Дата: Среда, 11 Ноября 2015, 19:47 | Сообщение # 272 | Тема: Объединение объектов |
Сейчас нет на сайте
| Такое обычно делают булевыми модификаторами (см. "Union").
|
|
|
| |
| YellowAfterlife | Дата: Среда, 11 Ноября 2015, 19:55 | Сообщение # 273 | Тема: Проблемка с камерой. |
Сейчас нет на сайте
| Скорее всего был нажат Numpad 0, что по умолчанию меняет объект-камеру для сцены (в некоторых версиях Ctrl+Numpad 0). Переключиться на другой вид, выбрать "настоящую" камеру, нажать внизу справа меню "Вид" - "Камера" - "Установить объект в качестве камеры". Как другой вариант, выбрать справа вкладку "сцена" (на скриншоте выбрана "модификаторы") и там в первой секции поменять опцию "Камера".
|
|
|
| |
| YellowAfterlife | Дата: Четверг, 12 Ноября 2015, 03:03 | Сообщение # 274 | Тема: Проблема с инетом |
Сейчас нет на сайте
| Факт того, что у человека с кабельным подключением к роутеру проблем нет, заметно сдвигает подозрения в сторону роутера. Помогает ли перезагрузка роутера? Стоящий у меня дома роутер раз в несколько недель отказывается раздавать интернет отдельно взятому устройству, и это исправляется его перезагрузкой. Нормально ли работают другие устройства, если их подключить напрямую к роутеру? (если есть дополнительные порты) Есть ли возможность заменить роутер? Если это не какая-то особая смесь роутера и коммутатора, стоимость должна быть небольшой, и нужно будет лишь настроить новый для соответствия конфигурации текущего.
|
|
|
| |
| YellowAfterlife | Дата: Четверг, 12 Ноября 2015, 14:08 | Сообщение # 275 | Тема: Общение через микрофон |
Сейчас нет на сайте
| Цитата maker-rus (  ) Стандартными средствами - нет. Не совсем точное утверждение - в GameMaker: Studio были добавлены функции и события для записи звука. Конечно, это всё равно подразумевает кучу работы для стабилизации качества передаваемого звука в случае нестабильной работы сети, но всё же.
Сообщение отредактировал YellowAfterlife - Четверг, 12 Ноября 2015, 14:17 |
|
|
| |
| YellowAfterlife | Дата: Четверг, 12 Ноября 2015, 14:22 | Сообщение # 276 | Тема: Общение через микрофон |
Сейчас нет на сайте
| Цитата maker-rus (  ) На сколько я понимаю запись звука на диск(если верить документации) и реализация канала для передачи аудио-сигнала всем игрокам - разные вещи. На сколько я понял из документации, там написано про потоковую ЗАПИСЬ звука на локальный диск, но не слова о ее передаче через канал связи. Поэтому свое утверждение считаю более чем точным. Если я где-то не прав, поправьте. Запись идет не на диск, а в буфер (от того одним из параметров события и является buffer_id). А знаешь, что можно делать с буфером? Верно, передавать по сети (или копировать частями в другие буферы). Даже, если бы шла запись на диск, никто бы не мешал выходящий файл постепенно считывать и пересылать.
|
|
|
| |
| YellowAfterlife | Дата: Четверг, 12 Ноября 2015, 15:23 | Сообщение # 277 | Тема: Как сделать анимацию смерти игрока? |
Сейчас нет на сайте
| При касании (событие столкновения) игрока с предметом игрока удалять, и создавать на его месте (x, y) объект "умирающего игрока". В объекте "умирающего игрока" поставить нужную анимацию, и добавить событие Other - Animation End (рус. Другие - Конец Анимации?), в которое добавить код отображения окна (в простейшем случае - show_message \ действие show message).
|
|
|
| |
| YellowAfterlife | Дата: Суббота, 14 Ноября 2015, 13:47 | Сообщение # 278 | Тема: Как сделать "Вхождение в объект" |
Сейчас нет на сайте
| Чаще всего это делается разбиением объекта\графики на два фрагмента -- в одном хранится "передний план" (отображаемый поверх входящих объектов), а в другом "задний план" (отображаемый за входящими объектами). После оба фрагмента размещаются на разной глубине (depth). В частном случае: Сделать щеку (?) отдельным объектом (или тайлом) с глубиной, скажем, 10; остальной голове (?) дать глубину -10.
|
|
|
| |
| YellowAfterlife | Дата: Воскресенье, 15 Ноября 2015, 18:40 | Сообщение # 279 | Тема: Помогите с циклами и отрисовкой фигур |
Сейчас нет на сайте
| Цитата Dj_FroZTBite (  ) 1. Прямоугольный треугольник типа 1 11 111 1111
Код for (int y = 1; y <= 4; y++) { // для y-ой строки нужно вывести y символов: for (int x = 1; x <= y; x++) { System.out.print('1'); } System.out.println(); }
Цитата Dj_FroZTBite (  ) 2. Квадрат со сторонами 10х10 из каких то цифр 8888888888 8888888888
Код for (int y = 1; y <= 10; y++) { for (int x = 1; x <= 10; x++) { System.out.print('8'); } System.out.println(); } Общая идея понятна, я полагаю - через System.out.print выводятся индивидуальные символы, после через System.out.println переносится строка.
|
|
|
| |
| YellowAfterlife | Дата: Понедельник, 16 Ноября 2015, 17:46 | Сообщение # 280 | Тема: Оптимизация |
Сейчас нет на сайте
| Цитата maksim1221232 (  ) OpenGOO, Ну вот это, только я все ровно не особо понимаю что там написано. 66% времени выполнения программы тратится в шаге obj_tech_tankt1. Если развернуть пункт (нажать на плюсик слева), можно посмотреть более подробно, на вызовы каких функций\скриптов тратится время выполнения. После этого можно предпринять попытку их оптимизации и сравнить затраты времени после изменения.
|
|
|
| |
|