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

Вернуться   Форум Flasher.ru > Flash > Общие вопросы о Flash (не затрагивающие ActionScript)

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

Регистрация: Sep 2017
Сообщений: 9
По умолчанию Изменение координаты одной из точек направляющей линии.

Доброго времени суток.
Помогите с ответом на вопрос.

У меня есть файл анимации, где кружок двигается по направляющей.
Направляющая представляет собой ломаную линию из двух отрезков.

Подскажите - можно ли скриптом - изменить координату средней точки этой ломаной направляющей ?
Вложения
Тип файла: rar Файл анимации.rar (5.0 Кб, 12 просмотров)

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

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,918
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
Нет.
Только, если анимировать программно.
__________________
There is no thing in this world that is not simple.

Старый 25.09.2017, 09:17
cerber412 вне форума Посмотреть профиль Отправить личное сообщение для cerber412 Найти все сообщения от cerber412
  № 3  
Ответить с цитированием
cerber412

Регистрация: Sep 2017
Сообщений: 9
ZackMercury, понятно - направляющую скриптом изменить нельзя.

Тогда можно ли заменить анимацию по координатам направляющей - на координаты заданные в скрипте ?

То есть - чтобы кружок двигался не по направляющей, заданной в документе, а по трем координатам точек - заданных в скрипте. (Движение начинается в координатах х1у1, идет к координатам х2у2, затем к х3у3, а потом повтор)

Старый 25.09.2017, 16:47
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 4  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Код AS3:
Тогда можно ли заменить анимацию по координатам направляющей - на координаты заданные в скрипте ?
Можно. Если это кривая линия, то точек там на самом деле больше. Тебе придется изучить как строится кривая безье. Если линия ломаная и точек действительно 3, то достаточно рассчитать вектор направленный от одной точки к другой, нормализовать его, и каждый кадр добавлять к нему определенную скорость. Ну или использовать библиотеку типа TweenMax. С ней все намного проще
__________________
Ко мне можно и нужно обращаться на ты)

Старый 25.09.2017, 17:19
cerber412 вне форума Посмотреть профиль Отправить личное сообщение для cerber412 Найти все сообщения от cerber412
  № 5  
Ответить с цитированием
cerber412

Регистрация: Sep 2017
Сообщений: 9
caseyryan, мне нужно всего три точки.

А как выглядит скрипт который двигает фигуру по этим трем точкам ?

Старый 25.09.2017, 19:06
ZackMercury вне форума Посмотреть профиль Отправить личное сообщение для ZackMercury Найти все сообщения от ZackMercury
  № 6  
Ответить с цитированием
ZackMercury
 
Аватар для ZackMercury

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,918
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
Код AS3:
//Создаём квадрат
var quad:Shape = new Shape();
quad.graphics.beginFill(0x000000);
quad.graphics.drawRect(0, 0, 32, 32);
addChild(quad);
 
var points:Array = [ new Point(10, 10), 
                     new Point(200, 100), 
                     new Point(50, 300),
					 new Point(300, 300),
					 new Point(0,0),
					 new Point(200, 10)]; //Перечисляем через запятую любое кол-во точек
 
var position:Number = 0; // позиция анимации
var speed:Number = 1; // пикселей в кадр
var distance = calculateDistance(points); // Общая длина пути
 
this.addEventListener(Event.ENTER_FRAME, update);
 
function calculateDistance(arr:Array):Number
{
	var distance = 0;
	for(var i:int = 1; i < arr.length; i++)
		distance += Point.distance(arr[i] , arr[i-1]);
	return distance;
}
 
function update(e:Event):void
{ 
	//Эта функция будет вызываться каждый кадр
	if(position > distance)
		return;
	var distanceSum:Number = 0;
 
    for(var i:int = 1; i < points.length; i++)
	{
		var currDist = Point.distance(points[i], points[i-1]);
		if(distanceSum + currDist > position) //Мы нашли промежуток, в котором находимся
		{
			var pos:Point = Point.interpolate(points[i], points[i-1], (position - distanceSum)/currDist);
			quad.x = pos.x; // quad меняем на кастомную фигуру
			quad.y = pos.y;
			break;
		}
		distanceSum += currDist;
	}
 
	position += speed;
}
__________________
There is no thing in this world that is not simple.


Последний раз редактировалось ZackMercury; 25.09.2017 в 20:47.
Старый 26.09.2017, 11:46
cerber412 вне форума Посмотреть профиль Отправить личное сообщение для cerber412 Найти все сообщения от cerber412
  № 7  
Ответить с цитированием
cerber412

Регистрация: Sep 2017
Сообщений: 9
ZackMercury, спасибо за ответ.
Теперь ясно как происходит этот процесс.

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

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,918
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
Ну, кода с помощью твиновой библиотеки будет всего строк 5 максимум.
__________________
There is no thing in this world that is not simple.

Старый 26.09.2017, 17:23
cerber412 вне форума Посмотреть профиль Отправить личное сообщение для cerber412 Найти все сообщения от cerber412
  № 9  
Ответить с цитированием
cerber412

Регистрация: Sep 2017
Сообщений: 9
ZackMercury, заранее извиняюсь за вопрос:
А что такое - твиновая библиотека и для его она нужна ?

Старый 26.09.2017, 17:58
ZackMercury вне форума Посмотреть профиль Отправить личное сообщение для ZackMercury Найти все сообщения от ZackMercury
  № 10  
Ответить с цитированием
ZackMercury
 
Аватар для ZackMercury

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,918
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
Твиновая библиотека - это просто набор методов/классов, которые уже заранее написаны за вас сотню раз разными людьми, с помощью которых можно плавно изменять любые свойства в течении некоторого времени.
Нужна для программной анимации, там просто вызываешь метод, передаёшь ему объект и параметры, которые хочешь анимировать, всё остальное она делает за тебя. Ну и время, которое нужно на это потратить.

Делает она примерно то же, что и код выше.

Код AS3:
import com.greensock.TweenLite;
var points:Array = [ new Point(10, 10), 
                     new Point(200, 100), 
                     new Point(50, 300),
					 new Point(300, 300),
					 new Point(0,0),
					 new Point(200, 10)]; //Перечисляем через запятую любое кол-во точек
 
quad.pos.x = points[0].x;
quad.pos.y = points[0].y;
 
var curr:int = 0;
function onTweenOver()
{
    if(curr + 1 < points.length)
        TweenLite.to(quad, 1, { x: points[++curr].x, y: points[++curr].y, onComplete: onTweenOver });
}
onTweenOver();
Но её нужно скачать и подключить в настройках проекта.
https://greensock.com/tweenlite-as

Однако здесь скорость объекта будет меняться в зависимости от расстояния. Т.е. там указывается время - 1 секунда, на одно перемещение из одной точки в другую.

В моём же примере мы указываем скорость перемещения объекта, и она будет одинаковой для всех промежутков. Можно использовать и дробную, если целочисленных значений вам недостаточно.
__________________
There is no thing in this world that is not simple.


Последний раз редактировалось ZackMercury; 26.09.2017 в 21:23.
Создать новую тему Ответ Часовой пояс GMT +4, время: 18:44.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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