PDA

Просмотр полной версии : прыгающий мяч


F())(
25.06.2005, 20:25
Проблема в траектории движения... Посмотрите , please.
После условия столкновения с полом(значение по y), мяч не движется в левый верхний угол.... Не понимаю, по формулам кинематики все верно :confused:

_root.ball._x=150;
_root.ball._y=0;
t=0;
x0=10;
y0=1;
v0=18;
a=10;
v1=v0*0.8;

_root.onEnterFrame=function() {
vy=v0*t+(a*t*t)/2;
t=t+0.6;
_root.ball._x=x0+v0*t;
_root.ball._y=y0+vy*t+(a*t*t)/2;

if (_root.ball._y>400) { //при падении на землю
t=0;
_root.ball._x=z; //точка падения по x(правильно ли)
_root.onEnterFrame=function() {
t=t+0.5;
vy2=-vy*0.8;
_root.ball._x=z+v0*t;//на деле должно быть движение в правый верхний угол, а на деле лажа
_root.ball._y= 400+vy*t-(a*t*t)/2;
_root.ball._rotation+=10; // вращение
}
}
}

Nirth
25.06.2005, 20:35
честно говоря не въехал в код...но насколько я понимаю логику все происходит из за того что ты переписываешь второй раз onEnterFrame.

_root.ball._x = 150;
_root.ball._y = 0;
t = 0;
x0 = 10;
y0 = 1;
v0 = 18;
a = 10;
v1 = v0 * 0.8;
_root.onEnterFrame = function() {
vy = v0 * t + (a * t * t) / 2;
t = t + 0.6;
_root.ball._x = x0 + v0 * t;
_root.ball._y = y0 + vy * t + (a * t * t) / 2;
if (_root.ball._y > 400) {
trace("fall");
//при падении на землю
t = 0;
_root.ball._x = z;
//точка падения по x(правильно ли)
t = t + 0.5;
vy2 = -vy * 0.8;
_root.ball._x = z + v0 * t;
//на деле должно быть движение в правый верхний угол, а на деле лажа
_root.ball._y = 400 + vy * t - (a * t * t) / 2;
_root.ball._rotation += 10;
// вращение
}
};

а вот чтобы он двигался в другой угл надо еще повозиться

Штрек
25.06.2005, 22:47
учитесь создавать контейнер для обработчика Ef....

F())(
26.06.2005, 09:51
штрек раскажи побробнее если можно :d

SaFeR
26.06.2005, 18:00
this.ball._x;
// Xo
this.ball._y;
// Yo
Vx = 3;
Vy = 0;
gravity = 1;
this.onEnterFrame = function() {
Vy += gravity;
this.ball._x += Vx;
this.ball._y += Vy;
this.ball._rotation += 10;
if (this.ball._y>400) {
Vy *= -1;
}
};

Попробуй сюда добавить законы кинематики

F())(
26.06.2005, 20:48
Отскок сделал. исходник
Но Как сделать дальнейшее затушающее движение мяча? Высота подьемa должна постепенно снижаться...
Стоит ли применять логические операторы, с определенной сonst при достижении которой мяч будет двиться равноускоренно вниз,
потом опять условие о столкновении с полом... и так до полной потери скорости.
Если ли более простое решение? :( :(

Nirth
26.06.2005, 20:58
Насчет более простых движений Jobe Makar в своей книге Macromedia® Flash™ MX Game Design Demystified
советует не использовать точных физических законов, а делать их эмуляцию
примерно так

ymov = 0;
//set gravity
gravity = 2;
decay = .95;
_root.onEnterFrame = function() {
ymov += gravity;
ymov *= this.decay;
ball._y += ymov;
if (ball._y > 400) {
ball._y = 400;
ymov *= -1;
}
};

исходник посмотрю позже, если тебе еще нужна будет помощь.

F())(
26.06.2005, 22:42
Nirth дай исходник если не трудно. Очень инстересно..
Вы упоминули Macromedia® Flash™ MX Game Design Demystified - она существует в эл. виде, если да где скачать? :)

Nirth
26.06.2005, 22:46
Книжки нужно покупать на этом форуме запрещенно раздавать линки, поищи на других.

а насчет исходника, у меня нету=) я просто навоял код,
создай на сцене мувик с именем ball и положи код в первый кадр и будет тебе счастье

SaFeR
26.06.2005, 23:12
Вот пример из этой книги падающего вертикально мяча.
остаётся добавить перемещение по оси х

F())(
27.06.2005, 07:25
Спасиба, :rolleyes:

F())(
27.06.2005, 07:37
Nirth, можно по твоему коду спросить,
обьясни смысл первых переменных
ymov
gravity (как я понимаю ускорение)
decay

Nirth
27.06.2005, 08:34
gravity - константа гравитации
decay - фрикция
ymov банальная декларация скорости

Штрек
27.06.2005, 12:51
decay - фрикция

Чего то лихо.....
Может затухание??

Nirth
27.06.2005, 12:58
сопротивление=)

F())(
27.06.2005, 19:45
все теперь полностью разобрался! :)
благадарю за помощь ;)