Воскресенье, 26 Мая 2024, 07:54

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Результаты поиска
Fire_PhoenixДата: Суббота, 20 Ноября 2021, 12:59 | Сообщение # 1 | Тема: возвращение в Megakerma
был не раз
Сейчас нет на сайте
Lira, написал Вам в ЛС, поскольку мое сообщение больше касается обсуждения будущего Megakerma, а не разработки игры в нем ;)



Сообщение отредактировал Fire_Phoenix - Суббота, 20 Ноября 2021, 21:12
Fire_PhoenixДата: Суббота, 20 Ноября 2021, 08:40 | Сообщение # 2 | Тема: возвращение в Megakerma
был не раз
Сейчас нет на сайте
Цитата Lira ()
однако, игра начинает фризить


Ну если учитывать, что:

Цитата
к примеру анимация падения начинается вне зависимости от того был прыжок или нет. и заканчивается не зависимо от того какие кнопки нажаты или не нажаты.


Я же правильно понимаю, что для определения, есть ли у ГГ под ногами "земля", Вы используете CHECKINTERSECT?

Просто в конструкторе не указано, какая модель коллизии используется, и как она рассчитывается... Возможно, происходит подвисание из-за вычислений.

Если Вы хотите точно определить "проблемное место", можно разбить Вашу систему анимации на несколько структурных блоков, и методом перебора выявить тот, который больше всего загружает процесс. НО, перед этим советую Вам сделать резервную копию проекта, что бы потом можно было без проблем восстановить первоначальную логическую структуру ;) Да и вообще, резервное копирование при разработке очень полезная вещь, стоит делать копии хотя бы на ключевых стадиях.

Подскажите, у Вас коллизии с "землей" и платформами происходит через группу, или Вы проверяете каждый объект в условии отдельно?

Еще хотелось бы обратить внимание, что для коллизий обычно используют упрощенные 3D модели:



Повторюсь, не знаю ккакую систему расчетов использует Ваш конструктор, но если попробовать под ногами 3D модели Вашего ГГ разместить невидимый 3D объект - плоскость с минимально возможной толщиной, и использовать уже ее для расчета коллизии с землей, будет ли это давать какой-то прирост в вычислениях? ;) Если да, то можно создать полную модель для коллизий, и использовать уже ее.




Сообщение отредактировал Fire_Phoenix - Суббота, 20 Ноября 2021, 08:44
Fire_PhoenixДата: Среда, 17 Ноября 2021, 19:34 | Сообщение # 3 | Тема: возвращение в Megakerma
был не раз
Сейчас нет на сайте
Lira, желаю удачи в разработке :)

Цитата
просто интересно, если у этого автора получилось, то каким образом


Хм, а что если у автора часть про флаги просто опущена для примера?

Если я правильно понимаю, то коды клавиш для IFKEYDOWN, которые он использовал, соответствуют группе NUMBERS (исходя из руководства)? Возможно, в описании, он просто привел вид конструкции, чтобы показать, как запускается анимация - то есть упростил код.

В любом случае, в той теме есть ссылка на видеоурок и исходник (как Вы выше заметили, они уже не доступны), возможно, там как раз и был дан полный алгоритм (с учетом проверки флагов) для обработки нажатий и переключения анимации...




Сообщение отредактировал Fire_Phoenix - Среда, 17 Ноября 2021, 19:39
Fire_PhoenixДата: Среда, 17 Ноября 2021, 00:34 | Сообщение # 4 | Тема: возвращение в Megakerma
был не раз
Сейчас нет на сайте
Lira, здравствуйте :)

Перед прочтением этого сообщения: я отправил Вам письмо в ЛС - прочтите, возможно оно решит Вашу проблему ;)

Я, увы, не эксперт в Megakerma, и узнал об этом конструкторе только из Вашего сообщения, но очень хочу Вам помочь, видя, как Вы пытаетесь его приручить...

Цитата Lira ()
если кнопка зажата, выполняется анимация pos1, вот только событие начинается заново каждый раз, и в игре "застывает" лишь первый кадр анимации.
но если человек сделал урок и даже записал видео, у него всё работало нормально? я что то упускаю.


