|
0 / 0 / 0
Регистрация: 06.01.2012
Сообщений: 16
|
||||||
Столкновение 2D объектов06.01.2012, 15:27. Показов 10337. Ответов 69
Метки нет (Все метки)
Делаю игру -арканоид, и сталкнулся с такой проблемой, когда шарик сталкивается с правой или левой стороной ракетки(пратформы), он(шарик) залетает в нутрь платформы, а не отталкивается от неё. Также дела обстоят и с блоками, которые он(шарик) должен сбивать.
Вот кусок кода, представляющий коллизию между шариком и платфомой:
0
|
||||||
| 06.01.2012, 15:27 | |
|
Ответы с готовыми решениями:
69
Столкновение объектов Как сделать, чтобы столкновение объектов было абсолютно неупругим |
|
0 / 0 / 0
Регистрация: 17.03.2012
Сообщений: 13
|
|||||||||||
| 30.07.2012, 14:29 | |||||||||||
|
Сделал два объекта (квадраты). Первый объект движется самостоятельно и отбивается от стен, второй управляется с клавиатуры. Каждый объект имеет свой класс.
Задача в том что бы при столкновении объектов первый отбивался от второго. Проблема в том что если объект находится в заданном программно положений, то второй отбивается нормально. Но если я сдвину его в другую сторону, то они проходят сквозь друг-друга. При этом первый объект (который движется самостоятельно) ударятся об невидимую пустоту, где находился первоначально второй объект. Вот код класса первого объекта:
0
|
|||||||||||
|
brony
77 / 57 / 4
Регистрация: 02.01.2012
Сообщений: 521
|
|
| 30.07.2012, 18:52 | |
|
2
|
|
|
24 / 23 / 3
Регистрация: 21.04.2012
Сообщений: 253
|
|
| 15.08.2012, 02:27 | |
|
Первый раз пишу игру. Это для справки )
Это простенькое обучение, я уже сделал, чтобы герой двигался и т.п. Но мне надо, чтобы при столкновении спрайта kick и спрайта opponent происходило взаимодействие. То есть враг получал урон) Как мне узнать : пересеклись ли они ? Могу добавить, что координата Y всегда 200, а модель удара по размерам 175x200 . Противник 125x200.
0
|
|
|
burning1ife
|
|
| 15.08.2012, 13:02 | |
|
http://www.techdays.ru/videos/2882.html
там есть ответ на твой вопрос с объяснением.
0
|
|
|
0 / 0 / 0
Регистрация: 14.10.2012
Сообщений: 19
|
||||||
| 24.10.2012, 19:16 | ||||||
|
Возникла проблема с обработкой столкновения объектов.
Контекст следующий: человечек бегает по блокам (типа вид сбоку) Подробнее - массив из "блоков" - точнее двумерный массив enum`ов, содержит информацию о типе блока (0 - пустой, 1,2... - разные текстуры) все блоки квадратные 32х32 и не двигаются. массив отрисовывается слева направо снизу вверх (то есть ось x обычная а ось y - как в обычной геометрии то есть инвертирована относительно игровой) Кроме того есть игровой объект(ы) (типа игрок) который представлен в виде точки. нужно чтобы эта точка нормально перемещалась (управление с клавиатуры) учитывая ненулевые блоки. казалось бы просто но наверное у меня кривые руки и я сделал не очень хорошо. подлагивает во всех смыслах. в смысле производительности и в смысле логичности. вот код обновления игрока и то что с ним непосредственно связано. Int2 - просто структура типа Vector2 но с int вместо float и без функций (служит для хранения позиции в массиве, в том числе и мнимой позиции)
Подскажите пожалуйста, как исправить мое убожество или, быть может, есть алгоритм поумнее? Весь проект вложен
0
|
||||||
|
25 / 25 / 0
Регистрация: 02.10.2012
Сообщений: 63
|
|
| 25.10.2012, 00:37 | |
|
Зачем обрабатывать весь массив ? Надо просто получить блок на котором стоит игрок, и взять для проверки все ближайшие к нему блоки на определённом расстоянии, например в 1 блок. и просто проверить коллизию с ними, если факт коллизии есть, тогда например выровнять перса или вернуть точку коллизии ...
Так же делать и с рендером мира, чтобы не рисовать 16384 х 512 блоков, а выбрать только видимые и нарисовать.
0
|
|
|
0 / 0 / 0
Регистрация: 14.10.2012
Сообщений: 19
|
|
| 25.10.2012, 09:09 | |
|
так я это и делаю. просто с поправкой на то что скорость и положение могут быть абсолютно любыми.
с рендером проблем нет
0
|
|
|
0 / 0 / 0
Регистрация: 14.10.2012
Сообщений: 19
|
|
| 26.10.2012, 18:47 | |
|
Ладно это вроде сам пофиксил пол проекта переписал вроде уже приемлимо работает. теперь у меня возник другой вопрос, впринципе похожий - как найти точку пересечения луча и некоторых блоков из этого массива?
выразить луч как уравнение прямой как я понимаю... а дальше с ним что делать? не все же блоки просматривать. даже если блоков будет не очень много то функция находящая эту самую точку пересечения будет вызываться достаточно часто так что она должна быть максимально эффективна. Прежде всего функция эта мне необходимо для трассировки пуль.
0
|
|
|
0 / 0 / 0
Регистрация: 25.08.2012
Сообщений: 4
|
|||||||||||
| 24.11.2012, 19:59 | |||||||||||
|
Собственно, делаю 2D rpg (этим мало кого удивишь тут), мой первый опыт так скажем, но если не будет проблем с художником, то игра будет очень не плохой, в плане механики куча идей, да и сюжет возможно не плох, но до этого ещё далеко...возник вопрос как же сделать коллизии и как вообще их считать в большом мире (единый мир, практически без отдельных локаций), про коллизии знаю много, но вот код популярнейших примеров понять до конца так и не смог, кто может пожалуйста объясните до мелочей (а лучше комментариями к каждой строке кода)?
На примере этого
P.S. сейчас реализовать секторы до конца не могу, из за того что тупо не дошёл до списков объектов в C#, встречался с ними, но сам не использовал. В плане знания ЯП: С++ доучиваю, C# в процессе изучения. Заранее спасибо. Добавлено через 4 часа 5 минут Хах, только сейчас понял, что весь код уже с комментариями Ладно, с коллизиями вопрос закрыт, а как на счёт разбиения на секторы? Есть у кого мысли по этому поводу?)
0
|
|||||||||||
|
25 / 25 / 0
Регистрация: 02.10.2012
Сообщений: 63
|
||
| 26.11.2012, 11:15 | ||
|
0
|
||
|
2 / 2 / 0
Регистрация: 10.06.2011
Сообщений: 26
|
|||||||||||
| 21.02.2013, 01:21 | |||||||||||
|
Есть коллекция объектов пули и коллекция объектов ящики
мне нужно чтобы при попадании пули в ящик они пропадали. Cначала я сделал так
сделал это через циклы в итоге ситуация та самая. пошел дальше. проверял просто коллекцию пуль на попадание в один объект, ничего не получилось. Потом я запихнул код проверки в метод апдейт и проверял на попадание с прямоугольником. И наконец то заработало!!!
На сколько я понял проблема в том что циклы с проверками не успевают обрабатываться. Что мне делать? Добавлено через 1 час 2 минуты Тема закрыта, проблема найдена!
0
|
|||||||||||
|
0 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 4
|
|||||||||||
| 27.02.2013, 07:44 | |||||||||||
|
Небольшой совет:
Лучше используйте вместо
curentBullet.rectangle = new Rectangle((int)pos.X, (int)pos.Y, 5, 5); Намного удобнее ![]() Точно также можно приводить и другие типы переменных.
0
|
|||||||||||
|
58 / 58 / 9
Регистрация: 09.01.2013
Сообщений: 247
|
|
| 27.02.2013, 09:34 | |
|
0
|
|
|
2 / 2 / 1
Регистрация: 08.08.2012
Сообщений: 27
|
|
| 20.06.2013, 22:09 | |
|
как сделать так чтобы объект, которым я руковожу, не пересекал ящик-спрайт, а останавливался когда достигнет его границы. заранее спасибо!
0
|
|
|
2 / 2 / 1
Регистрация: 08.08.2012
Сообщений: 27
|
|
| 21.06.2013, 01:27 | |
|
а что за переменная lp?
0
|
|
|
|
|
| 22.06.2013, 18:01 | |
|
Волшебные BoundingBox или Rectangle
0
|
|
|
15 / 15 / 1
Регистрация: 02.05.2013
Сообщений: 104
|
|||||||
| 30.06.2013, 14:12 | |||||||
0
|
|||||||
|
5 / 5 / 0
Регистрация: 10.05.2012
Сообщений: 63
|
|
| 11.07.2013, 02:46 | |
|
Всем привет, возникла потребность в использовании спрайтов произвольной формы. Что можно использовать кроме Ректангла и БоундингБокса для выделения криволинейной области к примеру?
0
|
|
|
45 / 45 / 4
Регистрация: 14.02.2013
Сообщений: 139
|
|
| 11.07.2013, 11:15 | |
|
посмотри по пиксельную коллизию
http://www.youtube.com/watch?v=asU7afngQ8U
0
|
|
|
|
|
| 11.07.2013, 15:08 | |
|
0
|
|
| 11.07.2013, 15:08 | |
|
Столкновение Объектов в Играх Столкновение объектов Столкновение объектов Столкновение объектов Столкновение объектов в 3d Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет:
1. Использовать системное время и дату,
2. Есть возможность вводить время и дату вручную.
3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
|
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber.
Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
|
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео:
https:/ / vkvideo. ru/ video-240781534_456239017
YouTube:
eY5-5PyI9NM
Текстовая версия
|
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать
Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
|
|
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства.
Родственных связей существует 8 ступеней, такие как:
p - отец
P - мать
q - муж
Q - жена
b - брат
B - сестра
s - сын
S - дочь
|
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире.
Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
|
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
|