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

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

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

Регистрация: Jan 2009
Сообщений: 10
По умолчанию Простой физический движок

Вот уже второй день не могу сделать простой
физический движок во flash
Памагите!
Есть точка 1х1, имеющая какую-то начальную скорость и какой-то угол поворота (эти скорость и угол можно задавать). Точка находится внутри прямоугольника 300х1000 (вид сбоку).Нужно, чтобы эта точка имела ускорение свободного падения и отражалась от стенок.
Никаких параметров больше нет, т.е. если точка падает вниз, то отразясь от пола она подлетит на такую же высоту.
Буду очень благодарен за помощь!

З.Ы. С Новым Годом всех

Старый 02.01.2009, 01:29
gloomyBrain вне форума Посмотреть профиль Отправить личное сообщение для gloomyBrain Найти все сообщения от gloomyBrain
  № 2  
Ответить с цитированием
gloomyBrain
 
Аватар для gloomyBrain

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
Вы хотя бы выложите Ваши попытки (КОД)... а там посмотрим=)
__________________
...вселенская грусть

Старый 02.01.2009, 01:49
DarkLight вне форума Посмотреть профиль Отправить личное сообщение для DarkLight Посетить домашнюю страницу DarkLight Найти все сообщения от DarkLight
  № 3  
Ответить с цитированием
DarkLight
ветеран форума
 
Аватар для DarkLight

Регистрация: May 2006
Адрес: Москва
Сообщений: 2,978
Отправить сообщение для DarkLight с помощью ICQ Отправить сообщение для DarkLight с помощью Skype™
Если есть угол и скорость, раскладываем по X и Y. Сдвиг осуществляется на регулярной основе (каждый кадр или по таймеру) прибавлением к координатам точки текущей скорости по X и Y соответственно, а также прибавлением к скорости по Y некоторой постоянной величины(ускорение свободного падения). При сдвиге проверяем, не выходит ли точка за границы зоны. Если выходит, то отрисовываем на границе. Если врезалась в вертикальную стену - умножаем скорость по X на -1, если в горизонтальную - скорость по Y на -1.
__________________
4am is time to rock

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

Регистрация: Jan 2009
Сообщений: 10
ОК, выкладываю.
Код точки:
Код AS1/AS2:
onClipEvent (load) {
	v = 14;
	g = 0.98;
	a = 90;
	getx = _x;
	gety = _y;
	cx = 1;
	cy = 1;
	fcounter = 0;
	curg = 0;
}
onClipEvent (enterFrame) {
	if ((_x>=340) || (_x<=40 && _y>=340)) {
		cx = cx*-1;
	}
	if (_y>=740) {
		cy = cy*-1;
		curg = curg+g*fcounter;
		fcounter = 0;
	}
	_x = _x+v*Math.cos(a/180*Math.PI)*cx;
	_y = _y-(v*Math.sin(a/180*Math.PI)-curg)*cy+g*fcounter;
	fcounter = fcounter+1;
}
DarkLight, вроде сделал все как вы написали, но результат не очень. Думается мне ошибка здесь какая-то глупая, а вот найти не могу

Старый 02.01.2009, 12:52
DarkLight вне форума Посмотреть профиль Отправить личное сообщение для DarkLight Посетить домашнюю страницу DarkLight Найти все сообщения от DarkLight
  № 5  
Ответить с цитированием
DarkLight
ветеран форума
 
Аватар для DarkLight

Регистрация: May 2006
Адрес: Москва
Сообщений: 2,978
Отправить сообщение для DarkLight с помощью ICQ Отправить сообщение для DarkLight с помощью Skype™
Цитата:
При сдвиге проверяем, не выходит ли точка за границы зоны. Если выходит, то отрисовываем на границе.
Поставьте if-ы после сдвига, а в проверках кроме умножения скорости на -1 добавьте установку координат на крайние значения - т е если _x>=340 то надо поставить точке координату 340.

P. S. onClipEvent - зло, не рекомендуется к использованию начиная с Flash MX 2004. Пишите хотя бы в кадрах - меньше будет проблем будущем
__________________
4am is time to rock

Старый 02.01.2009, 13:32
Black_Hawk вне форума Посмотреть профиль Отправить личное сообщение для Black_Hawk Найти все сообщения от Black_Hawk
  № 6  
Ответить с цитированием
Black_Hawk

Регистрация: Jan 2009
Сообщений: 10
Доработал+упростил

Код AS1/AS2:
onClipEvent (load) {
	v = 14;
	g = 0.98;
	a = 20;
	getx = _x;
	gety = _y;
	vx = v*Math.cos(a/180*Math.PI);
	vy = -v*Math.sin(a/180*Math.PI);
}
onClipEvent (enterFrame) {
	_x = _x+vx;
	_y = _y+vy;
	vy = vy+g;
	if (_x<=40 && _y>=340) {
		vx = vx*-1;
		_x=40;
	}
	if (_x>=340) {
		vx = vx*-1;
		_x = 340;
	}
	if (_y>=740) {
		vy = vy*-1;
		_y = 740;
	}
}
Уже выглядит гораздо лучше, вот только проблема возникла - шарик отлетает от пола на более высокую высоту, чем он начинал движение вниз. И с каждым отскоком от пола взлетает все выше и выше
Как исправить?

Старый 02.01.2009, 14:04
DarkLight вне форума Посмотреть профиль Отправить личное сообщение для DarkLight Посетить домашнюю страницу DarkLight Найти все сообщения от DarkLight
  № 7  
Ответить с цитированием
DarkLight
ветеран форума
 
Аватар для DarkLight

Регистрация: May 2006
Адрес: Москва
Сообщений: 2,978
Отправить сообщение для DarkLight с помощью ICQ Отправить сообщение для DarkLight с помощью Skype™
Вот так:
Код AS1/AS2:
        _x +=vx;
	_y +=vy;
	if (_x<=40 && _y>=340) {
		vx *=-1;
		_x=40
	}else if (_x>=340) {
		vx *=-1;
		_x = 340
	}else if (_y>=740) {
		vy *=-1;
		_y = 740
	}else{
		vy +=g;	
	}
Иначе получалось что при первом сдвиге вверх ускорение его разгоняло а не тормозило
__________________
4am is time to rock

Старый 02.01.2009, 14:22
Black_Hawk вне форума Посмотреть профиль Отправить личное сообщение для Black_Hawk Найти все сообщения от Black_Hawk
  № 8  
Ответить с цитированием
Black_Hawk

Регистрация: Jan 2009
Сообщений: 10
Хм, заменил
Но он, собака, все-равно ускоряется

Вот что непонятно, если стартовая скорость по оси Y равна 0, то шарик НЕ ускоряется, а если НЕ равна 0, то ускоряется.
Вкладываю Аутпуты с разным значением углов, чтобы понятнее объяснить в чем дело. Тут указано значение переменной vy
Вложения
Тип файла: txt trace угла 0.txt (10.5 Кб, 42 просмотров)
Тип файла: txt trace угла 90.txt (14.7 Кб, 83 просмотров)

Старый 02.01.2009, 16:22
Black_Hawk вне форума Посмотреть профиль Отправить личное сообщение для Black_Hawk Найти все сообщения от Black_Hawk
  № 9  
Ответить с цитированием
Black_Hawk

Регистрация: Jan 2009
Сообщений: 10
Ух, кажется решил проблему
Дело было в возврате значения _y
Код AS1/AS2:
if (_y>=740) {
		vy *=-1;
		_y = 740
	}
За счет этого, с каждым ударом об пол шарик двигался все выше и выше

Теперь все в порядке, спасибо!

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

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

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


 


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


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