На мой взгляд, это правильное поведение с точки зрения здравого смысла, ведь STEP скорее всего итерация, и вызывая в нем:
Код
PLAYANIMATION STOP


что по сути, как я понимаю просто переводит цикл воспроизведения к нулевому кадру, учитывая что в приведенной Вами теме есть такой код:
Цитата
Код
CREATEANIMATION hand1 STOP 0 0 2
CREATEANIMATION hand1 pos1 February 16 0
CREATEANIMATION hand1 pos2 30 40 2
CREATEANIMATION hand1 pos3 40 50 2
CREATEANIMATION hand1 pos4 16 March 30


а потом вызывая воспроизведение той же анимации с начала:

Код
IFKEYDOWN 3
PLAYANIMATION pos2
ENDIF




Вообще, я хоть и не работал с синтаксисом Megakerma, но пример из темы (из которой я привел код создания анимаций) для меня уже какой-то странный, если смотреть на manual, который Вы предоставили в начале этой темы:

Цитата
CREATEANIMATION
Description
Creates a new user defined animation sequence by extracting frames from an existing model.
Usage
CREATEANIMATION objectName animationName start end mode

Parameters
ObjectName – Name of the game object
AnimationName – Name of the animation
Start – The first frame number of the sequence
End – The last frame number of the sequence
Mode – Playing mode (1:loop, 2:ping-pong, 3:one shot)
Example
Код
CREATEANIMATION myHero Running 0 18 1



А что тогда происходит здесь:

Цитата
Код
CREATEANIMATION hand1 pos1 February 16 0


?

Давайте разберемся с параметрами:

hand1 - допустим, объект; pos1 - название анимации, February - это что, константа, в руководстве про это ничего нет, ладно пропустим, предположив что это константа, равная 2 и в качестве параметра это кадр начала анимации, 16 - кадр конца анимации; а 0 тогда что, если по идее, остался только режим анимации, но там нет 0 индекса (цитата: "1:loop, 2:ping-pong, 3:one shot").

То же самое и с:
Цитата
Код
CREATEANIMATION hand1 pos4 16 March 30


"March 30", если March снова 3, то что за режим 30? %)

Цитата
но если человек сделал урок и даже записал видео, у него всё работало нормально? я что то упускаю.


В общем, сложно верить тому, что идет вразрез уже как минимум с синтаксисом из руководства к конструктору...

P. S. Я думаю, тут все же нужны флаги анимации, которые будут определять, что анимация уже запущена, и запускать ее заново не требуется, за исключением того, когда игрок отпустил все кнопки действия.




Сообщение отредактировал Fire_Phoenix - Среда, 17 Ноября 2021, 00:43
Fire_PhoenixДата: Четверг, 11 Ноября 2021, 23:34 | Сообщение # 5 | Тема: Как сделать обход препятствий в С++ Builder???
был не раз
Сейчас нет на сайте
Цитата Razuvai ()
Как сделать обход препятствий в С++ Builder???


Ваш фрагмент кода демонстрирует лишь только то, что Вы используете (как я понимаю) компонент Image для отображения спрайта "игрока", ни о каких препятствиях в нем даже и намека нет...

Цитата TLT ()
Никто не знает, что у тебя за проект, какие задачи и т.д. Это 2D, пошаговая система, плавное перемещение или дискретное...


Цитата Razuvai ()
Код
if (Image1->Top>y) Image1->Top=Image1->Top-1;


Ну из ходя из этого, можно сделать вывод, что перемещение на 1 px за один отсчет таймера.

Однако TLT абсолютно прав, кроме способа перемещения, и понимания того, как выводится спрайт "игрока", мы ничего не знаем ;)

Но, боюсь, что там все (фон, юниты, объекты) реализовано на Image, и это плохо :(

Нужно понимать, что Image - это просто визуальный компонент, и использовать его для игр, а тем более создавать целый набор Image для вывода спрайтов избыточно!

Что же делать? Я не буду предлагать Вам использовать какое-либо API (OpenGL) или движки для создания игры... Почему? Потому что, к этому Вам нужно придти самостоятельно! :)

