Основной игровой цикл.
У меня получается наоборот.. таймер на 100м векторе живет своей жизнью.. обрабатывая список вывода (заранее просчитанных) активных объектов.
Вид для печати
Заодно привяжи к нему и синхронизацию игрового цикла.
Привяжи - это не значит, помести обработку игрового цикла внутрь обработчика кадровых пререываний.
На спектруме, повторюсь, так и делают. На кадровых прерываниях, например, висит музыка. А так же по ним синхронизируется игровой цикл.
Поясню:
Допустим есть десять подвижных объектов.
В основном цикле мы заранее просчитали положение сдвиг спрайта и сохранили в буфере (экранные координаты, размеры, адрес для стирания)+признак активности.
На основании этого сформировали список из 10 позиций который будет крутить таймер.
Единожды отобразив на экарне сбрасывается признак активности и выводятся только те объекты в которых произошли изменения.
т.е. сдвинул спрайт в буфере, установил признак активности - в следующем кадре он выводится.
- - - Добавлено - - -
я догадываюсь :)
т.е. там же сделать некий счетчик и мы будем знать сколько кадров прошло с прошлого раза.
Включить\Выключить сетевой таймер из ЦП можно только так?
Или есть еще варианты?Код:.ASCIZ <33><267> ;влючить сетевой таймер ЦП
.ASCIZ <33><277><267> ;вылючить сетевой таймер ЦП
Обновление:
https://yadi.sk/d/XLyQ-qbc_17P5w
Можно уже стрелять и геноцидить :)
Возможны глюки, все в процессе отладки.
на первом же экране при попадании в самого нижнего кого то там вылет,
https://pic.maxiol.com/thumbs2/15870...6153020502.png
повторный запуск, вылет этажом выше
https://pic.maxiol.com/thumbs2/15870...6153419971.png
Не молоти пробел как угорелый.. разбираюсь с этой проблемой, также в упор врагов не расстреливай (негуманно :) )
- - - Добавлено - - -
Такова цена асинхронности отрисовки.. глюки вылазят где не ждали, поэтому выше спрашивал про таймер.. все дружно промолчали :(
- - - Добавлено - - -
Еще неприятность - пробел пересекается с кнопкой вправо, так что при движении вправо стрелять не получится.
Бит 9 регистра 0177054 в магистрали ПП, установлен в 1 - не работает, сброшен в ноль - работает.
BIC #400,@#177054 - разрешить сетевой таймер в магистрали ЦП.
BIS #400,@#177054 - запретить сетевой таймер в магистрали ЦП.
Но есть одно НО. События сетевого таймера поступают на вход EVNT процессора, там по данному случаю устанавливается триггер, по установленному состоянию которого и производится прерывание по вектору 100. При удовлетворении прерывания триггер очищается. Теперь представим такую ситуацию: у нас в ЦП запретили прерывания командой MTPS #200. Установлен 7-й бит в PSW, прерывания не возникают, но импульсы на вход EVNT поступают, поэтому триггер сетевого таймера установлен. В магистрали ПП командой BIS #400,@#177054 запрещаем подавать импульсы на вход EVNT ЦП. Но триггер сетевого таймера остался в установленном состоянии. Поэтому при разрешении прерываний командой MTPS #0 всё равно проскочит одно прерывание по сетевому таймеру.