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

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

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

Регистрация: Jul 2011
Сообщений: 25
По умолчанию Угол и перемещение объекта. €

Здравствуйте, у меня такой вопрос. Допустим я хочу переместить объект из точки (0, 0) в точку (100, 300) отображая это все на каждом энтерФрейм. Каким образом это можно реализовать? Я просто слаб в геометрии. Как задать угол и как его узнать? Какие координаты задавать объектам на каждом энтерФрейме? Прошу помочь разобраться.

Старый 04.08.2011, 10:30
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 2  
Ответить с цитированием
goodguy
Banned
[+1 05.11.11]
[+1 09.08.11]

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
Math.cos() для координат по оси x, Math.sin() по y, угол между двумя точками Math.atan2()

Старый 04.08.2011, 10:45
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 3  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
Вектор, и не надо никаких углов.

Старый 04.08.2011, 10:50
DaFive вне форума Посмотреть профиль Отправить личное сообщение для DaFive Посетить домашнюю страницу DaFive Найти все сообщения от DaFive
  № 4  
Ответить с цитированием
DaFive
 
Аватар для DaFive

Регистрация: May 2008
Адрес: {0,0}
Сообщений: 754
Записей в блоге: 1
Отправить сообщение для DaFive с помощью ICQ
Ну уж если совсем с геометрией никак - твином перемещать можно. Только время для X и для Y сделать одинаковое, чтобы не получилось, что по X уже доехали, а по Y еще едем.
__________________
Кодинг, багинг, алгоритминг. me @

Старый 04.08.2011, 11:03
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 5  
Ответить с цитированием
goodguy
Banned
[+1 05.11.11]
[+1 09.08.11]

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
i.o., вектору тоже надо расчитать направление. В итоге получится тоже самое.

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

Регистрация: Jul 2011
Сообщений: 169
Не знаю,как использовать вектора,но вот как использовать "Полярные координаты",они дадут вам то,что нужно!
Пусть obj1 - ваш обьект,который надо двигать,"a" - угол,на который надо двигать,x2 - конечный x,y2 - конечный y,s - Скорость(Посчитаете ее сами,т.к она зависит от того,за какое время обьект должен доехать до конца)
Код AS3:
var x1:Number = obj1.x;
var y1:Number = obj1.y
var a:Number = 57.29577957855229 * Math.atan2(y2 - y1, x2 - x1) // Формула нахождения угла
obj1.x += s * Math.cos(a * 0.017453292519943295);
obj1.y += s * Math.sin(a * 0.017453292519943295);
Все,это даст тебе движение в нужном направлении.

Старый 04.08.2011, 11:15
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 7  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
Цитата:
i.o., вектору тоже надо расчитать направление. В итоге получится тоже самое.
Нет не то же самое. Синусы и косинусы рассчитывать не нужно.
vec = end - start; - вот и все
Если нужно привести к единичному, то
vec.normalize(1.0);
где vec.x - косинус, а vec.y - синус. При чем явно они нигде не вычисляются.

А конкретно по теме, вот (тут не то что синусов нет, даже квадратные корни не присутствуют. И зовется все это - линейная интерполяция. Твиновая функция sinInOut не в счет):
Код AS3:
var startPoint:Point = new Point(0, 0);
var endPoint:Point = new Point(300, 300);
var currProgress:Number = 0.0;
var startTime:Number = getTimer() + 500;
var endTime:Number = startTime + 2000;
 
this.addEventListener(Event.ENTER_FRAME, this.onEnterFrame);
 
 
function onEnterFrame( e:Event ) : void
{
	var currProgress:Number = (getTimer() - startTime) / (endTime - startTime) ;
 
	if (currProgress < 0.0)
		currProgress = 0.0;
 
	if (currProgress > 1.0)
		currProgress = 1.0;
 
	var currPos:Point = calcPos( startPoint, endPoint, sinInOut(currProgress) );
 
	mc.x = currPos.x;
	mc.y = currPos.y;
}
 
function calcPos( start:Point, end:Point, progress:Number=0.0/*[0..1]*/ ) : Point
{
	return new Point( start.x + progress * (end.x - start.x),
	                  start.y + progress * (end.y - start.y) );
}
 
function sinInOut( v:Number ) : Number
{
	return 0.5 + 0.5 * Math.sin(Math.PI * (v - 0.5));
}


Последний раз редактировалось i.o.; 04.08.2011 в 11:20.
Старый 04.08.2011, 11:20
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 8  
Ответить с цитированием
goodguy
Banned
[+1 05.11.11]
[+1 09.08.11]

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
Цитата:
где vec.x - косинус, а vec.y - синус. При чем явно они нигде не вычисляются.
Разве что в своем коде не будут вычисляться. Но будут в классе вектора.

Старый 04.08.2011, 11:22
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 9  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
Цитата:
Разве что в своем коде не будут вычисляться. Но будут в классе вектора.
Т.е вы хотите сказать, что в функции normalize будут вызываться такие функции как Math.sin / Math.cos и Math.atan2?


Последний раз редактировалось i.o.; 04.08.2011 в 11:25.
Старый 04.08.2011, 11:25
gloomyBrain вне форума Посмотреть профиль Отправить личное сообщение для gloomyBrain Найти все сообщения от gloomyBrain
  № 10  
Ответить с цитированием
gloomyBrain
 
Аватар для gloomyBrain

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
goodguy, не будут. Нормализация вектора - это деление каждой из его координат на длину вектора. То есть примерно так:
Код AS3:
var vec:Point = new Point(12, 18);
var vecLength:Number = Math.sqrt(vec.x * vec.x + vec.y * vec.y);
 
var normalizedVec: = new Point();
normalizedVec.x = vec.x / vecLength;
normalizedVec.y = vec.y / vecLength;
синусов и косинусов тут нет
__________________
...вселенская грусть

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

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

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


 


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


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