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

Вернуться   Форум Flasher.ru > Архив Flasher.ru > Flash > ActionScript

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

Регистрация: Sep 2001
Сообщений: 4
По умолчанию физика

кто-нить работал с фзикой во флэш? Как получить правильное отражение объекта от поверхности. В частности, когда круг сталкивается с плоскостью, и когда круг сталкивается с кругом.

Старый 05.08.2002, 21:05
руль вне форума Посмотреть профиль Отправить личное сообщение для руль Найти все сообщения от руль
  № 2  
руль
 
Аватар для руль

Регистрация: May 2002
Адрес: Литва
Сообщений: 109
Отправить сообщение для руль с помощью ICQ
Отражение круг-круг оказалось сделать сложнее чем я думал . Пришлось пол-часика повспоминать планиметрию (кстати вопрос не совсем по физике, я бы сказал даже совсем не по физике). Вообщем у меня на Флэшер сорцы не закидываются поэтому придется все тута.
(все делалется под Flash 5)
1)Создаем в новый мувик 400x400.
2)В нем делаем 3 пустых кейфрейма.
3)
AS для 1-ого keyframe:
Код:
bx = [];
by = [];
n = 3;
for (a=1; a<=n; a++) {
    bx[a] = 0;
    by[a] = 0;
    _root.attachMovie( "ball","ball"+a, a);
    _root["ball"+a]._x = random(400);
    _root["ball"+a]._y = random(400);
}
bx[1] = (ball2._x-ball1._x+random(11)-5)/20;
by[1] = (ball2._y-ball1._y+random(11)-5)/20;
AS для 2-ого keyframe:
Код:
function calc_reflection (aa, bb) {
    x1 = bx[aa];
    y1 = by[aa];
    x2 = bx[bb];
    y2 = by[bb];
    x3 = _root["ball"+aa]. _x-_root["ball"+bb]. _x;
    y3 = _root["ball"+aa]. _y-_root["ball"+bb]. _y;
    s = 1/(x3*x3+y3*y3);
    a = (x1*x3+y1*y3)*s;
    x4 = x3*a;
    y4 = y3*a;
    x1 = x1-x4;
    y1 = y1-y4;
    a = (x2*x3+y2*y3)*s;
    x5 = x3*a;
    y5 = y3*a;
    x2 = x2-x5;
    y2 = y2-y5;
    bx[aa] = x1+x5;
    by[aa] = y1+y5;
    bx[bb] = x2+x4;
    by[bb] = y2+y4;
}
function calc_collision (aa, bb) {
    x1 = _root["ball"+aa]. _x;
    y1 = _root["ball"+aa]. _y;
    x2 = x1+bx[aa];
    y2 = y1+by[aa];
    x3 = _root["ball"+bb]._x;
    y3 = _root["ball"+bb]._y;
    r = 25;
    i = bx[aa];
    j = by[aa];
    k = x1-x3;
    l = y1-y3;
    a = i*i+j*j;
    if (a == 0) {
        return 1;
    }
    b = 2*(i*k+j*l);
    c = k*k+l*l-r*r;
    d = b*b-4*a*c;
    if (d<0) {
        return 1;
    }
    t = (-b-Math.sqrt(d))*0.5/a;
    if ((t<0) or (t>1)) {
        return 1;
    }
    x4 = i*t+x1;
    y4 = j*t+y1;
    _root["ball"+aa]._x = x4;
    _root["ball"+aa]._y = y4;
    calc_reflection(aa, bb);
    return 0;
}
f = 0;
for (aa=1; aa<=n; aa++) {
    for (bb=1; bb<=n; bb++) {
        if (bb != aa) {
            if (calc_collision(aa, bb)==0) {
                f = 1;
            }
        }
    }
    if (f==0) {
        x = _root["ball"+aa]._x;
        y = _root["ball"+aa]._y;
        if (x<=0 or x>=400) {
            bx[aa] = -bx[aa];
        }
        if (y<=0 or y>=400) {
            by[aa] = -by[aa];
        }
        _root["ball"+aa]._x += bx[aa];
        _root["ball"+aa]._y += by[aa];
    }
}
AS для 3-его keyframe:
Код:
gotoAndPlay (2);
4) Создаем в библиотеке пустой мувик и рисуем в нем круг размером 25х25.
5) Ставим у мувика в Linkage имя Ball.
6) Запускаем.

