Ламерский вопрос

Тут обсуждаются исключительно вопросы создания квестов!
Ссылки на полезные ресурсы по теме вы найдёте здесь.

Модератор: Tedward

Ответить
  • Автор
  • Сообщение
Не в сети
Квестунчик
Сообщения: 100
Зарегистрирован: 14 окт 2006, 01:34

Ламерский вопрос

Сообщение GNTB » 27 ноя 2006, 22:50

По настоящему ламерский вопрос про программирование и компы:

Вот такая ерунда: вся работа компа - система последовательных команд. Ну хорошо, бывают переходы и циклы. Но в целом - последовательно выполняемые инструкции.
Так как-же тогда в играх, одновременно и графика обсчитывается, и музыка играет?
Ну хорошо, бывает и всякая эзотерика, вроде конвеерной архитектуры и нескольких параллельных потоков данных. Но здесь дело совсем не в этом, а факт остаётся фактом.

PS И не надо ответов в стиле: "Убей сибя ап стену!".

Я серьёзно. Обьясните физику процесса.

PS Это один из примеров. Также: например, почему в аркадах одновременно движутся и твой спрайт, и враждебные спрайты?

Не в сети
Квестунчик
Сообщения: 100
Зарегистрирован: 14 окт 2006, 01:34

Сообщение GNTB » 28 ноя 2006, 02:34

Предположу, что используются прерывания. Версия:
Программа получает сигнал от контролёра клавиатуры (мыши, джойстика, gamepad'а), ЦП обрабатывает, перерисовывает спрайт в другом месте (пикселем-другим дальше), стирает прежнее положение. Прерывается. Переходит к подпрограмме, отвечающей за мелодию, обращается к звуковухе, извлекает ноту. Прерывается. Переходит и обрабатывает подрограмму перемещения врага. Прерывается. Возвращается к подпрограмме, работающей с персонажем.

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

А в аркадах - бой с боссом, который и сам бегает, запускает кучу огоньков, ракет, каждая из которых летит по своей траектории. А файтинги - куча движений и реакций на эти движения?..

Про 3D я даже и думать боюсь.

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

Не в сети
Квестунчик
Сообщения: 100
Зарегистрирован: 14 окт 2006, 01:34

Сообщение GNTB » 28 ноя 2006, 02:45

Таак... Я запутался. Наверно, следовало так: спрайт стирается, затем перерисовывается в другом месте, пикселем-другим дальше.
(а не наоборот). :oops:

Не в сети
Форумчанин
Сообщения: 41
Зарегистрирован: 15 дек 2005, 12:57
Откуда: Татарстан, Набережные Челны

Сообщение Hrumer » 28 ноя 2006, 08:27

GNTB писал(а):Таак... Я запутался. Наверно, следовало так: спрайт стирается, затем перерисовывается в другом месте, пикселем-другим дальше.
(а не наоборот). :oops:
Это в старые времена DOS можно было задумываться про прерывания, ассемблерные вставки и прочее. Сейчас все это намного проще, хош сам под DirectX/OpenGL пишешь, хош через надстройки для них в виде компонентов и голова у тебя не болит. Просто указываешь какие спрайты в каком месте рисуются и отрисовывается весь экран.

Не в сети
Невероятный Квестун
Сообщения: 1372
Зарегистрирован: 28 янв 2005, 15:47

Сообщение Кость » 28 ноя 2006, 11:13

Также: например, почему в аркадах одновременно движутся и твой спрайт, и враждебные спрайты?
Расчет перемещений, как правило, происходит последовательно -- сначала для первого объекта, который виден на экране, потом для другого, третьего и так далее до последнего. Компьютер складывает числа "в уме" довольно быстро. А обновляется экран тоже быстрее, чем может воспринять глаз человека. Потому и кажется, что одновременно.
В 3D все тоже самое с расчетами, только расчитывать надо побольше -- не только траекторию ракеты, но и освещение на пути этой ракеты, реакцию жертвы, в которую эта ракета попала, вмятины в стенах и т.п.
Последний раз редактировалось Кость 08 мар 2007, 22:38, всего редактировалось 1 раз.

Не в сети
Квестунчик
Сообщения: 100
Зарегистрирован: 14 окт 2006, 01:34

Сообщение GNTB » 28 ноя 2006, 17:16

Так. Стоп. Извините.

Всё, написаное МНОЙ выше (кроме первого поста) - считать бредом.
Я задал вопрос, не получил ответа (в тот момент), ударился в неподкреплённые практикой фантазии, а потом обьявил всё это правдой жизни. Это даже не глупость - это психическая аномалия. :(

Не в сети
Форумчанин
Сообщения: 41
Зарегистрирован: 15 дек 2005, 12:57
Откуда: Татарстан, Набережные Челны

Сообщение Hrumer » 29 ноя 2006, 00:48

GNTB писал(а):Так. Стоп. Извините.

Всё, написаное МНОЙ выше (кроме первого поста) - считать бредом.
Я задал вопрос, не получил ответа (в тот момент), ударился в неподкреплённые практикой фантазии, а потом обьявил всё это правдой жизни. Это даже не глупость - это психическая аномалия. :(
- Доктор, мы его теряем!
- Не переживайте сестра, там таких еще целая палата.
:lol:

Не в сети
Квестунчик
Сообщения: 100
Зарегистрирован: 14 окт 2006, 01:34

Сообщение GNTB » 29 ноя 2006, 01:48

Нет. Я уникален в своей самонадеянности :?

Не в сети
Форумчанин
Сообщения: 41
Зарегистрирован: 15 дек 2005, 12:57
Откуда: Татарстан, Набережные Челны

Сообщение Hrumer » 29 ноя 2006, 09:09

GNTB писал(а):Нет. Я уникален в своей самонадеянности :?
По факту посты бесмысленные. В первом посте ты задал вопрос, во втором сам же на него ответил. Любиш сказки про серого/белого бычка?
Если это тебе нужно для своего проекта, то знания познаются именно в практике. Можно бесконечно облизывать технологию отображения спрайтов и одновременного перемещения их по экрану, но так и не вникнуть в смысл. Если есть идея, то на её основе нее можно создать концет проекта хоть на бумаге или в виде текстового файла, а уже потом реализовать это программно/графически.

Не в сети
Привет, я новенький
Сообщения: 3
Зарегистрирован: 28 янв 2007, 09:19

Re: Ламерский вопрос

Сообщение Dmitriy 1st » 08 фев 2007, 07:19

GNTB
Я серьёзно. Обьясните физику процесса.
мдаааа... вот и выросло поколение Windows... Одно радует - что твоя голова вообще задается подобными вопросами и пытается найти на них ответ, значит не все еще потеряно :)
На самом деле, все очень просто. Раньше, во времена DOS при написании любой игрухи (да и любой более-менее серьезной программы) был так называемый главный цикл, выглядивший в общих чертах так :

пока НЕ КОНЕЦ игры
отрисовать текущее состояние игрового экрана
опросить устройства ввода (и изменить в зависимости от реакции координаты героя, объектов)
пересчитать состояние самой игры (на основе изменившихся координат или просчитать реакцию AI на их изменение)
проиграть кусочек музыки
ПОВТОРЯТЬ

Как разбить все вышеозначенные пункты так, чтобы ни на одном из них программа не "залипала" слишком долго и тем самым не тормозила вывод графики, например, было задачей кодеров. Проигрывание музыки же вообще не было проблемой, ты наверное забываешь, что у звуковых карт, есть своя небольшая ОЗУ, можно всего десятком команд звуковой карте заставить ее пиликать разными MIDI инструментами хоть полчаса :) Тем не менее, подход этот не очень совершенен и чаще всего использовалась система прерываний. Для проигрывания цифровых сэмплов в интерактивном режиме использовалась система прерываний, а если быть точнее – прерывание системного таймера, которое инициировалось каждые 55 ms, подсадив на него свой обработчик, ты мог проигрывать что угодно и в какое угодно время.

А далее пришла эра Windows, которая является МНОГОЗАДАЧНОЙ ОС, т.е. она сама регулярно дает поработать всем запущенным программам, распределяя в соответствии с их приоритетом выделяемое им время. Запускаешь проигрыватель спецэффектов/музыки и контроллер устройств ввода в отдельных threads одного процесса (игры), организуешь связь между ними и все.

PS Это один из примеров. Также: например, почему в аркадах одновременно движутся и твой спрайт, и враждебные спрайты?
В самой программе они расчитываются по порядку, например сначала твой герой подвинулся на один пиксель (пока это только значение переменной в программе) потом программа пробежала циклом по массиву врагов и те, которые хотели подвинуться, также изменили свои переменные на единичку, далее идет команда вывести текущее состояние игры на экран и программа пробегает по координатам твоего героя и массиву врагови выводит в соответствующих местах спрайты. Никакого волшебства :)

