1. Пользоваться форумом на планшетах и телефонах стало удобнее благодаря Tapatalk

AEScript - как сделать отражение после удара о стенку ?

Тема в разделе "Adobe After Effects", создана пользователем _shpion_, 17 май 2005.

Модераторы: ksi2, Saplus
  1. _shpion_

    _shpion_ Пользователь сайта

    С нами с:
    01.01.1970
    Сообщения:
    7
    Симпатии:
    0
    Баллы:
    2
    Приветствую !
    Такая проблема:
    нужно сделать эффект бильярда, т.е. шар ударяется о "стенку", и после удара надо чтобы угол подения был равен углу отражения.
    Нашел такой скрипт:
    segDur = .9;// duration of each "segment" of random motion
    minVal = [0.1*thisComp.width, 0.1*thisComp.height];
    maxVal = [0.9*thisComp.width, 0.9*thisComp.height];

    seed = Math.floor(time/segDur);
    segStart = seed*segDur;
    seedRandom(seed,true);
    startVal = random(minVal,maxVal);
    seedRandom(seed+1,true);
    endVal = random(minVal,maxVal);
    ease(time,segStart,segStart + segDur, startVal, endVal);

    Но тут следующая позиция задается случайным образом.
    Помогите плиз приделать к нему синусы и косинусы.
    спасибо.
     
  2. monter

    monter Знаток

    С нами с:
    25.04.2005
    Сообщения:
    1.299
    Симпатии:
    0
    Баллы:
    33
    В программировании игр используют не математику(Sin и Cos они долго просчитываются), а изменение прирфщения на противоположный знак при достижении какого-либо условия(напрмер границы экрана), типа:

    deltaX=1;
    deltaY=1;

    Начало цикла;
    positionX=positionX+deltaX;
    positionY=positionY+deltaX;
    if (positionX == 720) {deltaX = -1;}
    if (positionY == 576) {deltaY = -1;}
    if (positionX == 0) {deltaX = 1;}
    if (positionY == 0) {deltaY = 1;}
    Конец цикла;
     
  3. _shpion_

    _shpion_ Пользователь сайта

    С нами с:
    01.01.1970
    Сообщения:
    7
    Симпатии:
    0
    Баллы:
    2
    Переписал, вот что получилось:

    segDur = 5;
    minX=0.1*thisComp.width
    minY=0.1*thisComp.height
    maxX=0.9*thisComp.width
    maxY=0.9*thisComp.height
    posX=300;
    posY=200;
    deltaX=50;
    deltaY=60;

    seed = Math.floor(time/segDur);
    segStart = seed*segDur;

    startVal = [posX, posY];
    posXnew = posX+deltaX;
    posYnew = posY+deltaY;
    if (posXnew > maxX) deltaX = -deltaX;
    if (posYnew > maxY) deltaY = -deltaY;
    if (posXnew < minX) deltaX = -deltaX;
    if (posYnew < minY) deltaY = -deltaY;
    endVal = [posXnew, posYnew]

    ease(time,segStart,segStart + segDur, startVal, endVal);
    ---
    но проблема в том что постоянно происходит инициализация двух переменных (posX=300;posY=200; ), т.е. движение получается зацикленным (в течение seed движение от [posX;posY] к [posXnew;posYnew].
    Нужно менять алгоритм/движок, я плохо разбираюсь в функциях, поэтому не понимаю, как в первом посте получается движение от А к В к С, причем каждая точка/координата генерится рандомом %-(
    ---
    прошу помощи
     
  4. serko

    serko Активный участник

    С нами с:
    25.10.2006
    Сообщения:
    526
    Симпатии:
    0
    Баллы:
    15
    Я смотрю, Вы такие темы мутите. Примитив я умею, типа минуса поставить на вращение и т.п.
     
  5. _shpion_

    _shpion_ Пользователь сайта

    С нами с:
    01.01.1970
    Сообщения:
    7
    Симпатии:
    0
    Баллы:
    2
    а если по теме ?
     
  6. Guest

    может немножко через задницу:))
    в АЕ старых версий была папка MMScript, а в ней, в частности, gravity.mm (это для загрузки Motion Math).
    Не знаю, писать его тут или сами найдете?
    Одним словом, если в нем сделать
    damping = 1
    grav = 0
    то , вроде, все работает так как требуется.
    (вначале перед запуском скрипта нужно поставить два ключа позишн, задающих начальную скорость)
     
  7. _shpion_

    _shpion_ Пользователь сайта

    С нами с:
    01.01.1970
    Сообщения:
    7
    Симпатии:
    0
    Баллы:
    2
    mazzza, спасибо, Друг
    выручил
    лежит в \Scripts
    вибираешь рамку;
    Drag, Gravity = 0
    Elasticity, Density = 1
    2 точки, как ты и сказал, причем скорость зависит от соотношения растояния по XY к времени и ЗАРАБОТАЛО !
    СПАСИБО !!!
     
  8. monter

    monter Знаток

    С нами с:
    25.04.2005
    Сообщения:
    1.299
    Симпатии:
    0
    Баллы:
    33
    Привет mazzza! опять тебебе паркет паменяли!У тебя как всегда самый точный ответ :)
    2: _shpion_ это ОнА
     
  9. _shpion_

    _shpion_ Пользователь сайта

    С нами с:
    01.01.1970
    Сообщения:
    7
    Симпатии:
    0
    Баллы:
    2
    Прошу прощения
    не хотел обидеть, просто чувства переполняют
    оч круто
    еще раз спасибо
    тем более приятно получить ответ от девушки
     
  10. Guest

    2 monter: привет, monter!))
    2 shpion: что ты! разве на такое можно обидиться?:))
     
Модераторы: ksi2, Saplus

Поделиться этой страницей