globalvar GEMS; // я не могу задать, будет обнуляться global.TOTAL_A1_GEMS = 0; // потом сложим global.A1L1_GEMS = LEVEL_1_SYS.GEMS; if (is_undefined(LEVEL_1_SYS.GEMS)) {LEVEL_1_SYS.GEMS = 0;}
Не по теме, но там же:
кнопка выбора уровня (obj_but_A1L1)
Step (чтобы выводить количество камней наглядней, ну как во всех казуалках)
Код
with obj_gem_counter if (place_meeting (x,y + 16, other)) {with other image_index = A1L1_GEMS; image_speed = 0; }
В комнате LEVEL_1 объект LEVEL_1_SYS, в нем
Create
Код
GEMS = 0;
Step
Код
A1L1_GEMS = GEMS;
Сообщение об ошибке:
Сообщение отредактировал mafon2 - Четверг, 17 Ноября 2016, 19:43
Вариантом для решения подобной проблемы будет проверка переменной на существование:
Это именно то, что мне нужно!
В общем, есть объект SYSTEM_INI в нем создаются все глобальные переменные: AXLY_GEMS, AXLY_PLAYED и GEMS.
Есть кнопки для перехода на уровни, в них проверяется запускался ли соответствующий ли им уровень или нет, и если да, то AXLY_GEMS = AXLY_SYS (объект с настройками уровня).GEMS.
GEMS, хоть и глобальная переменная, но обнуляется на каждом уровне (хранится в AXLY_SYS) и считается заново, после чего приравнивается к соответствующему AXLY_GEMS.
---
Позже проверю это проверку на существование и отпишу.
---
UPD
По-разному поигрался с «if is_undefined», посовал туда и сюда, синтаксис поменял, все равно ошибка. Всегда ссылается на строчку с «f is_undefined»
Задача простая. В конец запутался. Пытаюсь сделать так, чтобы игра запоминала и выводила highscore. Но каждый раз, когда игрок возвращается в меню, globalvar'ы обнуляются, т.к. без заданных параметров gamemaker вылетает.
Есть
globalvar A1L1_GEMS и так для каждого уровня (A1L2, A1L3...).
есть GEMS, по которым считаются камни на каждом уровне отдельно.
Есть A1L1_PLAYED, чтобы определить запускался уровень или нет, если он не тру, то A1L1_GEMS = 0, иначе берет показатель GEMS из соответствующего уровня. На бумаге все окей. Но на деле A1L1_PLAYED всегда оказывается false, иначе все рушится, т.к. он должен определить в степе тру он или не тру, а когда параметр не задан заранее, то он рушится, но если я его задаю заранее, то каждый раз при запуске комнаты он обнуляется.
Обдумываю дизайн игрушки с элементами Digger'а, т.е. рытьем ходов, но ничего интересного придумать не могу. Кто-нибудь может подсказать игрушки типа Boulder Dash'а / Diggers или каких-нибудь головоломок с рытьем, чтобы поискать в них вдохновения?
И снова я возвращаюсь с вопросами про place_meeting...
В общем, мне нужно, чтобы блок разбивался, если на него падает другой блок.
Код следующий:
Код
if (place_meeting(x,y-Movable_block.speedY,Movable_block)) { instance_destroy(); }
Но проблема в том, что это работает, только когда Movable_block один, а их может быть и несколько. Пытался поколдовать с "other", но без толку. Вообще не понимаю, как выделить один объект из множества подобных.
UPD
Попробовал решить тем, что переписал столкновение на Movable_block, а не на obj_rubble. Но т.к. у obj_rubble родитель obj_block через который просчитываются все столкновения, окончательно запутался.
UPD
Решено с помощью волшебного
Код
With Movable_block
Сообщение отредактировал mafon2 - Вторник, 13 Сентября 2016, 22:07
Не уверен, что проблема в падении. Когда я убираю Obj_block из "родителя", они не ззалипают, но персонаж начинает на них наслаиваться + мне хотелось бы, чтобы они считались "твердыми" для взаимодействия с другими предметами. Дело где-то в Obj_block'ах. Но, как я писал, сам Obj_block – пустой, т.е. я даже не знаю, из-за чего он залипает.
UPD: Дело оказалось в увеличенной на 25% скорости падения, я провел эксперимент и обнаружил, что при двойной скорости, персонаж проскакивает мимо объектов. Поставил везде единицы и все норм. Т.е. из-за разницы в скорости столкновения и падения блоки залипали, персонаж пролетал. Хотя у персонажа все чуть по другому... в общем, я запутался, но это уже не важно, главное – проблема видна и единицы спасут мир.
Сообщение отредактировал mafon2 - Среда, 22 Июня 2016, 23:16
Короче, у меня был какой-то остаточный код в Персонаже. Из-за него все было плохо. Теперь лучше (по клеточкам двигаются, персонаж не накладывается), но все равно, после первого падения movable_block'и прилипают к obj_block'ам – сдвигаются чутка и застревают.
Я игрался с ним туда-сюда, выходило и неплохо и совсем мрак. Сейчас они похожи на куски масла, которые катятся, пока не упадут и не влипнут намертво в пол. В идеале, хотелось бы, чтобы они двигались по клеточкам, как и персонаж, когда он на них надвигается.
Если убрать из родителей «obj_Block», то он двигается и после падения, но персонаж начинает наслаиваться на него и обгонять, не смотря на одинаковую скорость.
В лучшем моем исполнении они почти всегда (?) приземлялись правильно, но отбегали от персонажа за растояние клетуи. К сожалению, после продолжительных экспериментов, я потерял этот результат. Но он все равно был не идеален.
Сообщение отредактировал mafon2 - Воскресенье, 19 Июня 2016, 15:20
Ты зырь,у тебя создаётся верёвка при нажатии alt НО НЕ ОДИНАРНО ,то есть,пока альт зажат,верёвки создаются. Достаточно сделать таймер что-бы они не создавались так быстро
Да, ты прав. Спасибо.
ЦитатаMinskii ()
Передвигатся танк будет ТОЛЬКО ВВЕРХ ВНИЗ И ВПРАВО ВЛЕВО.ПО КЛЕТКАМ(всмысле его положение не должно пересекать черту клетки,да и сам танк по размеру как клеточка)
Я движение по клеточкам брал из этого (отличного) туториала: http://www.8bitwarrior.com/?p=344
P.S. У самого персонаж двигается по клеточкам.
Сообщение отредактировал mafon2 - Среда, 25 Мая 2016, 07:33
Проверка крепления веревки. Веревка состоит из блоков ROPE_R и ROPE_L с общим родителем ROPE.
Если блок, к которому веревка крепится уничтожается, то веревка должна порваться, в моем случае, уничтожиться (или возможно создать спрайт / объект порванной веревки).
На правой веревке такой степ (на левой почти такой же):
Код
if (!place_meeting(x+16, y, ROPE) && !place_meeting(x+16, y, Obj_block)) { instance_destroy(); }
if (!place_meeting(x-16, y, ROPE) && !place_meeting(x-16, y, Obj_block)) { instance_destroy(); }
Хотелось бы, чтобы ничего не оставалось висеть.
UPD: Я создал веревки через редактор, а не через персонажа и они работают... проблема в создании веревки персонажем:
if (нет кирпича) ИЛИ (нет воды) - в любом случае будет либо вода либо кирпич. а тебе надо чтобы не было ни воды ни кирпича, поэтому надо использовать И.
Черт, ты – гений! Спасибо большое. Я просто, никак не могу разобраться с и / или / последовательностями и т.п. Как бы это просто другим не казалось. Теперь все течет. Пока даже слишком хорошо. Опять, что-то напутал, но я сам разберусь.
Цитата
Нужно, чтобы при создании каждого нового объекта в его координатах появлялся текст из переменной. Я пытался, но максимум - это текст обновляется около самого первого объекта.
Я добавил ивент Draw к моим блокам-кирпичикам и написал: draw_text(x, y-30, "WC:" + string(Water_block_count)); Все выводится и обновляется.
UPD: Разобрался, красота:
Теперь у меня есть два типа воды: всезаполняющая и текучая.
Сообщение отредактировал mafon2 - Суббота, 07 Мая 2016, 18:29
Спасибо, да, без лишнего else, она течет в обе стороны, но все равно пока что гейммейкер производит бесконечное число водяных блоков, которые вешают "игру". Я замедлил скорость и проследил, что с каждым последующим блоком кол-во созданных блоков увеличивается на порядок. Что-то в роде: 3-15-150-300-1000-...
"FLOW" был поставлен, чтобы после того, как в его копилку упадет единица, он прекращал генерить воду. Сейчас понимаю, что с ним вода раз разлившись, уже не потечет вниз, если уничтожится блок кирпичей. В общем, это бесполезный костыль, который я уберу окончательно, не обращайте на него внимания.
Код
if (FLOW==0) { // Нижний чек if (!place_meeting(x,y+16, Obj_block) || !place_meeting(x,y+16, Water_flowing)) { instance_create(x, y+32, Water_flowing); Water_block_count = Water_block_count + 1; //FLOW = FLOW+1; } else // Чек по сторонам { // Правый чек if (place_meeting(x,y+16, Obj_block) && (!place_meeting(x+16,y, Water_flowing) || !place_meeting(x+16,y, Obj_block))) { instance_create(x+32, y, Water_flowing); Water_block_count = Water_block_count + 1; //FLOW = FLOW+1; }
// Левый чек if (place_meeting(x,y+16, Obj_block) && (!place_meeting(x-16,y, Water_flowing) || !place_meeting(x-16,y, Obj_block))) { instance_create(x-32, y, Water_flowing); Water_block_count = Water_block_count + 1; //FLOW = FLOW+1; } } // FLOW = FLOW+1; }
Сообщение отредактировал mafon2 - Суббота, 07 Мая 2016, 00:52