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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 25.11.2008, 16:43
SenCheR вне форума Посмотреть профиль Отправить личное сообщение для SenCheR Найти все сообщения от SenCheR
  № 1  
Ответить с цитированием
SenCheR

Регистрация: Sep 2008
Сообщений: 50
Отправить сообщение для SenCheR с помощью Skype™
По умолчанию Проблема: Делаю Аэрохоккей

Уже готово поле, шайба отскакивает от стен.
Люди подскажите как сделать отскок от "клюшек", чтобы шайба отлетала под отраженным углом и со скоростью удара?

Добавлено через 3 минуты
Клюшки круглые - 50х50пикселей, шайба круглая 32х32.

Старый 25.11.2008, 16:53
CrazyFlasher вне форума Посмотреть профиль Отправить личное сообщение для CrazyFlasher Найти все сообщения от CrazyFlasher
  № 2  
Ответить с цитированием
CrazyFlasher
 
Аватар для CrazyFlasher

Регистрация: May 2003
Адрес: Tallinn
Сообщений: 3,182
...короче, люди, сделайте за меня
http://www.google.ee/search?hl=ru&q=...1%81%D0%BA&lr=

И ещё советую книгу "Making Things Move!"...только он для АС3...но алгоритмы везде одинаковые независимо от языка

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