Если Вы выбрали в текущий момент делать игру на С++ Builder, то давайте попробуем ее сделать!

Итак, первое, что я Вам предлагаю, это отказаться от Image. Для игры Вам предпочтительней будет использовать Canvas самой формы, с одним НО, будет нужна двойная буферизация, для того, что бы выводить Ваш уровень без мерцаний. Для ее реализации, будет достаточно использовать для начала TBitmap, поскольку с ним будет проще и быстрее разобраться, в дальнейшем можно перейти на массив пикселей, который посредством одной функции, уже переносить на Canvas формы.

И да, про использование таймера - для начала думаю, его тоже можно оставить, когда Вы больше погрузитесь в разработку, сможете перейти на счетчик кадров для плавной анимации...

В общем, если Вам это интересно, пишите в этой темы свои мысли и вопросы. Буду рад ответить на то, что знаю :)

P. S. Было бы очень хорошо, если бы Вы написали жанр игры, которую хотите создать, или хотя бы привели примеры похожих игр. Это позволит получить более точное представление о реализации нужных классов, и их взаимодействии :)




Сообщение отредактировал Fire_Phoenix - Пятница, 12 Ноября 2021, 00:11
Fire_PhoenixДата: Четверг, 15 Апреля 2021, 23:41 | Сообщение # 6 | Тема: Отрисовка инвентаря по сетке
был не раз
Сейчас нет на сайте
gameshulker, пожалуйста :)



Сообщение отредактировал Fire_Phoenix - Четверг, 15 Апреля 2021, 23:42
Fire_PhoenixДата: Четверг, 15 Апреля 2021, 06:36 | Сообщение # 7 | Тема: Отрисовка инвентаря по сетке
был не раз
Сейчас нет на сайте
Цитата gameshulker ()
Я хочу сделать так, чтобы отрисовывалось только то, что у меня есть и по порядку.


Правильно ли я понимаю, Вы хотите выводить те ресурсы, количество которых > 0?

Если да, то это можно сделать через цикл. Но, в независимости от этого, обратите внимание:

Исходя из цитаты в руководстве:

Цитата
Data Types > Enums:
...
Note that you cannot modify the values for any enum constant after it has been created.


следует, что код:

Код
create:
enum resources {iron = 0, gold = 0, wood = 0}


создает константу, а не переменную. То есть, получается, что Вы не сможете менять количество (iron, gold, wood) в resources.

Могу Вам предложить, использовать для этого массив. К сожалению, ассоциативных массивов в GML нет (насколько я помню ), но можно сделать, к примеру так:

Объявляем массив с тремя ресурсами:
Код
resources = [0, 0, 0];


Далее ключи для массива:
Код
enum resourcesKeys {iron = 0, gold = 1, wood = 2};


А потом можно использовать их, вместо индекса, для изменения количества:
Код
resources[resourcesKeys.iron]++;


или для вывода:

Код
draw_text(10, 10, resources[resourcesKeys.iron]);


Добавлено (15 Апреля 2021, 07:56)
---------------------------------------------
Код
draw_sprite(icoIron, -1, 5, 10);
draw_sprite(icoGold, -1, 15, 10);


Все ico_... для удобства можно тоже сделать одним объектом (спрайтом), объединив все иконки в одно изображение. Примерно так:



Код
var frames_count = <количество>;
resourcesIco = sprite_add(<fname>, frames_count, 0, 0, 0, 0);


И рисовать как:

Код
draw_sprite(resourcesIco, resourcesKeys.iron, 5, 10);
draw_sprite(resourcesIco, resourcesKeys.gold, 15, 10);


Тогда, цикл для вывода ресурсов, количество которых > 0, будет таким:

Код

  resourcesDrawCount = 0;

  for (var i = 0; i < 3; i++) {
   if (resources[i] > 0) {
    draw_text(10 + resourcesDrawCount * 10, 10, resources[i]); // количество.
    draw_sprite(resourcesIco, i, 5 + resourcesDrawCount * 10, 10); // спрайт с иконкой.
    resourcesDrawCount++;
   }
  }