если че не работает - пиши
__________________
Все что не делается - все к лучшему
Все что к лучшему - то не делается


Последний раз редактировалось руль; 05.08.2002 в 21:10.
Старый 05.08.2002, 21:46
lizergil вне форума Посмотреть профиль Отправить личное сообщение для lizergil Найти все сообщения от lizergil
  № 3  
lizergil
 
Аватар для lizergil

Регистрация: Jan 2002
Адрес: Королёв
Сообщений: 735
Отправить сообщение для lizergil с помощью ICQ Отправить сообщение для lizergil с помощью Yahoo
енто линейной алгеброй или аналитической геометрией в пространстве зовется

Старый 05.08.2002, 21:52
DeliMIter вне форума Посмотреть профиль Отправить личное сообщение для DeliMIter Найти все сообщения от DeliMIter
  № 4  
DeliMIter
некрофил
 
Аватар для DeliMIter

Регистрация: Mar 2002
Адрес: ...по колено в кровище...
Сообщений: 2,292
2руль и все-все-все

Слишком много кода. Задается векторное пространство с базовым набором функций(из котрых самая сложная - разложить вектор на составляющие) и потом на этом пространстве все работает.
__________________
...убивать людей не удовольствия ради, но для еды.

Старый 05.08.2002, 22:00
lizergil вне форума Посмотреть профиль Отправить личное сообщение для lizergil Найти все сообщения от lizergil
  № 5  
lizergil
 
Аватар для lizergil

Регистрация: Jan 2002
Адрес: Королёв
Сообщений: 735
Отправить сообщение для lizergil с помощью ICQ Отправить сообщение для lizergil с помощью Yahoo
Цитата:
с базовым набором функций
каких именно?

Старый 05.08.2002, 23:02
DeliMIter вне форума Посмотреть профиль Отправить личное сообщение для DeliMIter Найти все сообщения от DeliMIter
  № 6  
DeliMIter
некрофил
 
Аватар для DeliMIter

Регистрация: Mar 2002
Адрес: ...по колено в кровище...
Сообщений: 2,292
Плюс, минус, умножить, задать абсолютный угол поворота, повернуть на определенный угол, получить проекцию на заданный вектор, получить перпендикуляный вектор.
__________________
...убивать людей не удовольствия ради, но для еды.

Старый 06.08.2002, 02:00
руль вне форума Посмотреть профиль Отправить личное сообщение для руль Найти все сообщения от руль
  № 7  
руль
 
Аватар для руль

Регистрация: May 2002
Адрес: Литва
Сообщений: 109
Отправить сообщение для руль с помощью ICQ
2DeliMIter
Может приведешь свой кусочек кода где это реализуется (столкновения 2-ух окружностей) ?.Просто интересно.

зы: причем тут геометрия в пространстве? Мы ведь про 2D случай говорим на плоскости тобишь...или нет ?
__________________
Все что не делается - все к лучшему
Все что к лучшему - то не делается

Старый 06.08.2002, 12:13
greyshaman вне форума Посмотреть профиль Отправить личное сообщение для greyshaman Найти все сообщения от greyshaman
  № 8  
greyshaman

Регистрация: Aug 2001
Адрес: vg
Сообщений: 352
http://www.flashkit.com/movies/Scrip...2075/index.php

Старый 06.08.2002, 20:25
руль вне форума Посмотреть профиль Отправить личное сообщение для руль Найти все сообщения от руль
  № 9  
руль
 
Аватар для руль

Регистрация: May 2002
Адрес: Литва
Сообщений: 109
Отправить сообщение для руль с помощью ICQ
я про столконвение окружностей говорил
__________________
Все что не делается - все к лучшему
Все что к лучшему - то не делается

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

Регистрация: Aug 2001
Адрес: vg
Сообщений: 352
гы: а там чё кубики сталкиваются, кому то требуется переустановка глазки.sys

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

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

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


 


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


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