Пятница, 29 Марта 2024, 02:06

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 2 из 2
  • «
  • 1
  • 2
Форум игроделов » Программирование » C/C++ » Описание действий в игре. (Как лучше описать действия, выполняемые персонажем и NPC?)
Описание действий в игре.
ApatiДата: Понедельник, 04 Июня 2012, 14:37 | Сообщение # 21
заслуженный участник
Сейчас нет на сайте
Quote (Morfay)
Как тогда будешь делать, чтобы не повториться?

result += 1;
result += 2;
result += 4;
result += 8;
result += 16;
result += 32;
... и т.д.
MorfayДата: Понедельник, 04 Июня 2012, 15:12 | Сообщение # 22
почетный гость
Сейчас нет на сайте
Apati, вот, ток недавно думал об этом. В целом, удовлетворяет всем потребностям - больше 3-4 клавиш нажать нельзя => 3 (максимум 4) комбинированных действия. Даже беря максимум (4 действия) - 2+4+8+16 = 30. Отлично, на сегодня, это самый оптимальный вариант.

Было немного про это:
Quote
делать побитовое логическое сложение, потом анализировать биты. Складывая и проверяя сумму можно получить тот же результат, но манипуляция с битами проще для понимания.


может кто подробнее объяснить как это реализуется?
MatouДата: Понедельник, 04 Июня 2012, 15:42 | Сообщение # 23
Исходный коТ
Сейчас нет на сайте
сначала определяешь действия, для каждого действия по одному биту

const int ACTION1 = 0x0001; // 00000001
const int ACTION2 = 0x0002; // 00000010
const int ACTION3 = 0x0004; // 00000100
const int ACTION4 = 0x0008; // 00001000
const int ACIOTN5 = 0x0010; // 00010000
const int ACTION6 = 0x0020; // 00100000
...

потом делаешь логическое сложение для каждой нажатой клавиши

int result = 0;

if(ACTION1) result |= ACTION1;
if(ACTION2) result |= ACTION2;
...

Затем проверяешь комбинации, на примере ifa:

if(result == ACTION1 | ACTION2) then ...

ну и т.д.

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



MorfayДата: Понедельник, 04 Июня 2012, 16:35 | Сообщение # 24
почетный гость
Сейчас нет на сайте
Matou, думал и об этом тоже. С работой и манипуляцией с битами дружу слабо, мой вариант был представить каждое действие в разной разрядности - Action1 - 1, Action2 - 10, Action3 - 100 и т. д. Тогда при сложении получилось бы тоже самое (только вместо Action1 | Action2, было бы Action1 + Action2). Этот вариант схож с тем, что предложил Apati.

Добавлено (04.06.2012, 16:35)
---------------------------------------------
вот, сделал. Вариант Apati, с небольшой доработкой - объявил константы (jump = 1, run = 2, kick = 4 и т.д.) Так проще делать проверку - вместо того чтобы считать какое значение получится (и изменять его, если вдруг в константе значения нужно поменять), я делаю проверку на jump, jump + kick, jump+run+kick и т.д. Срабатывание нормальное. Но, при нажатии левых клавиш, действий к которым нет (к примеру down+jump) персонаж ничего не делает, пока какая-либо клавиша из них не будет отпущена.


Сообщение отредактировал Morfay - Понедельник, 04 Июня 2012, 16:36
MatouДата: Понедельник, 04 Июня 2012, 17:27 | Сообщение # 25
Исходный коТ
Сейчас нет на сайте
Quote (Morfay)
при нажатии левых клавиш, действий к которым нет (к примеру down+jump) персонаж ничего не делает, пока какая-либо клавиша из них не будет отпущена.

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



MorfayДата: Понедельник, 04 Июня 2012, 17:40 | Сообщение # 26
почетный гость
Сейчас нет на сайте
Quote (Matou)
Тут надо с системой ввода разбираться.


Ну, я не знаю как тут придумать. При такой системе все логично: нажимаю jump -> result = 1, down - 2 (к примеру). jump + down -> result = 3. Если на это значение нет действия, то ничего не произойдет. Когда отпускаю какую-нибудь из них, result становится 1или 2, имеет определенные действия на эти значения и они выполняются.


Сообщение отредактировал Morfay - Понедельник, 04 Июня 2012, 17:41
MatouДата: Понедельник, 04 Июня 2012, 17:49 | Сообщение # 27
Исходный коТ
Сейчас нет на сайте
Quote (Morfay)
При такой системе все логично: нажимаю jump -> result = 1, down - 2 (к примеру). jump + down -> result = 3. Если на это значение нет действия, то ничего не произойдет. Когда отпускаю какую-нибудь из них, result становится 1или 2, имеет определенные действия на эти значения и они выполняются.

Теперь понятно что ты имеешь в виду. Ну это не проблема, можно например доопределить такие вот проблемные сочетания клавиш.



MorfayДата: Понедельник, 04 Июня 2012, 17:53 | Сообщение # 28
почетный гость
Сейчас нет на сайте
Ну да, большинство из них отвалится само собой. Но пару случаев останется. Но это так, мелкие неприятности.
Stalker_ShooterДата: Среда, 06 Июня 2012, 18:02 | Сообщение # 29
3D XNA'шник
Сейчас нет на сайте
Quote (Morfay)
Или я тебя не понял и ты что-то другое имел ввиду, можно подробнее и с примером?


Ну, если предположить, что при нажатии на клавишу "Up" jump становится в true, а при нажатии "Left" run становится true, то можно создать такое условие:

if (run)
{
//просчитываем движение влево
}

if (jump)
{
//просчитываем движение вверх
}

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


*Не убегай от снайпера, умрешь уставшим.
*Мои статьи...
MorfayДата: Четверг, 07 Июня 2012, 17:53 | Сообщение # 30
почетный гость
Сейчас нет на сайте
Ок, с движением так оно и будет.А если от нажатия зависит какую анимацию проиграть? притом, что jump, run и jump+run - разные анимации?
Форум игроделов » Программирование » C/C++ » Описание действий в игре. (Как лучше описать действия, выполняемые персонажем и NPC?)
  • Страница 2 из 2
  • «
  • 1
  • 2
Поиск:

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