Сообщение отредактировал Fire_Phoenix - Четверг, 15 Апреля 2021, 08:49
Fire_PhoenixДата: Понедельник, 05 Апреля 2021, 12:41 | Сообщение # 8 | Тема: Ищу движок под MUD на php
был не раз
Сейчас нет на сайте
Цитата
Осталось реализовать регистрацию и переходы по локациям :D ну и заложить фундамент в базе на то, что на локациях могут быть и мобы, и предметы типа выбросить/поднять и соответственно другой игрок позже с этой локации может поднять выброшенный вами предмет. Неоторые локации могут к примеру телепортировать игрока куда либо за определнную плату, или сделать на локации дверь, а ключ положить в квестовую ветку.


Я думаю, с этим тоже не будет проблем :) Это в реализации просто запросы: клиент отправил, сервер проверил, и дал ответ...

Цитата
Через пару дней начинается большой курс по Laravel.


Было бы очень хорошо, если бы Вам дали вначале полностью освоиться в PHP, а потом предлагали изучение Framework-ов, ведь у самого языка большой потенциал, и написать на чистом PHP тоже можно много чего... Да и код получается Ваш, в котором спустя даже несколько лет Вы сможете быстро разобраться, и использовать как основу для других проектов...

Цитата
Как то так, со дня на день начну реализацию, как только продумаю как передвигаться по миру =)


Удачи :) Если будут вопросы, всегда рад помочь...

Добавлено (05 Апреля 2021, 20:13)
---------------------------------------------
Скажите, а как у Вас дела с графикой? Игра, как я понимаю, все же подразумевает ее наличие. Сами будете рисовать?




Сообщение отредактировал Fire_Phoenix - Понедельник, 05 Апреля 2021, 20:13
Fire_PhoenixДата: Понедельник, 05 Апреля 2021, 06:23 | Сообщение # 9 | Тема: Ищу движок под MUD на php
был не раз
Сейчас нет на сайте
JanCarlo, можно узнать, почему не хотите использовать (стандартные) 8 направлений: N, NE, E, SE, S, SW, W, NW?

Я не эксперт в MUD картах, но такое вроде допускается:


Цитата
И представил хранение карты в виде такого массива

Это больше ориентированный граф, хотя я бы взял за основу обычный двумерный массив, указав для его элемента нужные поля (тип клетки, описание, запрет на перемещение в определенное направление).

Цитата
Но потом представил, а что если у нас карта где будет 10к локаций, это при каждом переходе каждого игрок на соседнюю локацию - будет подгружаться этот массив на 10к строк и циклом искать тот ID локации на котором стоит игрок, что бы прочесть в какие стороны он может двигаться и куда эти стороны его приведут - (на какую именно соседнюю локацию переместиться игрок) то это будет дикая нагрузка на сервер скорее всего, скажем 100 игроков одновременно передвигаются и каждый раз целую базу такую считывать...


Это очень интересный подход: с одной стороны просчитывать нагрузку на сервер заранее конечно не плохо, но с другой стороны, Вы сразу планируете сделать 10 к локаций? :D

Обычно, заранее сложно просчитать все нюансы, и возможно, что придется в дальнейшем что-то менять. Рассчитать все сразу с нуля может только тот, кто с такой задачей уже сталкивался :)

Цитата
Разумеется надо что бы после регистрации персонажа по дефолту ставило на какую либо локацию, а после выхода из игры его локация сохранялась и при новом входе персонаж оставался на последнем месте.


Не переживайте, при вдумчивой разработке, все эти вопросы быстро решаются :)

Про установку игрока в нужную клетку и сохранение его позиции после выхода можно не волноваться, а что касается:

Цитата
При этом важно, что бы была исключена возможность отправить поддельный post запрос с отправкой левой локации что бы исключить возможность телепорта игрока в любое место.


Все просто :)
Ваш клиентский интерфейс (впрочем, как и ответы сервера) должен предусматривать передачу только допустимых команд. Например, зачем нужна команда телепорта? Правильно, не за чем... Клиент не имеет права давать такие команды, все что он может, это попросить у сервера возможность, перейти на нужную клетку, а тут уже сервер откроет файл (или БД), проверит, доступна ли эта клетка ему, и если да, даст добро на переход. Применяйте алгоритм: все, что не разрешено - запрещено, и никаких проблем не будет...

