Это немного иначе делается. В событии создания делается отдельная переменная xspeed = 0. Она же изменяется при нажатии кнопок (как и hspeed). И движение в шаге делается как
Код
var xsign; xsign = sign(xspeed); repeat (abs(xspeed)) { if (!place_meeting(x + xsign, y, Platform)) { x += xsign; } else { // врезались в стену xspeed = 0; break; } }
Таким образом игрок не застревает в стенах, поскольку из встроенной скорости используется лишь вертикальная, а по горизонтали движение идет отдельным циклом.
Интересно, а на форуме когда нибудь сделают нормальное отображение исходного кода? С отступами, с подсветкой синтаксиса, и скроллинг кода как-то совсем бесит, постоянно в маленьком окошке скролить нечитабельный код. Вроде бы тут дофига программистов сидят, неужели это так сложно сделать?
Отступы скорее всего съедает форумный движок. Было бы интересно услышать от администрации, текущей ли он версии, и есть ли доступ к его исходному коду, т.к. действительно не смешно - в code-тегах съедает всё кроме первого отступа; вне них отступы только из Chrome отправляются и исчезают при редактировании.
А подсветку синтаксиса действительно можно было бы добавить, даже если посредством встраиваемого в страницу JS - я так недавно сделал скрипт для подсветки синтаксиса на под-форуме по GameMaker на Reddit'е и аналогичный для подсветки синтаксиса в справке по GameMaker. Тут, конечно, языков больше, но можно найти готовые решения, и прикрутить подсветку в соответствии с разделом, в котором размещено сообщение.
Ну и это окошко кода - нужно лишь добавить пару строк CSS кода, простите.
with (obj_button_character_class) { if (id != other.id) flag = false; // если id выбранного в цикле экземпляра не равен id выполняющего код вокруг цикла }
Или даже просто
Код
with (obj_button_character_class) flag = false; // снимаем флаг всем экземплярам flag = true; // ставим флаг текущему
Сообщение отредактировал YellowAfterlife - Суббота, 13 Февраля 2016, 17:00
YellowAfterlife, По первому способу. other.id - это что ли id объекта, в котором этот код написан? Вот как до меня не дошло сделать вторым способом, я не понимаю :( Все работает, спасибо)
Внутри цикла with, экземпляр, из которого цикл выполняется, хранится в other, а "текущий" (self) подменяется на перебираемые экземпляры. То есть
Xakep, если да, версию Вашего FireFox'a напишите, пожалуйста smile
У меня Firefox 44.0.2 на 64-битной Windows 8.1, всё работает нормально. В отличии от Chrome, Firefox открывает некоторые страницы как всплывающие окна (а не вкладки), но это можно и отдельным скриптом исправить.
Vostrugin, да, вытаскиваю данные из куков и туда же их сохраняю при нажатие на кнопку, проверял даже, верные значения в переменных выводил, но условие работать ни в какую не хочет. Вот полный код:
window.onload = init;
var autoplay = getCookie("getAutoplay"); var policy = getCookie("getPolicy"); var color = getCookie("getColor"); var srcVideo;
function init() { srcVideo = document.getElementById("ytplayer").src; var spliting = srcVideo.split("?"); var spliting2 = spliting[1].split("&"); if(autoplay){ spliting2[0] = "autoplay=1"; console.log(spliting2[0]); }else{ spliting2[0] = "autoplay=0"; console.log(spliting2[0]); }
Вдогонку к ответам, подскажу также отличную вещь - Tululoo Game Maker.
Спойлеры, конечно, но Tululoo немножечко заброшен. Года эдак с 2013. Я в 2011-2012 годах помогал исправлять JS движок в программе (см. низ вкладки "features" на сайте).
Увы, если HTML5 движок бесплатный, и у его авторов в нем нет прямого личного интереса (к примеру, автор Phaser его активно использует для контрактной работы), шансы продолжительного развития не очень высоки - работы горы, и для оптимизации нужны довольно специфичные знания и количества устройств для проверки. Помнится, основной автор программы (Zoltan Persich) в какой-то момент хотел переписать сам редактор для работы в браузере, но по тем или иным причинам (см. горы работы?) это ничем не закончилось, и он вернулся к написанию маленьких платных инструментов.
Конечно, технически, кто угодно может скачать и исправить\дополнить исходный код программы (редактор на PureBasic, движок на JS), но пока что я ни за кем таких героических подвигов не замечал.
Попробовать открыть другими программами, способными импортировать или обрабатывать PSD файлы - некоторые могут оказаться менее привередливы к формату, чем непосредственный фотошоп.
Большую часть таких проблем решают проверкой данных на стороне сервера - неправомерные действия отменяются (с уведомлением игрока), игроку насчитываются штрафные баллы. По превышению допустимого количества баллов в той или иной категории игрок с сервера выбрасывается, и куда-нибудь записывается примечание о сем событии для рассмотрения модераторами.
К примеру, speedhack обрабатывается с помощью проверок, что действия (движение, стрельба) выполняются с правильной скоростью (с учетом небольших погрешностей в пределах 5%).
Вещи вроде передачи ников и прочей важной информации всегда делаются через сервер.
var k = ds_map_find_first(map); repeat (floor(random(ds_map_size(map)))) k = ds_map_find_next(map, k); var v = ds_map_find_value(map, k); // в k, v теперь случайные ключ+значение из map
Вкратце, функциями перебора пар ключей-значений находится случайная пара.
"Перемешивания" ds_map не бывает, потому что порядка у пар нет.
Я недавно писал для блога запись о изометрических сетках. Там и про сортировку тоже - объекты рисуются по клетке за раз; клетки рисуются рядами; объекты внутри отдельных клеток уже сортируются по позиции. В записи есть интерактивные демонстрации и несколько примеров на различных ЯП.
Если на GPU, просчет пересечений будет стоить больше, чем рисование. Если на CPU... а почему на CPU кстати?
Сообщение отредактировал YellowAfterlife - Среда, 02 Марта 2016, 14:52
Находятся "самая левая" и "самая правая" точки, если смотреть на плоскость с точки начала света. Для прямоугольных стен это делается вот таким странным куском кода:
Код
if (lx < x1) { if (ly < y1) { // top-left ax = x2; ay = y1; bx = x1; by = y2; } else if (ly > y2) { // bottom-left ax = x1; ay = y1; bx = x2; by = y2; } else { // left ax = x1; ay = y1; bx = x1; by = y2; } } else if (lx > x2) { if (ly < y1) { // top-right ax = x1; ay = y1; bx = x2; by = y2; } else if (ly > y2) { // bottom-right ax = x2; ay = y1; bx = x1; by = y2; } else { // right ax = x2; ay = y1; bx = x2; by = y2; } } else { if (ly < y1) { // top ax = x1; ay = y1; bx = x2; by = y1; } else if (ly > y2) { // bottom ax = x1; ay = y2; bx = x2; by = y2; } else { // light's inside the solid } }
Где lx, ly - координаты источника света, x1, y1, x2, y2 - координаты прямоугольного объекта (верхний левый, нижний правый углы), ax, ay, bx, by - искомые точки.
Потом из поверхности с нарисованным в нее светом вырезается (рисуется с draw_set_blend_mode(bm_subtract)) трапеция, у которой одна сторона - эти точки, а другая - пропорционально отдаленный отрезок.
Код
var adx = ax - lx, ady = ay - ly; var adl = sqrt(adx * adx + ady * ady); var bdx = bx - lx, bdy = by - ly; var bdl = sqrt(bdx * bdx + bdy * bdy); var fl = 1000; // расстояние отдаления, должно быть больше максимального радиуса источника света var afx = ax + adx / adl * fl; var afy = ay + ady / adl * fl; var bfx = bx + bdx / bdl * fl; var bfy = by + bdy / bdl * fl;
afx, afy, bfx, bfy - вторая пара координат трапеции.
Банальный, наверное, вопрос, но всеж. Возникла потребность передать аргументы из скрипта в создаваемый (им же) объект. Знакомый программист предлагал использовать with obj{} - но по какой-то причине он не сработал. Пробовал объявлять пустые переменные в объекте при создании, и без объявления - с with данные банально не передаются. Каким образом можно сделать передачу?
Дело в порядке выполнения - instance_create создает экземпляр и выполняет его событие создания до возврата. Следовательно,
Код
// obj_some > create: image_angle = direction;
// ... with (instance_create(x, y, obj_some)) direction = random(360);
Никогда не сможет "заметить" direction == random(360) в создании.
То есть либо проделывать манипуляции над изменяемыми переменными там же, где вызывается instance_create, или перенести часть кода объекта в alarm или user event.
Конструктор - Unity3d или UnrealEngine. Оба предназначены для создания трехмерных игр, и для первого можно найти большое количество готовых решений для тех или иных компонентов.
Модели - хитрый вопрос. Если перья будут нарисованы в текстуре, выглядеть это будет не слишком пестро. Если же перья будут сделаны "торчащими" на поверхности модели полигонами, то много таких моделей за раз не нарисуешь (не говоря уже о размере файлов). Следовательно, придется искать или платить кому-то за шейдер, что будет динамически покрывать нужные поверхности моделек перьями, и модифицировать существующие модели+текстуры под свои нужды. Впрочем, от каких-то инвестиций скорее всего не скрыться, так как должного качества анимации для моделек все равно нужно будет как-то делать.
Насколько я знаю, 3D RAD (и 3impact тех же авторов) уже очень давно не разрабатываются. Делать игру на заброшенном конструкторе\движке - сомнительная затея, так как можно наткнутся на проблему с программой, и ничего с этим сделать нельзя будет.
не подскажете, какая функция захватывает нажатие на кнопки крестовины у xbox контроллера? Все кнопки и стики нашёл, а крестовина что-то так и не обнаружилась :/
Странно, потому что в справке даже картинка есть: http://docs.yoyogames.com/source/dadiospice/002_reference/mouse,%20keyboard%20and%20other%20controls/gamepad%20input/index.html Если обстоятельства (необходимость самоистязаний, например) требуют использования устаревшей на 8 лет версии, то тогда joystick_pov.
Ошибка буквально гласит, что нужно собрать приложение в APK, потому что в тестовой версии (что запускается через раннер) не поддерживаются какие-то из используемых разрешений. Это в Global Game Settings регулируется: Использование нативных расширений так же препятствует тестированию через раннер, поскольку они не могут быть динамически подгружены в это приложение (а лишь статически при сборке APK).