ivagor, а сколько тактов всего во фрейме?
ivagor, а сколько тактов всего во фрейме?
С уважением,
Jerri / Red Triangle.
312*192=59904 такта/фрейм
Если ширма -- это просто черная рамка, то достаточно перерисовать столько строк, на сколько прокрутка. Правда в этом случае целесообразность ширмы под вопросом, зачем она? Но если там будет HUD с жизнями, уровнем, счетом итд, это будет не просто стереть две строки. Весь HUD придется перерисовывать целиком каждый раз.
Больше игр нет
metamorpho(22.07.2020)
Есть ещё одна мысля по поводу ширмы...
Левый верхний угол мельтешит, из-за того, что не хватает времени стереть ширму и снова нарисовать до подхода луча к верхнему левому углу рабочей области экрана...
А если сначала выставить ширму на новом месте, а потом удалять старую ширму... то мельтешить не должно.![]()
metamorpho(22.07.2020)
Без ширмы можно "гладко" без видимого заворота при скролле вывести только 1 или 2 строки (смотря как выводить и сколько цветов 8 или 16). С ширмой намного удобнее и проще, но, конечно, цветов в 2 раза меньше.
Тоже так думаю, поэтому и предлагаю оптимизировать сдвиг ширмы. В принципе промежуток времени доступный для ширмы можно увеличить, если ориентироваться не на прерывание, а на таймер синхронизированный с прерываниями (в духе эксолона и некоторых других программ). Но скорее всего без таймера можно обойтись если максимально ускорить сдвиг ширмы.
metamorpho(22.07.2020)
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Зачем выводить объекты которые не двигаются каждый фрэйм?
Если у вас фрэйм 50Гц... можно выводить чет-нечет- и не каких морганий не будет.
- - - Добавлено - - -
Может я не правильно выразился... у вас есть список отображения (связанный с обратным ходом луча), не включайте туда даже активные объекты если не было приращений.
Если по таймеру.. то можно разделить этот список на чет и не чет... в два раза меньше выводить.. на глаз не заметно.
БK 0010-01, БК 11М, БК11М+,МС 0511 (УКНЦ)х3, Atari 65XE, Commodore 64, AMIGA 500 (HDD), ZX EVO
metamorpho(22.07.2020)
Вверху и внизу экрана есть по 8 строк, которые появились из-за выбора размера спрайта 24х24 в итоге экран 240х240.
Ширма нужна для скрытия внизу рисования частей спрайтов при вертикальном скроллинге (они мельтешат).
Вверху ширма просто закрывает торчащую треть спрайта, т.к. в этой трети не отображается анимация движущихся элементов.
Сдвиг экрана при вертикальном скроллинге происходит так:
внизу экрана рисуется строка 8 точек и происходит скроллинг на 8 точек
итак три раза т.е. 8 х 3 =24 т.е. высота одного блока уровня
На данный момент задумка такая:
Жизни и уровни будут показываться только на статичном экране при потере жизни и при прохождении уровня.
Счёта в игре не будет, т.к. цель игры собрать все монетки, а вот сколько осталось собрать монеток
будет отражаться во время игры но пока точно не знаю как и где.
Сейчас код ширмы такой:
Скрытый текст
; это в программе обработки прерываний
;=================== ширма вверху
call shirm0 ; стираем ширму
lhld ashirm
lda scroll
adi 1
mov l,a
shld ashirm
call shirm1 ; рисуем ширму
call shirmbon ; дополнительно ещё раз рисуем первые семь столбиков чтобы убрать глюки слева вверху
;======================================= ширма снизу
call shirm0wwt ; стираем ширму
lhld ashirm2 ;
lda scroll
adi 9
mov l,a
shld ashirm2 ;
call shirm1wwt ; рисуем ширму
;=======================================
;================ Это подпрограммы
; стираем ширму
shirm0: lxi h,0
shld shirmx+1
jmp shirm
;
shirm1: lxi h,0FFFFh
shld shirmx+1
; jmp shirm
;
shirm: lxi h,0
dad sp ; HL=HL+SP
shld s_sp ; сохраняем значение стека
;
lhld ashirm ; в HL помещаем адрес куда выводить на экран
lxi d,0100h ; 256
shirmx: lxi b,0
mvi a,31
;
shirmc: sphl ; перенос из HL в SP 8
push b ; запись в экран 16
push b
push b
push b
dad d ; HL=HL+DE(256) переход на следующий столбик 12
dcr a ; 8
jnz shirmc ; 12
lhld s_sp ; возвращаем значение стека
sphl
ret
;===================================
shirm0wwt: lxi h,0
shld shirmxwwt+1
jmp shirmwwt
;
shirm1wwt: lxi h,0FFFFh
shld shirmxwwt+1
;jmp shirmwwt
;
shirmwwt: lxi h,0
dad sp
shld s_sp
;
lhld ashirm2
lxi d,0100h
shirmxwwt: lxi b,0
mvi a,31 ;32
;
shirmcwwt: sphl
push b
push b
push b
push b
dad d
dcr a
jnz shirmcwwt
;
lhld s_sp
sphl
;
ret
;======================================================
shirmbon:
lxi h,0
dad sp ; HL=HL+SP
shld s_sp ; сохраняем значение стека
;
lhld ashirm ; в HL помещаем адрес куда выводить на экран
lxi d,0100h ; 256
shirmxbon: lxi b,0ffffh
mvi a,7
;
shirmcbon: sphl ; перенос из HL в SP
push b ; запись в экран
push b
push b
push b
dad d ; HL=HL+DE(256) переход на следующий столбик
dcr a
jnz shirmcbon
lhld s_sp ; возвращаем значение стека
sphl
ret
[свернуть]
- - - Добавлено - - -
ivagor, никак не пойму как реализовать эту "змейку", можно небольшой пример кода....
Последний раз редактировалось metamorpho; 22.07.2020 в 15:29.
Скрытый текст
;вывод блока 8x2
;первые 8 точек в блоке 8x2
lxi b,8192
ldax d\ mov m,a\ inx d\ dad b
ldax d\ mov m,a\ inx d\ dad b
ldax d\ mov m,a\ inx d\ dcr l
;вторые 8 точек в блоке 8x2
lxi b,-8192
ldax d\ mov m,a\ inx d\ dad b
ldax d\ mov m,a\ inx d\ dad b
ldax d\ mov m,a\ inx d\ dcr l[свернуть]
При необходимости можно немножко разменивать "одновременность" на скорость за счет (как уже писал) вывода нескольких байт в одной плоскости перед ее сменой. Это очевидно связано с тем, что inr/dcr быстрее dad.
metamorpho(22.07.2020)
"Ё,,,,,,,,,,"...или мы не про компьютер говорим? Пусть меня все бьют палками....бейте дальше.. я помочь хотел..простите.
Последний раз редактировалось S_V_B; 23.07.2020 в 08:46.
БK 0010-01, БК 11М, БК11М+,МС 0511 (УКНЦ)х3, Atari 65XE, Commodore 64, AMIGA 500 (HDD), ZX EVO
metamorpho(22.07.2020)
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)