Так что, сложностей в реализации практически нет. И да, если Вам кто-то будет писать, мол PHP плохо, возьми Python, или еще что-то, не слушайте, PHP достаточно гибок для новичка. А то я знаю случаи, когда человеку предлагали разные языки программирования, мотивируя разными преимуществами, в итоге, человек потерял интерес к проекту, так как не смог определиться, на каком ЯП писать в итоге лучше... Выбрали PHP - пишите на нем. Будет что-то не получаться, спросите :)

Цитата
Видел отдельный видос такого конструктора


Я пока читал Ваше сообщение, написал небольшой конструктор карт, вот фрагмент карты из него:


Если немного доработать, то можно тоже снимать видео :)




Сообщение отредактировал Fire_Phoenix - Понедельник, 05 Апреля 2021, 06:26
Fire_PhoenixДата: Вторник, 30 Марта 2021, 11:17 | Сообщение # 10 | Тема: Переменная в которой объекты
был не раз
Сейчас нет на сайте
gameshulker, в ЛС написал...

Fire_PhoenixДата: Вторник, 23 Марта 2021, 23:59 | Сообщение # 11 | Тема: Курсор на спрайте
был не раз
Сейчас нет на сайте
gameshulker,
Цитата
я несколько дней был в тупике.

Это достойно уважения! Не важно, какой сложности будет вопрос, главное не сдаваться, и все получится...

Желаю Вам творческих успехов в разработке :)


Fire_PhoenixДата: Вторник, 23 Марта 2021, 05:46 | Сообщение # 12 | Тема: Курсор на спрайте
был не раз
Сейчас нет на сайте
gameshulker, если я правильно понял, то можно попробовать так:

Объявите глобальную переменную drawList:
Код
globalvar drawList;


А затем создайте массив с нужным количеством элементов. Я взял сто, надеюсь хватит :)
Код
drawList = array_create(100, 0);


Далее, объявляем пользовательские функции:

Для проверки, находится ли курсор над отрисованным спрайтом:
Код
#define cursor_in_sprite(sprite)
result = false;

if ("drawn" == array_get(drawList, sprite)[0])
if ((mouse_x >= array_get(drawList, sprite)[1])  &&
    (mouse_y >= array_get(drawList, sprite)[2])  &&
    (mouse_x <= array_get(drawList, sprite)[3])  &&
    (mouse_y <= array_get(drawList, sprite)[4])) {
result = true;
}

return result;


И для отрисовки спрайта с добавлением его в drawList.
Код
#define my_draw_sprite(sprite, subimg, x, y, xscale, yscale, rot, colour, alpha)
array_set(drawList, sprite, ["drawn", x, y, x + sprite_get_width(sprite) * xscale, y + sprite_get_height(sprite) * yscale]);
return draw_sprite_ext(sprite, subimg, x, y, xscale, yscale, rot, colour, alpha);


Соответственно, в Вашем коде draw_sprite_ext заменить на my_draw_sprite.

Ну а проверить можно так:
Код
if cursor_in_sprite(CrGoldIgnot)
draw_text(72, 72, "No, your cursor scares me!");


Важно понимать, что:
Код
drawList = array_create(100, 0);

нужно добавить в функцию отрисовки (draw), чтобы сбросить drawList.

Так же, сейчас функция my_draw_sprite не будет правильно работать, если аргумент для вращения не равен 0, то есть, если спрайт переворачивается этой функцией. Но это можно добавить при желании...




Сообщение отредактировал Fire_Phoenix - Вторник, 23 Марта 2021, 05:53
Fire_PhoenixДата: Воскресенье, 14 Марта 2021, 17:50 | Сообщение # 13 | Тема: Зависает игра во время работы цикла
был не раз
Сейчас нет на сайте
Quad69,
Цитата Quad69 ()
stepRandom = 0; //ВОТ ЭТОТ ЦИКЛ
while (stepRandom<rround and alarm[0] != room_speed*5){
alarm[0]= room_speed*5;
}


