![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
задача простая:
стоит пушка, ствол под определенным углом к горизонту.. выбераем силу выстрела.. (как в игрушке с 2я башнями).. предположим что по оси Х сопротивления нет.. есть только сила тяжести.. как сделать нормальный полет снаряда? простыми +\- у меня выходит полная фигня.. думаю тут нужно применить SIN , COS.. но что именно не как не разбирусь.. и полет снаряда получается какой то дискретный.. как сделать плавный полет? Мои жалкие попытки: ball._x = ball._x + eval("castle"+current).ang0._rotation; ball._y = ball._y - sila; sila = sila - 1;
__________________
WebInside.RU Последний раз редактировалось evgenz; 30.09.2005 в 00:29. |
|
|||||
|
Тут на сколько я понимаю рисуется парабола...
Так вот вопрос как нарисовать параболу правильно.. когда пушка под углом 45, 30, 10 итд.. пушка же движется... и еще выберается сила выстрела..
__________________
WebInside.RU |
|
|||||
|
Негуру
администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
|
Тогда бери полную версию с учетом сопротивления воздуха
// скорость
u0 = 20;
// ускорение свободного падения
g = .98;
// угол стрельбы
a = 40;
// сопротивление воздуха
k = 0.01;
//
this.lineStyle (0, 0xFF0000);
this.onEnterFrame = function () {
t++;
z = (1 - Math.pow (Math.E, -k * t)) / k;
x = u0 * Math.cos (a * Math.PI / 180) * z;
y = (u0 * Math.sin (a * Math.PI / 180) + g / k) * z - g * t / k;
if (y < 0) {
delete this.onEnterFrame;
}
if (t == 1) {
this.moveTo (x, -y);
} else {
this.lineTo (x, -y);
}
};
|
|
|||||
|
Примного благадарен!
То что надо!
__________________
WebInside.RU |
|
|||||
|
Регистрация: Apr 2001
Адрес: Moscow
Сообщений: 1,475
|
у меня в древних уроках описан простой принцип разделения траекторий на составляющие.
там и математику-то знать не надо. например, дано : угол поворота angle начальная скорость speed сила притяжения gravitation если выстрелить без гравитации, то снаряд улетит по прямой под углом angle. стреляем: this.baBahhhh = function (angle, speed) { var angle_rad = angle*(Math.PI/180) // раскладываем по осям: var xspeed = Math.cos(angle)*speed var yspeed = Math.sin(angle)*speed this.shell_mc.onEnterFrame = function () { this._x+=xspeed this._y+=yspeed } } - улетел снарядик по прямой без гравитации вторая составляющая- гравитация, ее добавить просто: this.baBahhhh = function (angle, speed) { // added var gravity = 1 var angle_rad = angle*(Math.PI/180) var xspeed = Math.cos(angle)*speed var yspeed = Math.sin(angle)*speed this.shell_mc.onEnterFrame = function () { this._x+=xspeed this._y+=yspeed // added this._y+=gravity } } можно добавить и сопротивление среды (можно и четверга, но не нужно, хехе), оно будет влиять на скорость: this.baBahhhh = function (angle, speed) { var gravity = 1 // added var friction = .99 var angle_rad = angle*(Math.PI/180) this.shell_mc.onEnterFrame = function () { // added speed*= friction // moved var xspeed = Math.cos(angle)*speed var yspeed = Math.sin(angle)*speed this._x+=xspeed this._y+=yspeed this._y+=gravity } } - вот так раскладывая на составляющие очень просто и легко сделать любую траекторию и управлять ею. но самое главное - понимать, что делаешь... - скрипт я не тестил, писал прям тут, так что возможны ашипки. |
|
|||||
|
angle, speed, gravity - константы
var yspeed = Math.sin(angle)*speed => yspeed тоже константа... this._y+=gravity - тоже константа... ... не думаю что это работает...
__________________
WebInside.RU |
|
|||||
|
Регистрация: Apr 2001
Адрес: Moscow
Сообщений: 1,475
|
в программировании думать не надо.
сиди, да программируй. а когда начинаешь думать, начинается ботва типа той, что ты написал. ты просто попробуй... |
|
|||||
|
Регистрация: Apr 2001
Адрес: Moscow
Сообщений: 1,475
|
Stage.align = "TL";
this.baBahhhh = function(angle, speed) { var gravity = .5; var friction = .98; var angle_rad = angle*(Math.PI/180); var xspeed = Math.cos(angle_rad)*speed; var yspeed = Math.sin(angle_rad)*speed; this.shell_mc.onEnterFrame = function() { this._x += xspeed*friction; this._y += yspeed *= friction; yspeed += gravity; }; }; this.onMouseUp = function() { this.baBahhhh(-60, 20); }; - протестированный рабочий пример. только одно изменение: гравитация влияет на скорость по y а не на позицию объекта. Последний раз редактировалось BitSky; 30.09.2005 в 17:51. |
|
|||||
|
Регистрация: Apr 2001
Адрес: Moscow
Сообщений: 1,475
|
вот с отрисовкой пути:
Stage.align = "TL";
this.baBahhhh = function(angle, speed) {
var start_y = this.shell_mc._y;
var start_x = this.shell_mc._x;
var gravity = .5;
var friction = .98;
var angle_rad = angle*(Math.PI/180);
var xspeed = Math.cos(angle_rad)*speed;
var yspeed = Math.sin(angle_rad)*speed;
this.clear()
this.lineStyle(0,0,100)
this.moveTo(this.shell_mc._x, this.shell_mc._y)
this.shell_mc.onEnterFrame = function() {
this._x += xspeed*friction;
this._y += yspeed *= friction;
yspeed += gravity;
this._parent.lineTo(this._x, this._y)
if (this._y>start_y) {
this._y = start_y;
this._x = start_x;
delete this.onEnterFrame;
this._parent.onMouseUp()
}
};
};
this.onMouseUp = function() {
this.baBahhhh(-1*random(90), 20+random(10));
};
|
![]() |
![]() |
Часовой пояс GMT +4, время: 01:39. |
|
|
« Предыдущая тема | Следующая тема » |
|
|