Не в сети
Квестунчик
Сообщения: 100
Зарегистрирован: 14 окт 2006, 01:34

Re: Ламерский вопрос

Сообщение GNTB » 08 мар 2007, 20:58

Dmitriy 1st писал(а): Одно радует - что твоя голова вообще задается подобными вопросами и пытается найти на них ответ, значит не все еще потеряно :)


Угу... Спасибо. Изучаем потихоньку... 8)

Не в сети
Квестунчик
Сообщения: 100
Зарегистрирован: 14 окт 2006, 01:34

Туплю...

Сообщение GNTB » 13 июл 2007, 00:38

Туплю...

Написал такую ерунду:

#include <iostream.h>

main()
{
short unsigned int suiPeremennaya = 0;
cout << "suiPeremennaya = " << suiPeremennaya << endl;

_asm {
mov ax, 300
mov ah, 0
shr ax, 1
mov suiPeremennaya, ax
}

cout << "suiPeremennaya = " << suiPeremennaya << endl;

return 0;
}

Думал, получу 128. Пишет: 22... Я считал, что AH - верхняя восьмибитная часть 16-разрядного регистра AX. Что обнуляю я верхние 44, и оставляю 256. Затем совершаю сдвиг вправо. Память в x86 адресуется вроде от большего к меньшему, но это вроде здесь нипричём?

Всё. Я "завис". Жму reset для перезагрузки головного мозга. :)

Sorry, я "чайник".

Не в сети
Квестунчик
Сообщения: 100
Зарегистрирован: 14 окт 2006, 01:34

Сообщение GNTB » 13 июл 2007, 07:49

Действительно туплю...

00000001 00101100
00000000 00101100
00000000 00010110

Извините...
...спасибо за внимание. Всё правильно...
Ответить

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 39 гостей