В таком случае, получается так:
Пусть условие цикла (stepRandom<rround and alarm[0] != room_speed*5) равно true, тогда запускается таймер alarm0, далее цикл останавливается, и через room_speed*5 происходит срабатывание alarm0, и все? Значит, таймер не будет запущен rround раз, а как я понял код Skyapa, ему вроде нужен такой алгоритм.

Можно ведь просто запустить таймер в startGame(), а в самом таймере его перезапускать, нужное количество раз, добавив alarm[0] = room_speed * 5;

Тогда получаем такой код:
Код
  [StartButton-Left Down]
  function activation() {
   if (rrandom == 1) {
    LeftTop.image_blend = c_blue;
    alarm[1] = room_speed * 3;
    audio_play_sound(_1, 1, false);
   }

   if (rrandom == 2) {
    RightTop.image_blend = c_fuchsia;
    alarm[2] = room_speed * 3;
    audio_play_sound(_2, 1, false);
   }

   if (rrandom == 3) {
    LeftDown.image_blend = c_yellow;
    alarm[3] = room_speed * 3;
    audio_play_sound(_3, 1, false);
   }

   if (rrandom == 4) {
    RightDown.image_blend = c_lime;
    alarm[4] = room_speed * 3;
    audio_play_sound(_4, 1, false);
   }
  }

  function randomInteger() {
   rrandom=irandom_range(1, 4);

   array_push(computerArray, rrandom);
   activation();
  }

  function startGame() {
   rrandom = 0;
   rround = 4;
   stepRandom = 0;
   computerArray = [];
   playerArray = [];
   isAlarm = false;

   LeftTop.image_blend = c_navy;
   RightTop.image_blend = c_purple;
   LeftDown.image_blend = c_olive;
   RightDown.image_blend = c_green;

   alarm[0] = room_speed * 5;
  }

  startGame();

  //////////////////////////////////

  [alarm0]
   stepRandom++;
   randomInteger();
   if (stepRandom < rround) {
    alarm[0] = room_speed * 5;
   }


?




Сообщение отредактировал Fire_Phoenix - Понедельник, 15 Марта 2021, 06:06
Fire_PhoenixДата: Вторник, 09 Марта 2021, 06:32 | Сообщение # 14 | Тема: Opengl, glutGetModifiers не срабатывает на сочетания клавиш
был не раз
Сейчас нет на сайте
cann, в ЛС ответил...

Fire_PhoenixДата: Воскресенье, 07 Марта 2021, 06:23 | Сообщение # 15 | Тема: Opengl, glutGetModifiers не срабатывает на сочетания клавиш
был не раз
Сейчас нет на сайте
cann, а Вы поставьте breakpoint, и посмотрите, придет ли у Вас с одновременным нажатием Ctrl + Alt + d вообще клавиша в обработчик :)

Воспользуйтесь кодом из Вашего первого сообщения, там есть:
Код
procedure key(key: Byte; x,y: Integer); cdecl;
var
   mode: Integer;
begin
     WriteLn('Key = ', key);


Следовательно, если при нажатии Ctrl + Alt + d WriteLn ничего не печатает в консоль, то функция проверки бесполезна...

Sanchez06, там должно быть именно OR, так как мы складываем биты ;)

НО комбинация Ctrl + Alt туда просто не приходит. Почему? Нужно искать в документации... Вот Shift + Alt + клавиша и Ctrl + Shift + клавиша работают.


Fire_PhoenixДата: Пятница, 05 Марта 2021, 23:48 | Сообщение # 16 | Тема: Opengl, glutGetModifiers не срабатывает на сочетания клавиш
был не раз
Сейчас нет на сайте
Sanchez06, текст нужно приводить полностью ;)
Цитата Sanchez06 ()

Код

    int mod = glutGetModifiers();
    if (mod == (GLUT_ACTIVE_CTRL|GLUT_ACTIVE_ALT)) {
      cout << "CTRL+Alt+D press" << endl;
    }



