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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 21.07.2010, 18:10
Xel'[Naga] вне форума Посмотреть профиль Отправить личное сообщение для Xel'[Naga] Посетить домашнюю страницу Xel'[Naga] Найти все сообщения от Xel'[Naga]
  № 1  
Ответить с цитированием
Xel'[Naga]
 
Аватар для Xel'[Naga]

Регистрация: May 2001
Адрес: Зеленогорск
Сообщений: 47
По умолчанию Одновременная работа твинеров

Есть объект, его координаты x=0, y=0

Мы применяем к нему твинер, который за 5 секунд должен будет изменить y на 200.

Через 4.5 секунды мы запускаем 2 твинер, который должен поднять(y) объект на 50px

В итоге у нас получается, что у объекта в конце Y равен 180(4.5*200/5) +50 =230. А нужно, чтобы Y у объекта после выполнения 2 твина был равен 250. Вообщем надеюсь ясно обяснил

PS: Все цифры динамические, нельзя например запустить 2й твинер с delay.
__________________
С вами был -=Xel'[Naga]

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

Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
На мой взгляд, два варианта:

1. Делать два твинера, первый по х, второй по х и y. В нужный момент прибивать первый и запускать второй от текущих координат объекта.

2. Написать ручками. Ничего там волшебного нет. Задаете объекту по enterFrame или по таймеру (имхо, лучше по таймеру, либо по enterFrame, но с пересчетом позиции по таймеру) смещение по х и y, в нужный момент изменяете смещение по y.

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

блогер
Регистрация: Feb 2010
Адрес: MSK
Сообщений: 859
Записей в блоге: 3
Отправить сообщение для Genzo с помощью ICQ Отправить сообщение для Genzo с помощью Skype™
Код AS3:
 
main.x = 0;
main.y = 0;
 
var t:Tween = new Tween(main , "x",Strong.easeOut,0,300,5,true);
t.addEventListener(TweenEvent.MOTION_CHANGE , test);
t.start();
 
function test(e:TweenEvent){
	if(e.time > 4.5){
	e.currentTarget.stop();
	var t2:Tween =  new Tween(main , "x",Strong.easeOut,e.position,e.currentTarget.finish+50,1,true);
	t2.start();
	}
}
Добавлено через 49 секунд
2 Tween с одним объектом и параметром одновременно работать не будут

Старый 21.07.2010, 18:58
Mur4ik вне форума Посмотреть профиль Отправить личное сообщение для Mur4ik Найти все сообщения от Mur4ik
  № 4  
Ответить с цитированием
Mur4ik
ветеран форума

Регистрация: Sep 2008
Сообщений: 717
Записей в блоге: 4
Отправить сообщение для Mur4ik с помощью ICQ
Во втором твине указать чтоб не прибавлял к текущей "у" 50, а довел этот "у" до 250.
А то как то не логично получается, вам нужно чтоб объект оказался в координате 250 и вы при этом надеетесь что в момент запуска второго твина координата "у" почему то должна быть именно 200.
__________________
trace("Остановите Землю, я сойду!!!");

Старый 21.07.2010, 22:13
mikhailk вне форума Посмотреть профиль Отправить личное сообщение для mikhailk Найти все сообщения от mikhailk
  № 5  
Ответить с цитированием
mikhailk
 
Аватар для mikhailk

Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
Цитата:
Сообщение от Genzo Посмотреть сообщение
2 Tween с одним объектом и параметром одновременно работать не будут
Если вместо штатного Tween использовать TweenLite, то там можно менять одновременно несколько параметров в рамках одного твина.

Старый 21.07.2010, 22:59
Xel'[Naga] вне форума Посмотреть профиль Отправить личное сообщение для Xel'[Naga] Посетить домашнюю страницу Xel'[Naga] Найти все сообщения от Xel'[Naga]
  № 6  
Ответить с цитированием
Xel'[Naga]
 
Аватар для Xel'[Naga]

Регистрация: May 2001
Адрес: Зеленогорск
Сообщений: 47
mikhailk: 1. Это тоже самое о чём я написал в начале.
Как такое реализовать с помощью Tweenlite(tweenMax)?

Mur4ik: Нужно именно прибавлять, а не указывать новую координату. И про 200 нигде не было речи, речь было про то как сделать объект на высоте 250px учитывая условия указанные в 1 посте.
__________________
С вами был -=Xel'[Naga]

Старый 21.07.2010, 23:16
Mur4ik вне форума Посмотреть профиль Отправить личное сообщение для Mur4ik Найти все сообщения от Mur4ik
  № 7  
Ответить с цитированием
Mur4ik
ветеран форума

Регистрация: Sep 2008
Сообщений: 717
Записей в блоге: 4
Отправить сообщение для Mur4ik с помощью ICQ
Цитата:
Сообщение от Xel'[Naga] Посмотреть сообщение
Как такое реализовать с помощью Tweenlite(tweenMax)?
По поводу нормальных твинеров, обычно присутствует свойство overwrite (TweenLite/Max) или что то типа того у других. И обычно по дефолту оно включено, т.е следующий твин перепишет идентичные свойства твинуемые в первом.

Цитата:
Сообщение от Xel'[Naga] Посмотреть сообщение
И про 200 нигде не было речи...
Если вы прибавляете 50 и хотите получить 250, значит ожидаете что "у" в данный момент именно 200.

Цитата:
Сообщение от Xel'[Naga] Посмотреть сообщение
... речь было про то как сделать объект на высоте 250px учитывая условия указанные в 1 посте.
Если нужно на 250, укажите второму твину двигать объект до 250.

