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

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

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

Регистрация: Feb 2001
Адрес: Moscow
Сообщений: 223
Отправить сообщение для evgenz с помощью ICQ
Attention Помогите с математикой (стрельба из пушки)

задача простая:
стоит пушка, ствол под определенным углом к горизонту.. выбераем силу выстрела.. (как в игрушке с 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.
Старый 30.09.2005, 01:03
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 2  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,879
Записей в блоге: 7
вот так
_root.lineStyle (0, 0xFF0000);
x = -10;
_root.moveTo (-100, 100);
_root.onEnterFrame = function () {
x++
y = Math.pow (x, 2);
_root.lineTo (x * 10, y);
};
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 30.09.2005, 11:08
evgenz вне форума Посмотреть профиль Отправить личное сообщение для evgenz Посетить домашнюю страницу evgenz Найти все сообщения от evgenz
  № 3  
Ответить с цитированием
evgenz

Регистрация: Feb 2001
Адрес: Moscow
Сообщений: 223
Отправить сообщение для evgenz с помощью ICQ
Тут на сколько я понимаю рисуется парабола...
Так вот вопрос как нарисовать параболу правильно.. когда пушка под углом 45, 30, 10 итд.. пушка же движется... и еще выберается сила выстрела..
__________________
WebInside.RU

Старый 30.09.2005, 11:40
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 4  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,879
Записей в блоге: 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);
	}
};
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 30.09.2005, 13:37
evgenz вне форума Посмотреть профиль Отправить личное сообщение для evgenz Посетить домашнюю страницу evgenz Найти все сообщения от evgenz
  № 5  
Ответить с цитированием
evgenz

Регистрация: Feb 2001
Адрес: Moscow
Сообщений: 223
Отправить сообщение для evgenz с помощью ICQ
Примного благадарен! То что надо!
__________________
WebInside.RU

Старый 30.09.2005, 16:44
Iv вне форума Посмотреть профиль Отправить личное сообщение для Iv Посетить домашнюю страницу Iv Найти все сообщения от Iv
  № 6  
Ответить с цитированием
Iv
 
Аватар для Iv

Регистрация: 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
}
}

- вот так раскладывая на составляющие очень просто и легко сделать любую траекторию и управлять ею.
но самое главное - понимать, что делаешь...

- скрипт я не тестил, писал прям тут, так что возможны ашипки.

Старый 30.09.2005, 17:29
evgenz вне форума Посмотреть профиль Отправить личное сообщение для evgenz Посетить домашнюю страницу evgenz Найти все сообщения от evgenz
  № 7  
Ответить с цитированием
evgenz

Регистрация: Feb 2001
Адрес: Moscow
Сообщений: 223
Отправить сообщение для evgenz с помощью ICQ
angle, speed, gravity - константы
var yspeed = Math.sin(angle)*speed => yspeed тоже константа...
this._y+=gravity - тоже константа...
... не думаю что это работает...
__________________
WebInside.RU

Старый 30.09.2005, 17:38
Iv вне форума Посмотреть профиль Отправить личное сообщение для Iv Посетить домашнюю страницу Iv Найти все сообщения от Iv
  № 8  
Ответить с цитированием
Iv
 
Аватар для Iv

Регистрация: Apr 2001
Адрес: Moscow
Сообщений: 1,475
в программировании думать не надо.
сиди, да программируй.
а когда начинаешь думать, начинается ботва типа той, что ты написал.
ты просто попробуй...

Старый 30.09.2005, 17:44
Iv вне форума Посмотреть профиль Отправить личное сообщение для Iv Посетить домашнюю страницу Iv Найти все сообщения от Iv
  № 9  
Ответить с цитированием
Iv
 
Аватар для Iv

Регистрация: 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.
Старый 30.09.2005, 18:05
Iv вне форума Посмотреть профиль Отправить личное сообщение для Iv Посетить домашнюю страницу Iv Найти все сообщения от Iv
  № 10  
Ответить с цитированием
Iv
 
Аватар для Iv

Регистрация: 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, время: 13:02.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

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

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


 


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


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