На Windows 8 игра так же будет работать, но, если не использовать внешнюю библиотеку для проигрывания звуков (к примеру, SuperSound), игра будет крахаться как только общее количество проигрываемых в данный момент времени звуков превысит ~16.
Кто может сделать пример по 3d. Обзор мышкой по вертикали и горизонтали.По горизонтали сделать просто, а как по вертикали и горизонтали вместе?
Я некоторое время назад написал мини-статью по этому поводу. В случае обзора от первого лица добавляют v* к 4-6 аргументам функции (*to) вместо 1-3 (*from).
YellowAfterlife, принимайте поздравления! Статистику голосов покажете?
Спасибо! Про статистику, нужно будет уточнить - применимы несколько соглашений, с содержанием которых я пока в подробностях не ознакомился.
Сейчас медленно работаю над записью по прогрессу разработки за прошедшую неделю. Еще добавил приближение/отдаление и некоторые другие маленькие детали в редактор уровней:
Ребят, есть такая проблема. Сделал анимацию уничтожения. Не могу уничтожить объект через сравнение кадров. Есть ли какие ещё способы уничтожения после проигрывании анимаций(анимация зависает после проигрыша если что)?
Для спрайтов есть событие "Animations - On Finished", что выполняется по завершению анимации.
Console.WriteLine оправдано считает char числовым типом, и выводит коды символов (сказать более, перед выводом он складывает указанные три кода символов). Этому есть несколько решений: 1. Можно воспользоваться тем фактом, что { String + char } в C# возвращает строку с добавленным в конец символом.
Поскольку одинаковые операторы обрабатываются слева направо, { "" + ch1 + ch2 + ch3 } обрабатывается как { ((("" + ch1) + ch2) + ch3) }, то есть добавляет все три символа в новую пустую строку. 2. Можно использовать тип, в "строчности" которого Console.WriteLine уверен. Массив char-ов таковым является:
Код
var cs = new char[3]; cs[0] = 'H'; cs[1] = 'i'; cs[2] = '!'; int key = 88;
Кстати, кто-нибудь уже делал платформеры на гамаке? Вообще стоит ли или попробовать другой конструктор?
Точная статистика неизвестна, но есть основания полагать, что умеренное количество игр на GameMaker'е - платформеры. Этому способствует набор стандартных функций (place_free/place_meeting/..), что позволяют довольно легко создавать и изменять поведение объектов в зависимости от окружения.
Я видел, в некоторых играх внутри лаунчера (а порой и для каких-то операций в самой игре) используется "фрейм" браузера, в котором в свою очередь [рядом с интерфейсом] вполне легально сидит блок рекламы. Конечно, это не идеальное решение, но хоть что-то.
Встроенной команды нет. Можно написать нативное расширение. Или купить существующее (пример). Или сделать виртуальную клавиатуру средствами рисования и слежения за касаниями на экране.
Кажется, это вопрос по "Game Maker", а не по "Raycasting Game Maker". Предполагая, что я прав, в комнате на вкладке настроек есть галочка "persistent" (в русской версии - "постоянная"). Если галочка поставлена, состояние комнаты будет сохранятся при выходе из нее. Чтобы размещать игрока на нужной позиции при хождении между комнатами, его объект можно так же сделать постоянным (галочка в окне редактирования объекта), и изменять расположение в начале комнаты (англ. "Room Start").
А для каких целей это нужно? Можно удвоить кадровую частоту (room_speed) в обоих комнатах и переключаться между ними каждый шаг (рисуя их одну сверху другой или пропуская рисование ненужной), но обычно до такого не должно доходить.
В любую цифру? Если так, то почему бы не воспользоваться ord() и chr(), что возвращают код символа и преобразовывают код обратно в символ-строку соответственно.
Название игры: Aricards Жанр: 2D карточная игра Платформы: PC - Windows. Средство разработки: GameMaker: Studio Разработчики:YellowAfterlife (код), Aristokrat952 (графика)
Aricards это маленькая карточная игра для двух человек.
Она рассчитана на быструю игру и имеет легкий уклон на анализ или угадывание действий оппонента.
Можно использовать набор правил и играть с обычными игральными картами, или скачать игру и играть по сети.
Правила игры:
В начале каждого раунда каждый игрок получает 5 карт, 4 из которых "крестьяне", а одна - "раб" или "император". Оба игрока выбирают одну карту (в начале не показывая ее оппоненту), после чего выбранные карты раскрываются вместе. "император" бьет "крестьян", "крестьяне" бьют "раба", и "раб" бьет императора. За "побитых" "крестьян" игрок получает 1 очко, за "императора" - 5. Если оба игрока выбрали "крестьян", карты откидываются и раунд продолжается. Иначе (если карта была побита) раунд заканчивается. Каждые 3 раунда ("фаза") игра чередует, какой игрок получит карту "раба", а какой "императора". После 8 "фаз" победитель определяется по общим очкам.
В зависимости от поворота изображения, менять image_xscale или image_yscale. Чтобы растянуть до столкновения можно использовать цикл, к примеру
Код
var sd; sd = 0.25 // изменение масштаба за шаг цикла image_yscale = 1 repeat (200) { // максимальная длина лазера. спасает от зависания если препятствий на пути нет. image_yscale += sd if (place_meeting(x, y, obj_solid)) { // если на что-то наткнулись то отменяем последнее расширение image_yscale -= sd break } }
Можно и иными способами проверять, это уже зависит от случая использования.
{ for (i=0; i<instance_count; i+=1) // перебираем все объекты { iii = instance_id[i]; if (iii.object_index=objVirus) // если нужный нам объект вирус, то проверяем if (iii.activ>0) // активен ли он {if collision_circle(x,y,64,iii,0,1) lock=1 else lock=0;} // если активен, то проверяем рядом ли он, если да то блокируемся если нет то разблокируемся
}
В чем проблема этого кода. Когда враг уничтожен то с клеток не снимается блокировка. Если появляется новый активный враг, то клетки вокруг него блокируется, а все остальные на карте разблокируются. Есть у кого-нибудь пример нормальной работы с сетками или чтобы перебирались объекты нормально. В этом примере вроде бы проблема в том, что после удаления объекта он не удаляется из массива, а как его удалить я не знаю.
Это очень странный код. Насколько часто он выполняется и из клеток ли вовсе? Приведенное в нем "lock = 1 else lock = 0" подозревается в поломке выполнения при наличии более чем одного врага на карте. По меньшей мере стоит делать
Код
{ lock = 0 // по-умолчанию клетки остаются незаблокированными. блокируются лишь в близости врагов for (i=0; i<instance_count; i+=1) // перебираем все объекты { iii = instance_id[i]; if (iii.object_index=objVirus) // если нужный нам объект вирус, то проверяем if (iii.activ>0) // активен ли он {if collision_circle(x,y,64,iii,0,1) lock=1 } // если активен, то проверяем рядом ли он, если да то блокируемся
}
Ну или даже так (зачем перебирать все объекты?):
Код
var i, n, inst; n = instance_number(objVirus) lock = 0 for (i = 0; i < n; i += 1) { inst = instance_find(objVirus, i) // находим i-ый objVirus if (inst.activ > 0) if (collision_circle(x,y,64,inst,0,1)) { lock = 1 break // эта ячейка уже заблокирована, дальше перебирать не нужно } }
Еще когда Construct 2 проходил Greenlight, я спрашивал про скриптинг, и разработчики ответили "хочешь код - используй JavaScript SDK". И все равно что SDK неудобный до ужаса (я писал плагин, реализующий GameJolt API), не позволяет без ухищрений вызывать код стоящий за стандартными блоками в редакторе (хочешь рисование - пиши отдельные две реализации для Context2d и WebGL) и не имеет особых средств для контакта с остальной игрой. Было бы круто если бы какой-то язык программирования всё-таки добавили, но что-то мне подсказывает, что ответом останется "Используйте SDK".
Проще всего использовать "INI object", что позволяет читать и записывать файлы с содержимым вида
Код
[game] bam=8
чтобы записать файл в папку игры, путь нужно указывать как
Код
apppath & "game.ini"
насколько я помню.
Если файл не должен быть легко редактируемым пользователем, в "Hash object" так же есть функции сохранения/загрузки, что на выходе дают относительно "зашифрованный" файл.
Сообщение отредактировал YellowAfterlife - Понедельник, 23 Марта 2015, 02:34