С таким фрагментом кода, будет больше путаницы :D

cann, я Вам в ЛС написал.

Разобрались?




Сообщение отредактировал Fire_Phoenix - Пятница, 05 Марта 2021, 23:48
Fire_PhoenixДата: Пятница, 26 Февраля 2021, 19:31 | Сообщение # 17 | Тема: Sprites
был не раз
Сейчас нет на сайте
MagicHero, спасибо за разъяснения, про это я не знал:
Цитата
В GMS2 можно использовать = вместо == при компелировании GMS поймет что от него хотят


о как, "=" и в условии, и в присваивании использовать можно? До чего техника дошла... :)

Тогда давайте разбираться...

Как я понял, image_index это не целочисленная переменная, то в условиях, равенство ("==") лучше не использовать (исходя из логики сравнения вещественных чисел).

Предлагаю такой код:
Код
globalvar epsilon, frames, frame_step;

epsilon = math_get_epsilon();

var frames_count = 12;
frames = sprite_add(<fname>, frames_count, 0, 0, 0, 0);
sprite_index = frames;

frame_step = 1 / 30;
image_speed = frame_step;

#define step
if ((image_index > image_number - frame_step - epsilon) && (image_speed == frame_step)) {
image_speed = -frame_step;
} else if ((image_index < frame_step - epsilon) && (image_speed == -frame_step)) {
image_speed = frame_step;
}

#define draw
draw_sprite(frames, image_index, 8, 8);


Этот код проверен, и работает.

Для проверки я использовал эту картинку:



Нужно ее указать как fname в sprite_add.

И да, неплохо бы сделать отладку с меньшим FPS, чтобы проверить правильность условий.

Вторую часть условия:
Цитата
(image_speed == ±frame_step)


можно опустить, но тогда, по идее первый и последний кадр анимации будут показываться на frame_step меньше по времени.


Fire_PhoenixДата: Четверг, 25 Февраля 2021, 21:55 | Сообщение # 18 | Тема: Sprites
был не раз
Сейчас нет на сайте
JesusOnExtasy88, я конечно не эксперт в GML, но разве нет ошибки в условии Вашего кода:

Цитата
if(image_index=image_number-1 && image_speed = 1){
image_speed = -1;
}else if(image_index=0 && image_speed = -1){
image_speed = 1;
}

?

В ЯП обычно операторы присваивания и сравнения не могут быть идентичны - это вызывает путаницу, так например, если:
Цитата
image_speed = 1;


означает присваивание image_speed единицы, то в условии сравнения:
Цитата
if (image_speed == 1)

означает, если image_speed равно единице, то ...

P. S. Хотя, скорее всего, Вы про разницу "=" и "==" знаете, и это просто опечатка...

P. P. S. В условии "=" использовать конечно можно, при условии (тавтология, извините :) ), что Вам нужно присвоить значение, а не сравнить, тоже касается "++" и "--" в условиях (хотя такое уже встречается чаще, и может быть полезно)...


Fire_PhoenixДата: Среда, 09 Декабря 2020, 01:48 | Сообщение # 19 | Тема: как создать многоуровневый опрос
был не раз
Сейчас нет на сайте
Цитата fess1997 ()
Здесь же можно создать опрос только с одним вопросом.


Да, но можно поступить иначе: найти онлайн-сервис, типа Google Формы, или схожий, создать опрос там, далее, создать тему на форуме и дать ссылку на тест.

Опять же, есть некоторые НО:

  • Сервис не должен требовать регистрацию при прохождении теста - иначе будет мало желающих его пройти ;)
  • Сайт должен быть проверенным...


Я, к сожалению, не могу сказать, какой сервис Вам лучше выбрать. Через поиск нашел ещё:
survio[точка]com
simpoll[точка]ru
onlinetestpad[точка]com/ru

Прямые ссылки не даю, так как думаю, что Вы сами сможете понять, как их восстановить :)

И да, была ещё идея про Тесты

Да только, как я понимаю, создавать их может только Администрация, и я не знаю, сохраняется ли информация, о результатах пользователя (скорее всего нет), доступная для просмотра создателю.


  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг