В коде же все написано :) пока только столкновения с кирпичами.
Вид для печати
не знаю де код
там отсылка к тетрису
да и 8080 мнемоники не читаемые
изза чего по моему все так плохо и получается
- - - Добавлено - - -
из этого вопрос по океануЦитата:
Отключаем ПЗУ для доступа к экранному ОЗУ
Включаем ПЗУ обратно
что происходит при подключении экранного озу
что нужно выключать его потом обратно
(во львове, например, это обусловлено отпаданием 16К памяти)
Например: мячик круглый, кирпичи угловатые. Есть траектории, в которых мячик проходит опасно близко к острому кирпичному углу, но это не коллизия.
- - - Добавлено - - -
Сорцы тут - https://github.com/timtashpulatov/ok...master/ark.asm
ПЗУ обратно включается, чтобы пользоваться штатной процедурой опроса клавиатуры.
и этим вы неимоверно усложняете движок и замедляете его
мячик можно описать 4-мя 6-ю точками
проще сделать кирпич строго прямоугольным
закруглением в один пиксель принебречь
кирпичи не распологаются попиксельно
а обычно по сетки 8х8
из чего можно неимоверно все упростить и оптимизировать
и проверять столкновение с кирпичами простым
cp (hl)
jp nz,collision
на каждый шаг шарика
и сразу при этом читать номер кирпича
(250 кирпичей(больше низя) на экране с головой хватит)
- - - Добавлено - - -
забудтье про ПЗУ навсегдаЦитата:
ПЗУ обратно включается, чтобы пользоваться штатной процедурой опроса клавиатуры.
пишите свою процедуру опроса
- - - Добавлено - - -
я говорю про попиксельное перемещение мячика
и полет его под любыми углами не кратными 45 градусам
какой нафик битмап
нужно 32х32 байта памяти
и подсказка
нормальные люди для большей скорости разместят их так
(адреса условно с А000 чисто для прммера)
A000 A001 A002... ...A01Е A01F
A100 A101 A102... ...A11Е A11F
................................................
BE00 BE01 BE02... ...BE1Е BE1F
BF00 BF01 BF02... ...BF1Е BF1F
и все будет летать
можно конечно с экономить памяти
и разместить все линейно
но потерять в скорости...
можно ложить рядом с этим буфером (A020...A0FF A120...A1FF итд)
другие данные
например графику
или карты уровней
каждому кирпичу присваиваем свой номер
потом пиксельные координаты мячика делим на 8 и проверяем что в этом буфере
с кем мы столкнулись или не столкнулись
по остатку от деления
можем определить с какой стороны мы столкнулись
и в правильную сторону отразить мячь
(мы не можем зацепить верхний пиксель залетев снизу)
для стен так же нужно присвоить свои номера
столкновение с ракеткой обрабатывать отдельным кодом
так же как и столкновение со всякими посторонними летучками
так же подсказка
для пуляния мячика под любым углом
нужны таблички синуса и косинуса
которых в сорце не видно
попиксельная точность детекции столкновений не нужна
ее часто нет в фирменных играх
и ты получаешь даже если тебе попали по пустому месту...
- - - Добавлено - - -
условный пример содержания буфера
(так же можно упростить детекцию потери шарикаКод:11111111111111111111111111111
20000000000000000000000000003
20000000000000000000000000003
20044556677889900000000000003
2000AABBCCDDEEFF0000000000003
20000000000000000000000000003
20000000000000000000000000003
20000000000000000000000000003
нарисовав в буфере дно как стену со своим номером
(в качестве бонуса
ставящего отбивалку можно быстро пририсовать вместо дна вызывающего проигрыш
дно вызывающее отбивание))
далее нам нужна
проверка по табличке
с чем же мы столкнулись
(табличка генерируется в начале уровня
(то есть каждому блоку присваивается его тип))
напомню что 250 блоков это
16х15 широких кирпичей
256х120 пикселей сплошных рядов кирпичей
в принципе не сложно расширить набор почти до 64К
но зачем?
- - - Добавлено - - -
кстате таким образом можно легко проверить столкновение всех наружных пикселей шарика
после деления координаты каждого такого пикселя
в конечном итоге останется 1 2 координаты для проверки по буферу
...но смысл проверять все?
на всякий случай напомню что деление на 8 делается 3-мя rra
а то мало чего еще нагородят...
- - - Добавлено - - -
В принципе не обязательно присваивать каждому блоку свой номер
это не сильно рационально
нужно только отделить соседние друг от друга
а определять что стирать в видео памятиКод:11111111111111111111111111111
20000000000000000000000000003
20000000000000000000000000003
20044554455445544554455440003
20006677667766776677667700003
20088998899889988998899880003
2000AABBAABBAABBAABBAABB00003
200CCDDCCDDCCDDCCDDCCDDCC0003
20000000000000000000000000003
20000000000000000000000000003
20000000000000000000000000003
2FFFFFFFFFFFFFFFFFFFFFFFFFFF3
на основе адреса в буфере
NEO SPECTRUMAN, ну вы сорцы-то гляньте, вдруг там кое-какие жемчужины кодинга уже реализованы.
- - - Добавлено - - -
http://sensi.org/~tnt23/ok240/ticks.png
Вложение 78774
На реале совсем другой коленкор, синкаться по лучу легко и приятно. Верхний слой синих кирпичей - это мячик, пойманный в момент относительного бездействия.
Ниже идет слой красных кирпичей, это перерисовка ракетки. Фиг знает, почему так жруче, там вообще никаких тяжелых проверок и рендера нет.
Тощая зеленая прокладка - отрисовка двух бонусов.
main_loop() выглядит примерно так:
Код:call SyncToRetrace
call ProcessBall ; белая полоса
call ProcessBatty ; красная полоса
call ProcessBonusList ; зеленая полоса
jmp Begin
потом как нить набросаю арканоид для львова
более слабой машины
но с таким же тяжеловесным экраном 256х256 4 цвета
с более неудобной адресацией
+нет прерываний
для сравнения
- - - Добавлено - - -
так понимаю на океане
пиксели тоже прямоугольные?
с каким примерно соотношением сторон?
- - - Добавлено - - -
В океане всего 8 палитр?
- - - Добавлено - - -
жумчужина...
mvi a, 0
у вас там есть прерывания от таймераЦитата:
SyncToRetrace
; подождем наступления ретрейса
in 41h
ani 2
jz SyncToRetrace
ret
а таймер и проц и видео скорей всего тактируются от одного кварца
поэтому возможно можно организовать прерывания по кадровому синхроимпульсу
или вообще даже построчные прерывания (или с каким то шагом)
ГС ГК - это гашение кадровое гашение строчное?
по ходу у вашего океана неимоверные нериализованные возможности...
то есть среди советских компов на 8080
девайс можно было бы поставить за вектором
при правильном подходе...
и экран у вас рационально организованный
(лишь слегка хуже чем на векторе, орионе, специалисте)
тоесть синхронизируемcя с ГК
потом с ГС
запускаем таймер на нужной частоте
и все
по rst4 можем рисовать палитровые мультиколоры из коробки
(тоесть больше чем 4 цвета на экране)
без особых усилий...
можно одновременно даже играть музыку звуки
выполняя при этом код
повесив пищалку на прерывания порядка 10Кц
на узкоимпульсном биперном движке можно даже 5Кц
чтоб меньше сьедать процесорного времени
вангую что этот океан эмулируется на уровне "ниже плинтуса"
- - - Добавлено - - -
Шото мне аж самому запонравился ваш компутер
Но я не потяну ищо одно "тянение за уши" еще одной платформы...
я не справляюсь со своими...
...опять же которая еще и не эмулируется...
- - - Добавлено - - -
к примеру
всякие collision model-и из GTA
сферы скорей всего просто описаются кодом а не полигонами
и скорей всего служат до уточнения куда именно пришлось(фары двери капоты) столкновения с простой квадратной моделью
которые под ними
https://cs1.gtaall.net/screenshots/d...r1.1beta-1.jpg
http://real.gta-bg.com/info/tutorials/colls/pics/3.gif
никто не просчитывает закругление в пол пикселя...
на приставках со спрайтами
детекция колизий же часто происходит аппаратно...
- - - Добавлено - - -
это я пропустил когда читал
и решил что речь про закругления кирпичей
шарик да лучше учитывать его закругление
или можно сделать шарик совсем маленьким 5х5
а закруглением в 1 пиксель пренебречь
tnt23, ты был прав, надо было сразу на форуме обсуждать, чтобы несколько раз об одном и том же не говорить.