В противном случае, здается мне, вы неправильно/не точно описываете проблему
Из ваших слов имеем
Цитата:
Сообщение от Xel'[Naga] Посмотреть сообщение
Есть объект, его координаты x=0, y=0

Мы применяем к нему твинер, который за 5 секунд должен будет изменить y на 200.

Через 4.5 секунды мы запускаем 2 твинер, который должен поднять(y) объект на 50px
За 5 сек нужно пройти до 200, а в 4.5сек еще этих 200 не будет.
Но вы все же берете данные объекта на этапе незаконченного твина (который до 200 еще не дошел), прибавляете к нему 50 и ожидаете получить 250?
__________________
trace("Остановите Землю, я сойду!!!");


Последний раз редактировалось Mur4ik; 21.07.2010 в 23:21.
Старый 21.07.2010, 23:45
Xel'[Naga] вне форума Посмотреть профиль Отправить личное сообщение для Xel'[Naga] Посетить домашнюю страницу Xel'[Naga] Найти все сообщения от Xel'[Naga]
  № 8  
Ответить с цитированием
Xel'[Naga]
 
Аватар для Xel'[Naga]

Регистрация: May 2001
Адрес: Зеленогорск
Сообщений: 47
Цитата:
Сообщение от Mur4ik Посмотреть сообщение
По поводу нормальных твинеров, обычно присутствует свойство overwrite (TweenLite/Max) или что то типа того у других. И обычно по дефолту оно включено, т.е следующий твин перепишет идентичные свойства твинуемые в первом.
Пробовал, объект уезжает в точку указанной в 1 твинере или во 2м...возможно конечно что я что-то не так сделал.

Цитата:
Сообщение от Mur4ik Посмотреть сообщение
Если вы прибавляете 50 и хотите получить 250, значит ожидаете что "у" в данный момент именно 200.
Неправда, хотелось бы такой вариант, что 2й твинер извлекёт из 1 конечную координату и продолжит анимацию учитывая изменения. И совсем неважно где сейчас объект находится.

Цитата:
Сообщение от Mur4ik Посмотреть сообщение
Если нужно на 250, укажите второму твину двигать объект до 250.
Допустим, я указал 250, через 3 секунды нужно снова прибавить 50, т.е. уже нужно 300. Вы же понимаете, что речь идёт о динамических данных, которые меняет пользователь когда ему вздумается и если бы так просто было указать 250, я бы так и сделал Всё же думаю, в твинерах(сам использую от greensock) есть реализация подобной штуки, наверняка ктото сталкивался. Идея Genzo интересна, но интересно услышать ещё какие-то мысли.

Цитата:
Сообщение от Mur4ik Посмотреть сообщение
В противном случае, здается мне, вы неправильно/не точно описываете проблему
Из ваших слов имеем

За 5 сек нужно пройти до 200, а в 4.5сек еще этих 200 не будет.
Но вы все же берете данные объекта на этапе незаконченного твина (который до 200 еще не дошел), прибавляете к нему 50 и ожидаете получить 250?
Всё верно.

Давайте тогда более детально. В моём случае есть поле, разделённое на блоки(скажем 10х10), каждый объект знает где он находится, в случае движения объекта(он может двигаться только вниз) сам объект знает где он будет находится (например клетка 1х10).

Теперь ситуация:
Создаётся объект(А) в клетке 1х1 и начинает падение в 1х10 - время падения всегда равно 5 сек, независимо от того, сколько клеток нужно пролететь. Но вот теперь представьте, что во время падения объекта, пользователь создаёт ещё 1 объект(Б) в клетке 1х10 - этот объект никуда не падает, т.к. находится в самой нижней точке. Дык вот проблема, как обновить данные у 1(А) объекта(ведь теперь он должен упать в клетку 1х9)?

Это простейший пример, который пришёл в голову. Надеюсь я хоть немного смог объяснить суть.


PS: Добавлю, что движение объекта не может быть по 1 клетке(т.е. для каждой клетки создавать анимацию).
__________________
С вами был -=Xel'[Naga]


Последний раз редактировалось Xel'[Naga]; 21.07.2010 в 23:47.
Старый 22.07.2010, 00:08
mikhailk вне форума Посмотреть профиль Отправить личное сообщение для mikhailk Найти все сообщения от mikhailk
  № 9  
Ответить с цитированием
mikhailk
 
Аватар для mikhailk

Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
Xel'[Naga],
Вы даете другим участникам форума недостаточно информации для того, чтобы советы были для Вас полезными.


Цитата:
Дык вот проблема, как обновить данные у 1(А) объекта(ведь теперь он должен упать в клетку 1х9)?
Это лучше делать без твинов. Объект должен сам знать, куда он движется, и должен сам постоянно выяснять, может ли он переместиться в следующую клетку. Это самое простое.

Можно это реализовать через некоторый контроллер, который будет его передвигать и тогда уже он будет проверять возможность перемещения в следующую клетку.

Старый 22.07.2010, 00:28
Mur4ik вне форума Посмотреть профиль Отправить личное сообщение для Mur4ik Найти все сообщения от Mur4ik
  № 10  
Ответить с цитированием
Mur4ik
ветеран форума

Регистрация: Sep 2008
Сообщений: 717
Записей в блоге: 4
Отправить сообщение для Mur4ik с помощью ICQ
Кто то из ваших компонентов все равно должен знать конечную точку/координату прибытия.
Добавляя объект Б вы уже знаете что объекту А нужно пролететь меньше на одну клетку (знаете ведь?), вот и получив такие данные обновляете твин А с нужными новыми координатами, только конечными а не на основе текущих и не прибавляя постоянную величину, а указывая до куда ему лететь.
__________________
trace("Остановите Землю, я сойду!!!");

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

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

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


 


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


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