Описание действий в игре.
|
|
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 - разные анимации?
|
|
| |