if (sprite_index=SprLeft)(sprite_index=mSprLeft) { // if (sprite_index=SprRight)(sprite_index=mSprLeft) { // if (sprite_index=SprRight)(sprite_index=mSprLeft) { // if (sprite_index=SprUp)(sprite_index=mSprLeft) { // if (sprite_index=SprDown)(sprite_index=mSprLeft) { // }
Я новичек в ГМ, но знаю 2 языка и разбираюсь еще в нескольких )
Синтаксис условных операторов неверен, с точки зрения любого языка. Скорее всего так
Код
if (sprite_index=SprRight) {sprite_index=mSprLeft}; //Может и без скобок т.к. 1 команда.
Но и логика неверна. Вообще что то вроде этого
Код
if (sprite_index=SprLeft or sprite_index=SprRight or sprite_index=SprUp or sprite_index=SprDown) sprite_index=mSprLeft;
PS Стыд и позор GML Синтаксис отсутствует как понятие.
Все зависит сугубо от того, кто этот код пишет, факторинг кода - дело каждого, однако, соглашусь, нормы есть во всех языках, просто этот более снисходителен.
if (sprite_index=SprRight) {sprite_index=mSprLeft}; //Может и без скобок т.к. 1 команда.
Если придираться, то просто оформлено неверно.
В любых других языках(C#,JS) скобки будут обязательны, потому что есть оператор if
Код
if sprite_index=SprRight { sprite_index=mSprLeft; };
Код
switch (sprite_index) { case SprLeft: sprite_index=SprLeft; break; case SprRight: sprite_index=SprLeft; break; case SprUp: sprite_index=SprLeft; break; case SprDown: sprite_index=SprLeft; break; };
Ты не закрываешь скобки после их открытия, там, где нахоядтся комментарии, ниже должны быть закрывающие скобки оператора
Тот код должен выглядеть так:
Код
if (sprite_index=SprLeft) { // }; if (sprite_index=SprRight) { // }; if (sprite_index=SprUp) { // }; if (sprite_index=SprDown) { // };
ЦитатаNekoFox ()
Но чтобы он менялся один раз, до следующего прыжка, позволяя другим спрайтам меняться (при ходьбе, например)
Вводи дополнительную переменную, например, isJumping
Код
if isJumping //проверяем, прыгает ли он? { sprite_index=spr_actor_player_jump; //если да, то меняем спрайт на прыжок } else //или { if !place_free(x,y+1,obj_parent_wall) //если под нами пол { sprite_index=spr_actor_player_jumpover; //приземляемся }; else //или { sprite_index=spr_actor_player_fall; //падаем }; };
Тут я ввел булевую переменную isJumping, меняй ее значение на true, когда нажимаешь кнопку прыжка, а когда кнопка не нажата, меняй, соответственно, на false
Всем привет! У меня такая ситуация: есть obj_bullet, у неё есть скорость 10. есть obj_enemy, размером 7. Получается, что при большой скорости, пуля перепрыгивает объект.
Есть ли возможность делать какую либо проверку для такого случая?
dildo_bomber, ну, вариантов-то много. Можно промежуточную точку посмотреть, например, но чтобы с другими объектами такой фигни не было - я посоветовал бы проверять лучше через collision_line и, соответственно, текущее и предыдущее положение. Карсон и Питееерс!!!
Как найти точку столкновения луча и объекта(учитывая, что объект неправильной формы и может быть повернут на любой угол, и луч также может быть повернут на любой угол)?
AlexProger, определяешь объект, отвечающий за отрисовку интерфейса. В нём будут храниться данные для отрисовка, а в событии draw будет соответственно вся отрисовка (тот же draw_text). Камера у тебя есть. Это Вид (View) в "комнате". Для того, чтобы не улетал за экран достаточно поменять x и y в функциях отрисовки (тот же draw_text) на относительные от вида координаты. Рекомендую почитать FAQ. В частности, там твой вопрос в пункте 3.2
Добавлено (20 сентября 2017, 16:56) --------------------------------------------- SmirnuX, через collision_line. Через него ты осуществляешь проверку столкновения отрезка с объектом, дальше дело алгоритма. То есть, берёшь отрезок от начала луча и начинаешь его увеличивать через цикл. Как только есть столкновение - приехали. Кстати, рекомендую использовать 2 цикла для грубой и точной проверки (если сработала грубая). Так как проверкой коллизии с увеличением отрезка на 1 пиксель сильно загрузишь программу. И не забудь установить максимальную длину отрезка (чтобы до бесконечности не проверял)
1)Создал объект o_enemy. В create прописал health. В collision у пули добавил отнимание хп у enemy. Всё работает, отлично. Вот только, если расставить несколько таких врагов, то жизнь отнимается у всех сразу. Также instance_destroy() уничтажает все экземляры объекта, "решил" проблему так:
Код
if(other != o_player){ other.health-=10; with(other) if health <= 0 instance_destroy(); } instance_destroy();
Этот код уничтожает только одного врага, но хп у всех все равно одинаковое 2)HealthBar у Игрока отображает жизнь enemy, хотя не является ни childrenom, ни parent'ом. Как такое можно пофиксить. Заранее благодарю всех, в справке просто не нашёл.
Сообщение отредактировал xeobale2018 - Четверг, 02 Ноября 2017, 21:03
if instance_exists(o_enemy) { target=instance_nearest(x,y,o_enemy); with(target) { hp-=10; } }
Добавлено (03 ноября 2017, 04:31) --------------------------------------------- и замени health, на любое другое название для переменной жизни у врагов. health - константа и она абсолютна. Всегда одна. Мой проект Drunk West! (заморожен) https://gcup.ru/forum/9-99264-1
Как сделать так чтобы при нажатии кнопки мыши, летело сразу несколько снарядов к той точке куда ты нажал, при этом один снаряд летит прямо к этой точке, а другие под некоторым углом (как при стрельбе из дробовика).
SmirnuX, Я имел ввиду, что она одна на весь проект. Нельзя ее использовать, в разных местах. Значение будет меняться именно у этой переменной откуда бы она не вызывалась. Мой проект Drunk West! (заморожен) https://gcup.ru/forum/9-99264-1
Такая проблема. Перешёл на GMS2. В нём шрифты с Anti-aliasing = off отображаются криво в отличии от GMS. Кто сталкивался с этим, как решали проблему? Вот шрифт - Tahoma, Antialiasing = off
Доброе время суток. Такой вопрос. В старом GM8 была функция:
Код
show_menu_pos
Как теперь её вызвать в Game Maker Studio 2? В синтаксисе её нет. И как теперь использовать эффекты переходов из комнаты в комнату? (Затухание, слайд и т.д.)
Сообщение отредактировал AnOmalyWolf - Понедельник, 11 Декабря 2017, 11:30