Здравствуйте, Александр Сергеевич, Вы писали:
АС>У твоего шарика есть радиус. АС>И есть отрезок который мы проверяем на столкновение с шариком.
....
Спасибо за подробный ответ. Но все же не все так просто.
Во-первых шарик круглый, а не квадратный, и поэтому проверять только 4 угловые точки — не совсем правильно. Из-за этого он будет отскакивать еще не дотронувшись до стенки.
Во-вторых для выяснения соприкосновения со стеной вы предлагаете определять лежит ли угловая точка шарика на отрезке, которому соответствует часть стены. Но ведь на самом деле вряд-ли точка будет непосредственно лежать на отрезке, скорее всего она его перелетит. (То есть точка в определенный момент лежала с одной стороны отрезка, в следующий проход игрового цикла она изменила свои координаты в соответствии с направлением полета шарика и уже лежит с другой стороны отрезка. Вариант когда точка попадает на отрезок очень редок)
Здравствуйте, Рома Мик, Вы писали:
РМ>Здравствуйте, Maraba, Вы писали:
M>>То есть можно определить две соседние точки и провести через них прямую, от которой и просчитывать отскок? (А производную накладно считать) РМ>Ну надо еще предусмотреть случай, когда эти точки совпадают, тогда перпендикуляр линии соединяющей центральную и соседние точки, ну а все три совпадать не могут по построению. РМ>Для трех точек это будет эквивалентно расчету производной. И я думаю, для пинбола достаточно точно.
Здравствуйте, Maraba, Вы писали:
M>Здравствуйте, Александр Сергеевич, Вы писали:
АС>>У твоего шарика есть радиус. АС>>И есть отрезок который мы проверяем на столкновение с шариком. M>....
M>Спасибо за подробный ответ. Но все же не все так просто. M> Во-первых шарик круглый, а не квадратный, и поэтому проверять только 4 угловые точки — не совсем правильно. Из-за этого он будет отскакивать еще не дотронувшись до стенки.
Ну ты же не для мейнфрейма пишешь игру . Поэтому нужны упрощения физической модели, чтобы меньше вычислять. Сделай квадрат на 5-10% меньше, и всё, пользователю этого хватит с головой. M> Во-вторых для выяснения соприкосновения со стеной вы предлагаете определять лежит ли угловая точка шарика на отрезке, которому соответствует часть стены. Но ведь на самом деле вряд-ли точка будет непосредственно лежать на отрезке, скорее всего она его перелетит. (То есть точка в определенный момент лежала с одной стороны отрезка, в следующий проход игрового цикла она изменила свои координаты в соответствии с направлением полета шарика и уже лежит с другой стороны отрезка. Вариант когда точка попадает на отрезок очень редок)
Ну это смотря на скорость движения Если 1 пиксел/цикл игры, то попадёт А если нет... Ну не обязательно проверять строго равенство (плюс надо учесть квадрат к-й немного меньше).
Здравствуйте, Александр Сергеевич, Вы писали:
АС>Ну это смотря на скорость движения Если 1 пиксел/цикл игры, то попадёт А если нет... Ну не обязательно проверять строго равенство (плюс надо учесть квадрат к-й немного меньше).
Ну если плюс-минус один пиксел, то тогда действительно попадает
Но все же почему проверять надо именно угловые точки? Вот представьте ситуацию, что мячик летит вниз, а мы проверяем угловые точки. В итоге соприкосновение будет просчитано очень не точно. Ведь в такой ситуации логичнее было бы проверять нижнюю точку шарика.
Наверное надо выбирать точку на окружности шарика в зависимости от направления его движения, и проверять только ее одну.
Здравствуйте, Maraba, Вы писали:
M>Честно говоря не понял. Можно поподробнее...
Можно.
Итак задача номер 1: найти все граничные точки, т.е. точки, о которые может стукуться шарик. Здесь заливка.
Задача 2: выстроить эти точки в последовательность. При этом возможно иногда эти точки будут повторятся, но только если где-то есть выступ в виде линии, тогда по этой линии придется пройтись туда и обратно. Здесь алгоритм выбирающий соседнии точки и помечающий, если идти некуда, то возвращающийся назад. (подробности опускаю)
Задача 3: для каждой точки последовательности найти угол к горизонту. Здесь достаточно для каждой точки взять две соседнии в последовательности и соединить прямой.
Здравствуйте, Рома Мик, Вы писали:
РМ>Здравствуйте, Maraba, Вы писали:
M>>Честно говоря не понял. Можно поподробнее... РМ>Можно. РМ>Итак задача номер 1: найти все граничные точки, т.е. точки, о которые может стукуться шарик. Здесь заливка. РМ>Задача 2: выстроить эти точки в последовательность. При этом возможно иногда эти точки будут повторятся, но только если где-то есть выступ в виде линии, тогда по этой линии придется пройтись туда и обратно. Здесь алгоритм выбирающий соседнии точки и помечающий, если идти некуда, то возвращающийся назад. (подробности опускаю) РМ>Задача 3: для каждой точки последовательности найти угол к горизонту. Здесь достаточно для каждой точки взять две соседнии в последовательности и соединить прямой.
Ну тогда получится следующее:
+++
+o+
+++
о — это данная точка на карте, + — возможные соседние точки. Если для вычисления угла составлять прямую данной точки с соседней, то тогда угол будет или 45 градусов или 90 или 180, что не есть хорошо.
Здравствуйте, Maraba, Вы писали:
M>Здравствуйте, Рома Мик, Вы писали:
РМ>>Здравствуйте, Maraba, Вы писали:
M>>>Честно говоря не понял. Можно поподробнее... РМ>>Можно. РМ>>Итак задача номер 1: найти все граничные точки, т.е. точки, о которые может стукуться шарик. Здесь заливка. РМ>>Задача 2: выстроить эти точки в последовательность. При этом возможно иногда эти точки будут повторятся, но только если где-то есть выступ в виде линии, тогда по этой линии придется пройтись туда и обратно. Здесь алгоритм выбирающий соседнии точки и помечающий, если идти некуда, то возвращающийся назад. (подробности опускаю) РМ>>Задача 3: для каждой точки последовательности найти угол к горизонту. Здесь достаточно для каждой точки взять две соседнии в последовательности и соединить прямой.
M>Ну тогда получится следующее: M>
M>+++
M>+o+
M>+++
M>
M>о — это данная точка на карте, + — возможные соседние точки. Если для вычисления угла составлять прямую данной точки с соседней, то тогда угол будет или 45 градусов или 90 или 180, что не есть хорошо.
Такого быть не может, т.к. угол ты ищешь среди граничных точек. У граничной точки строго два соседа (тоже принадлежащих границе).
Здравствуйте, Рома Мик, Вы писали:
РМ>Такого быть не может, т.к. угол ты ищешь среди граничных точек. У граничной точки строго два соседа (тоже принадлежащих границе).
Но ведь граничные точки находятся рядом. +/- один пиксель. Как там может быть какой-нибудь другой угол кроме 45, 90, 180 ?
Здравствуйте, Maraba, Вы писали:
M>Здравствуйте, Рома Мик, Вы писали:
РМ>>Такого быть не может, т.к. угол ты ищешь среди граничных точек. У граничной точки строго два соседа (тоже принадлежащих границе).
M>Но ведь граничные точки находятся рядом. +/- один пиксель. Как там может быть какой-нибудь другой угол кроме 45, 90, 180 ?
Понял, что ты имеешь ввиду. Во-первых там угол может быть еще и ~63 градуса, а во-вторых этого достаточно, так как есть еще угол полета мяча, поэтому однообразия на глаз заметно совершенно не будет, а отражаться будет вполне естественно.
Еще раз напишу, что пункт 3, можно заменить на построение сплайна через все точки, что даст более точный результат.
Здравствуйте, Александр Сергеевич, Вы писали:
АС>Уффффф. В общем вот так. Короче говоря, тебе нужен будет учебник по геометрии. Я вот в него сейчас заглядывал .
Здравствуйте, Pah, Вы писали:
Pah>Здравствуйте, Александр Сергеевич, Вы писали:
АС>>Уффффф. В общем вот так. Короче говоря, тебе нужен будет учебник по геометрии. Я вот в него сейчас заглядывал .
Pah>Оффтоп: сильное объяснение
Ну дык учебник по геометрии в этом вопросе действительно необходим. Да и вообще толстенький справочник по математике
Здравствуйте, Maraba, Вы писали:
M>Но все же почему проверять надо именно угловые точки? Вот представьте ситуацию, что мячик летит вниз, а мы проверяем угловые точки. В итоге соприкосновение будет просчитано очень не точно. Ведь в такой ситуации логичнее было бы проверять нижнюю точку шарика.
Образно говоря, угловые точки это экстремум. А очень точно считать тебе и не надо. Тебе нужна упрощенная физ. модель системы.
M>Наверное надо выбирать точку на окружности шарика в зависимости от направления его движения, и проверять только ее одну.
Как я писал, у тебя есть вектор направления. Проводим луч из центра шарика по направлению этого вектора. Ищем пересечение этого луча со стенкой. Эта точка пересечения и есть ориентир. Этот поиск надо вести только при столкновении шарика с чем-либо. Тогда и вычислений меньше и точность выше
M>>Я конечно могу ошибаться, но движения шариков в пинболах скорее напоминает движение под углом к горизонту в одной плоскости, чем движение по наклонной плоскости
АС>Ничего не понимаю А это причем?
АС>Хотя физика была на первом курсе, может я чего путаю
Это я к тому, что в пинболах на PC скорее всего движение не по наклонной плоскости, а по вертикали. А иллюзию наклонной плоскости создает картинка на фоне
M>Собираюсь делать игру пинбол для мобильного на j2me. Разрабатываю алгоритм и не могу кое-чего понять: как вычислить направление отскока шарика от кривой поверхности? (зал (игровое поле) хранится как картинка в растровом формате)
1. вслед за этим пойдет вопрос: "Ой, а как мне прочитать пиксели из картинки на j2me?" :D
2. Пинболов на j2me уже столько делано-переделано (тыб еще арканоид или тетрис взялся писать :D) что никакого коммерческого смысла заниматься очередным пинболом просто-напросто нет. Увы и ах.
3. Как старый волк демо-дизайна посоветую единственную более-менее приемлемую реализацию. Пришла на ум только что. Тупо до безобразия.
Делаешь поверх своей графики пинбольного стола еще одну картинку (карту) — карту отражений шарика.
В нее руками (лично я бы не стал писать алгоритм для ее изготовления) прописываешь значения насколько сильно отклонять dx/dy шарика.
Всё.
Кстати, тебе бы и так пришлось изготовлять разные карты. Их в хорошем пинболе, по-идее даже не одна а целая серия — там есть магнитные зоны, отталкивающие, искриваляющие, и тд.
Здравствуйте, Maraba, Вы писали:
M>Наверное надо выбирать точку на окружности шарика в зависимости от направления его движения, и проверять только ее одну.
Не поможет, а если он по касательной (чуть боком, а не только передом) ударился?
Разбей доску на квадраты, а стенки "зала" — на отрезки. Каждый тик проверяй отрезок, который проехал шарик (от точки, в которой вектор, обратный вектору скорости, пересекает окружность шарика в нач. позиции до точки, в которой вектор скорости пересекает окружность шарика в конечной позиции) на пересечение со всеми отрезками, входящими в тот квадрат, где сейчас шарик и с границами квадрата. Если траектория шарика перескла один из отрезков "стен", можно вычислить точку касания, угол отскока, и скорректировать траекторию. Затем надо проверить оставшую часть траектории шарика (иначе он сможет после отскока в узких коридорах летать сквозь стены).
Переходы шарика из квадрата в квадрат должны происходить при пересечении им границ квадратов, и, естесственно, должна срабатывать второй раз проверка траектории, уже с отрезками в другом квадрате.
Поле разбить на квадраты можно равномерно, а можно — в зависимости от плотности стенок (например, пустое место сделать одним квадратом, а "лабиринт" — 8-ю, оптимизируй на количество вычислений в секунду и глубину разбиения — это напрямую влияет на скорость и память. Разбиение, естесственно, должен генерить редактор автоматически.
p.s.: зачем дополнительные проверки? в играх типа пинболла шарик можно разогнать до огромной скорости, реально о может летать (на компе, правда) порядка 20 пикселей/тик (зависит от кол-ва тиков, конечно, но может, я делал пинг-понг, пока не стал проверять отрезки, у меня шарик летал сквозь сетку )
Здравствуйте, alex_raider, Вы писали:
M>>Собираюсь делать игру пинбол для мобильного на j2me. Разрабатываю алгоритм и не могу кое-чего понять: как вычислить направление отскока шарика от кривой поверхности? (зал (игровое поле) хранится как картинка в растровом формате)
_>1. вслед за этим пойдет вопрос: "Ой, а как мне прочитать пиксели из картинки на j2me?" :D
_>2. Пинболов на j2me уже столько делано-переделано (тыб еще арканоид или тетрис взялся писать :D) что никакого коммерческого смысла заниматься очередным пинболом просто-напросто нет. Увы и ах.
В принципе есть, при наличии каналов распространения или выходов на онный тысячи две долларов подняьт на игре можно. Но только себестоимость будет дороже таки.
_>3. Как старый волк демо-дизайна посоветую единственную более-менее приемлемую реализацию. Пришла на ум только что. Тупо до безобразия. _>Делаешь поверх своей графики пинбольного стола еще одну картинку (карту) — карту отражений шарика. _>В нее руками (лично я бы не стал писать алгоритм для ее изготовления) прописываешь значения насколько сильно отклонять dx/dy шарика.
Можно еще проще. Есть карта — в ней разными уветами ОТДЕЛЬНЫЕ типы поверхностей. Т.е. красный сфера диаметра R1, синий сфера диаметра R2, зеленый наклонная плоскость с углом A, фиолетовый пружинищая сфера радиусом R3 и придающая шарику ускорение X.
Т.е. каждую точку задават не нужно..
По такой методики сделанные все известные мне pinball-ы.
_>Всё. _>Кстати, тебе бы и так пришлось изготовлять разные карты. Их в хорошем пинболе, по-идее даже не одна а целая серия — там есть магнитные зоны, отталкивающие, искриваляющие, и тд.
_>>1. вслед за этим пойдет вопрос: "Ой, а как мне прочитать пиксели из картинки на j2me?" :D
_>>2. Пинболов на j2me уже столько делано-переделано (тыб еще арканоид или тетрис взялся писать :D) что никакого коммерческого смысла заниматься очередным пинболом просто-напросто нет. Увы и ах.
Y>В принципе есть, при наличии каналов распространения или выходов на онный тысячи две долларов подняьт на игре можно. Но только себестоимость будет дороже таки.
Ну вот интересно что и сколько стоит на этом рынке. А то я тут сижу и гадаю насколько надувапть щеки. =)
Написал блокбастер игру с сабгеймами, заставки, музыка, графика..
Если есть какие-то слышаные цифры, будь добр, откинь приватное сообщение или пошли мыло.
_>>3. Как старый волк демо-дизайна посоветую единственную более-менее приемлемую реализацию. Пришла на ум только что. Тупо до безобразия. _>>Делаешь поверх своей графики пинбольного стола еще одну картинку (карту) — карту отражений шарика. _>>В нее руками (лично я бы не стал писать алгоритм для ее изготовления) прописываешь значения насколько сильно отклонять dx/dy шарика.
Y>Можно еще проще. Есть карта — в ней разными уветами ОТДЕЛЬНЫЕ типы поверхностей. Т.е. красный сфера диаметра R1, синий сфера диаметра R2, зеленый наклонная плоскость с углом A, фиолетовый пружинищая сфера радиусом R3 и придающая шарику ускорение X.
Так это и имелось в виду. Я бы сделал слоями в фотошопе, потом бы отгрузил в RAW формат.
Y>По такой методики сделанные все известные мне pinball-ы.
Пинболы не копал =)
p.s.
Имхо пинбол далеко не тот класс игр, неудобно на мобиле, экран слишкеом мелкий. Играть с просмотром фрагмента уровня довольно неудобно. А если тормозной блюреный дисплей как на Siemens *55 то вообще швах.
Здравствуйте, alex_raider, Вы писали:
_>>>1. вслед за этим пойдет вопрос: "Ой, а как мне прочитать пиксели из картинки на j2me?" :D
_>>>2. Пинболов на j2me уже столько делано-переделано (тыб еще арканоид или тетрис взялся писать :D) что никакого коммерческого смысла заниматься очередным пинболом просто-напросто нет. Увы и ах.
Y>>В принципе есть, при наличии каналов распространения или выходов на онный тысячи две долларов подняьт на игре можно. Но только себестоимость будет дороже таки.
_>Ну вот интересно что и сколько стоит на этом рынке. А то я тут сижу и гадаю насколько надувапть щеки. =) _>Написал блокбастер игру с сабгеймами, заставки, музыка, графика..
Болкбастер игра — это какой жанр?
Вообщем не совсем понятно про "надувать щеки" — если речь идет о продажи проекта целиком, то мало данных. А так надувать щеки нужно когда крупные операторы взяли у тебя игру, а совсем раздвувать если они еще в и топе.
Тем более уже говорилось — если игра не портированная хотя бы на 30-40 моделей (а в идеале на 60-80) то ценность ее не велика какая она бы интерестная и красивая не была.
Думаю проще будет если напишешь письмо с конкретными вопросами..... Собственно секрета никакого то нет, не совсем понятно о чем рассказывать.
В целом все просто — стоимость игры 2-5 баксов. Оператор отчисляет 40-50%. Издатель забирает тоже около 50%. Хорошая игра в топе крупного опертора продается ну никак не менее 5 тысяч копий в месяц. А реально разброс от 5 до 50 тысяч. В зависимости от опертора.
_>>>3. Как старый волк демо-дизайна посоветую единственную более-менее приемлемую реализацию. Пришла на ум только что. Тупо до безобразия. _>>>Делаешь поверх своей графики пинбольного стола еще одну картинку (карту) — карту отражений шарика. _>>>В нее руками (лично я бы не стал писать алгоритм для ее изготовления) прописываешь значения насколько сильно отклонять dx/dy шарика.
Y>>Можно еще проще. Есть карта — в ней разными уветами ОТДЕЛЬНЫЕ типы поверхностей. Т.е. красный сфера диаметра R1, синий сфера диаметра R2, зеленый наклонная плоскость с углом A, фиолетовый пружинищая сфера радиусом R3 и придающая шарику ускорение X.
_>Так это и имелось в виду. Я бы сделал слоями в фотошопе, потом бы отгрузил в RAW формат.
Y>>По такой методики сделанные все известные мне pinball-ы.
_>Пинболы не копал =)
_>p.s. _> Имхо пинбол далеко не тот класс игр, неудобно на мобиле, экран слишкеом мелкий. Играть с просмотром фрагмента уровня довольно неудобно. А если тормозной блюреный дисплей как на Siemens *55 то вообще швах.
У пинбола есть другой минус который перекрывает все остальные его минусы — их очень много. Сложно найти оператора у которого в деке бы небыло пинбола. А если он есть, уговорить взять еще один — сложно.
Да, согласен что я не отписал никакой информации, пока не буду распространяться преждевременно. Скажу что ничего сверх-оригинального, но игра содержит game-story и внутри себя содержит ряд подигр, а-ля лучшие тайтлы с zx, nes, snes...
Сейчас единственное что, — ломаю голову чтобы привести игру в фантастический вид согласно моим представлениям, т.е. ищу художника. Ох и нелегкое это дело =)