Регистрация: Jul 2008
Адрес: Украина, Херсон
Сообщений: 635
Отправить сообщение для Division с помощью ICQ
При отскоке шайбы от клюшки, тебе нужно учитывать направление движения самой шайбы и клюшки? Я бы не учитывал, ИМХО так будет играбельней. Если надо, сам потом расширишь алгоритм.
Так как у нас и шайба и клюшка - это окружности, после удара шайба будет двигаться по вектору, который можно провести от центра клюшки до центра шайбы(изменишь, если не устраивает). Самое сложное - определить координаты шайбы и клюшки в момент столкновения. Простой hitTest тут естественно не подходит, так как шайба и клюшка могут двигаться с большими скоростями и пролететь друг сквозь друга. Я бы решил это через систему уровнений. Сейчас я не могу привести её, так как исходник реализующий это на домашнем компе( в своё время делал арканоид (: ), вечером если надо скину. Смысл в том что можно записать уровнение движения шайбы и клюшки как
Код:
Xш = X0ш+Vxш*t
Yш = Y0ш+Vyш*t
Где X0ш, Y0ш - начальная позиция, Vx, Vy - горизонтальная и вертикальная скорость, t - время
То де самое для клюшки
Код:
Xк = X0к+Vxк*t
Yк = Y0к+Vyк*t
Они столкнуться если расстояние между ними будет равно сумме радиусов. Дописываем в систему
Код:
(Xк-Xш)^2 + (Yк-Yш)^2 = (Rш+Rк)^2
Вообщем всё записанное это одна большая система. Найти нам надо t - время, через которое они встретятся. После нахождения t подставляем его в любые уравнения и находим X и Y шайбы или клюшки.
Если надо, вечером выложу рабочий код, на Delphi правда.
__________________
while(1) {}


Последний раз редактировалось Division; 25.11.2008 в 17:10.
Старый 25.11.2008, 17:13
SenCheR вне форума Посмотреть профиль Отправить личное сообщение для SenCheR Найти все сообщения от SenCheR
  № 4  
Ответить с цитированием
SenCheR

Регистрация: Sep 2008
Сообщений: 50
Отправить сообщение для SenCheR с помощью Skype™
Буду благодарен за любую помощь.

У меня столкновение определяется так:
Код:
function checkPaddle(ball) {
			
		if (distance(paddle, ball)<paddleRadius+ballRadius) {
			return (true);}
			return (false);
}

function distance(clip1, clip2) {
	// find distance between two movie clips
	xx = clip1._x-clip2._x;
	yy = clip1._y-clip2._y;
	return (Math.sqrt(xx*xx+yy*yy));
}
где paddle-клюшка, ball - шайба

не могу сделать как правильно отскочить шайбе


Последний раз редактировалось iNils; 25.11.2008 в 17:43.
Старый 25.11.2008, 17:44
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 5  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
SenCheR, для оформления своего кода, надо использовать теги [code][/code].
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 25.11.2008, 18:02
SenCheR вне форума Посмотреть профиль Отправить личное сообщение для SenCheR Найти все сообщения от SenCheR
  № 6  
Ответить с цитированием
SenCheR

Регистрация: Sep 2008
Сообщений: 50
Отправить сообщение для SenCheR с помощью Skype™
Спасибо. А есть ли какой-то простой вариант без времени?
Может сделать отбивные точки - 4 вверху, внизу, слева и справа и 4 по диагоналям биты?

Старый 25.11.2008, 18:28
Division вне форума Посмотреть профиль Отправить личное сообщение для Division Найти все сообщения от Division
  № 7  
Ответить с цитированием
Division
 
Аватар для Division

Регистрация: Jul 2008
Адрес: Украина, Херсон
Сообщений: 635
Отправить сообщение для Division с помощью ICQ
Простой вариант - каким-то образом определяем, что столкнулись. То есть имеем центры шайбы(Pш) и клюшки(Pк) в момент столкновения. Тогда шайба отлетит по вектору V:

Код:
v = normalize(Pш-Pк)*Speed
Так сойдёт?
__________________
while(1) {}

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

Регистрация: Sep 2008
Сообщений: 50
Отправить сообщение для SenCheR с помощью Skype™
Спасибо попробую. А исходник когда можно будет глянуть?

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

Регистрация: Jul 2008
Адрес: Украина, Херсон
Сообщений: 635
Отправить сообщение для Division с помощью ICQ
SenCher, имеешь в виду исходник о котором я говорил? Тогда вот. Еле нашёл) Страшно смотреть как я кодил пару лет назад)
Код:
function CirCollision(x1,y1,r1,a1,s1,x2,y2,r2,a2,s2:single; var t:single):boolean;
var ABx,ABy,COSA,SINA,K,A,B,D,CABx,SABy,t1,t2:single;
begin
  Result:=true;
  ABx:=x1-x2;
  ABy:=y1-y2;
  COSA:=cos(a1)*s1-cos(a2)*s2;
  SINA:=sin(a1)*s1-sin(a2)*s2;
  K:=sqr(ABx)+sqr(ABy)-sqr(r1+r2);
  CABx:=2*COSA*ABx;
  SABy:=2*SINA*ABy;
  A:=sqr(COSA) + sqr(SINA);
  B:=CABx+SABy;
  // Получаем квадратное уравнение A*t^2+B*t+K=0
  D:=B*B-4*A*K;
  if (D < 0) or (A = 0) then // Уравнение не имеет корней или A=0, что маловероятно (:
    begin
      Result:=false;
      t:=0;
      Exit;
    end;
  t1:=(-B-sqrt(D))/(2*A);
  t2:=(-B+sqrt(D))/(2*A);
  if t1<t2 then
    t:=t1
  else t:=t2;
  if t<0 then
    Result:=false; 
end;
Извини, он на Delphi и переводить мне лень (:
"var t:single" - это значит примерно то же что передача параметра по ссылке в AS.
Оказывается я здесь выводил немного другое уравнение движения, с учётом угла движения, а не вектора. Вообщем, функция проверяет сталкиваются ли две окружности, начальная позиция которых x1,y1 и x2,y2; радиусы r1,r2; углы под которыми они двигаются a1 и a2; скорости s1 и s2. Углы, как видно, в радианах.
Уравнение движения таких окружностей должны быть вида
Код:
X=X0+cos(Angle)*Speed*t;
Y=Y0+sin(Angle)*Speed*t;
Иначе работать не будет) t, который получаем на выходе - это время, через которое столкнутся. Если от 0 до 1 - значит, на этом "ходу" столкнулись. Больше 1 - вероятно столкнуться в будущем, если курс не поменяют.
Даже не знаю, получится ли тебе её адаптировать под свою ситуацию.
__________________
while(1) {}


Последний раз редактировалось Division; 26.11.2008 в 00:49.
Создать новую тему Ответ Часовой пояс GMT +4, время: 18:47.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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