Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 05.09.2011, 00:59
Gaen вне форума Посмотреть профиль Отправить личное сообщение для Gaen Найти все сообщения от Gaen
  № 11  
Ответить с цитированием
Gaen
strange mood
 
Аватар для Gaen

модератор форума
Регистрация: Jul 2004
Адрес: Питер
Сообщений: 1,653
Записей в блоге: 1
Отправить сообщение для Gaen с помощью ICQ Отправить сообщение для Gaen с помощью Skype™
Цитата:
Я не могу знать какой объект окажется на пути пули, они все движутся.
Зато можете знать, какой объект был на пути пули между предыдущим и текущим тиком.

1. Любая прямая описывается функцией y = k*x + b

2. Находим k и b для прямой, по которой летит пуля, решив систему уравнений:
yPast == k*xPast + b && yNow == k*xNow + b

3. Аналогично находим k и b для прямой, по которой движется враг

4. Ищем координаты пересечения прямых:
y == kBullet*x + bBullet && y == kEnemy*x + bEnemy

5. Проверяем, принадлежит ли точка пересечения к отрезкам, которые враг и пуля прошли за 1 тик:
(x между xBulletPast и xBulletNow) && (y между yBulletPast и yBulletNow) && (аналогично для enemy)

На этом в принципе можно и остановиться, но если пули летают ОЧЕНЬ быстро, то можно продолжить:

6. Вычисляем соотношение, в котором точка пересечения делит отрезок пули
7. Через это соотношение получаем точку на отрезке врага
8. Ставим пулю на точку пересечения отрезков, а врага - на только что вычисленную точку
9. Проверяем на столкновение.
__________________
тонкий тролль, осеянный благодатью

Старый 05.09.2011, 09:27
randomnoob вне форума Посмотреть профиль Отправить личное сообщение для randomnoob Найти все сообщения от randomnoob
  № 12  
Ответить с цитированием
randomnoob

Регистрация: Sep 2010
Сообщений: 42
Может попробовать по таймеру двигать и просчитывать? Так можно хоть каждую миллисекунду делать проверки.

Старый 05.09.2011, 10:00
SvetozarPNZ вне форума Посмотреть профиль Отправить личное сообщение для SvetozarPNZ Найти все сообщения от SvetozarPNZ
  № 13  
Ответить с цитированием
SvetozarPNZ
 
Аватар для SvetozarPNZ

Регистрация: Dec 2009
Сообщений: 125
Записей в блоге: 1
Gaen, мне кажется там нужно измерять время движения пули и оъекта до точки столкновения. И если оно с определенным приблежением одинаково, то фиксировать столкновения. А так даже внутри одного тика зрительно пуля может пролетать мимо врага. Все много проще если враги медленнее пули, а если наш перс попал в бушующее астероидное поле. Короче, во многих случаях решение Bgg было бы исчерпывающим.

Старый 05.09.2011, 12:23
Tr1te вне форума Посмотреть профиль Отправить личное сообщение для Tr1te Найти все сообщения от Tr1te
  № 14  
Ответить с цитированием
Tr1te
 
Аватар для Tr1te

Регистрация: Jun 2009
Сообщений: 461
Самый правильный вариант это то что написал derhab, проверять математически. Например: пуля летит и куча юнитов которые перемещаются во время полета пули, у тебя есть промежуток между точками проверки столкновения, и ты боишься что юнит окажеться между двумя точками. Но ты можешь в каждую итерацию считать вектор полета где начало - предыдущая точка, а конец - текущая точка и смотреть не было ли столкновения.

Старый 05.09.2011, 21:28
rastapure вне форума Посмотреть профиль Отправить личное сообщение для rastapure Найти все сообщения от rastapure
  № 15  
Ответить с цитированием
rastapure

Регистрация: Dec 2010
Сообщений: 1
Можно совсем извращенным путем. На онФрейме каждый раз продвигать попиксельно циклом, проверяя столкновения.

Старый 11.10.2011, 21:18
npou вне форума Посмотреть профиль Отправить личное сообщение для npou Найти все сообщения от npou
  № 16  
Ответить с цитированием
npou

Регистрация: May 2009
Сообщений: 2
Цитата:
Сообщение от Gaen Посмотреть сообщение
2. Находим k и b для прямой, по которой летит пуля, решив систему уравнений:
yPast == k*xPast + b && yNow == k*xNow + b
а если
yPast = 10 xPast = 10

yNow = 30 xNow = 10

как быть тогда?

Старый 11.10.2011, 21:44
botbot вне форума Посмотреть профиль Отправить личное сообщение для botbot Найти все сообщения от botbot
  № 17  
Ответить с цитированием
botbot

Регистрация: Feb 2011
Сообщений: 100
1 использовать детектор столкновений из физического двига.
2 каждый фрейм сравнивать пересечение не с пулей, а с отрезком, который пуля пролетает.
Пункт 2 тебе тут как раз пытаются расписать подробнее.

Старый 12.10.2011, 00:48
Котяра вне форума Посмотреть профиль Отправить личное сообщение для Котяра Посетить домашнюю страницу Котяра Найти все сообщения от Котяра
  № 18  
Ответить с цитированием
Котяра
буду краток
 
Аватар для Котяра

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
Цитата:
1 использовать детектор столкновений из физического двига.
А там прям совсем другая математика, и вообще другая вселенная)
__________________
Отряд Котовскага

Старый 12.10.2011, 14:02
botbot вне форума Посмотреть профиль Отправить личное сообщение для botbot Найти все сообщения от botbot
  № 19  
Ответить с цитированием
botbot

Регистрация: Feb 2011
Сообщений: 100
Цитата:
Сообщение от Котяра Посмотреть сообщение
А там прям совсем другая математика, и вообще другая вселенная)
Нет конечно, просто там всё уже готовое, останется просто "выдрать" детектор и привязать его к своему коду. Не надо будет заморачиваться над математикой.

Старый 12.10.2011, 14:30
yo3o вне форума Посмотреть профиль Отправить личное сообщение для yo3o Найти все сообщения от yo3o
  № 20  
Ответить с цитированием
yo3o

Регистрация: Jun 2010
Сообщений: 153
Вот тебе самый простой способ!
И так у тебя есть пуля! её скорость движения 100п верно?
Решения проблемы: создаем пустой мувиклип в нем пулю и еще один объект длиной 100пикселей (невидимый! (visible=false; или просто шириной 0.1)) двигаем пулю по 100пикселей и невидимый объект и если у нас есть тихтест врага с невидимым объектом то удаляем мувиклип в котором пуля и невидимым объект! вот и все!

Создать новую тему Ответ Часовой пояс GMT +4, время: 22:39.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 22:39.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.