PDA

Просмотр полной версии : Tween, не плавно


ccop
20.08.2007, 01:17
Вот таким кодом я увеличиваю обьект на экран... Т.е. он был у меня маленький, когда на него нажал, оно плавно мне его на весь экран показывает...

import mx.transitions.Tween;
import mx.transitions.easing.*;
easeType = Strong.easeOut;
zoomTime = 1;
new mx.transitions.Tween(object, "_x", easeType, object._x, x, zoomTime, true);
new mx.transitions.Tween(object, "_y", easeType, object._y, y, zoomTime, true);
new mx.transitions.Tween(object, "_xscale", easeType, object._xscale, scale, zoomTime, true);
new mx.transitions.Tween(object, "_yscale", easeType, object._yscale, scale, zoomTime, true);
Но проблема, что на каких-то обьектах, оно как-то криво приближает, это может быть из-за формы обьекта? Как можно это исправить? Разное время указать, в зависимости от размеров?

ccop
20.08.2007, 10:32
Такое впечетление, что по х оно движется быстрее, и что бы не отставать по у но перескакивает или наоборот...
И почему-то всегда по-разному, раз нормально, раз криво...

Скрипун
20.08.2007, 11:45
пробуй fps временной диаграммы увеличивать.
ПС: хотя неизвестно что за параметры scale, x,y

Dima_DPE
20.08.2007, 12:51
Мой совет. Просто не пользуйся стандартным твинером. Есть море других. Я вчера с темже маился, код там почти идентичный (правда в AS3), но бывало такое вырисовывал, что аж страшно.

Тут есть один
http://code.google.com/p/tweener/

ps Это лично мое мнение, никого не заставляю, что-то менять

iNils
20.08.2007, 14:29
ccop, исходник с проблемой покажите.

ccop
20.08.2007, 17:41
Исходник весь выслать не могу, потому как там много чего накручено еще и будет сложно разобраться...
Есть функция, в которую я как параметр передаю ссылку на обьект, который нужно приблизить..
Есть клип, в котором есть куча маленьких клипов... Вот когда кликаю на клип, мне нужно его показать на весь экран, делаю это так...
object.swapDepths(this.getNextHighestDepth());
if (object._width > object._height)
zoom = (documentWidth - space) / object._width;
else
zoom = (documentHeight - space) / object._height;
x = documentWidth / 2 - (object._width * zoom) / 2 - object.x * zoom;
y = documentHeight / 2 - (object._height * zoom) / 2 - object.y * zoom
new Tween(object._parent, "_x", easeType, object._parent._x, x, zoomTime, true);
new Tween(object._parent, "_y", easeType, object._parent._y, y, zoomTime, true);
new Tween(object._parent, "_xscale", easeType, object._parent._xscale, zoom * 100, zoomTime, true);
new Tween(object._parent, "_yscale", easeType, object._parent._yscale, zoom * 100, zoomTime, true);

пробуй fps временной диаграммы увеличивать.
ПС: хотя неизвестно что за параметры scale, x,y
Как это сделать?

Arhitector
20.08.2007, 18:01
нажми на пустое место во флэше и внизу в Properties есть Frame rate по дефолту он 12, увеличь до 30

http://www.instinct.nm.ru/fps.jpg

etc
20.08.2007, 18:37
До 31.

ccop
20.08.2007, 19:49
не помогает... ((
создается такой эффект как буд-то землетрясение, дребежит при приближении

Dima_DPE
20.08.2007, 20:15
Если все дрожит, то скорее всего есть еще какието обработчики событий, типа наведения на объект курсора мыши или вложиных мувиков слишком уж много и он не успевает перерисовывать все (вот и прыгает) Взгляни на загрузку процесора во время анимации, если зашкаливает значит не успевает, если нет - гдето код шалит.

ccop
20.08.2007, 21:10
Пробывал убрать все обработчики событий - непомогло.
Загрузка проца доходит временами до 80%, это плохо?
смотрю на пример, где все красиво работает, 50-60 в среднем...

Dima_DPE
20.08.2007, 22:22
Ну, тогда только одно, дай сурсы на растерзание публике, кто-то и подскажет или сам капай до победного...

Molecula
20.08.2007, 23:06
Мож глюки у Вас от переутомления.
Странно, никогда не было таких вот казусов с Твином.
Исходник - единственная надежда на просветление!

iNils
21.08.2007, 02:48
Исходник весь выслать не могу, потому как там много чего накручено еще и будет сложно разобраться...Вот кусок кода можете выслать, а исходник с проблемной частью (все лишние выкинуть) - нет?

ccop
21.08.2007, 16:59
Все, разобрался, пробелмы была в обьекте, перерисовал клип заново и все теперь нормально, только вот не знаю почему пока.

ccop
26.08.2007, 16:29
Я ошибся, проблема была совсем не в форме обьекта.
Прошу посмотреть на исходник и помочь решить проблему
http://file.oboz.ua/download.php?fid=4143

Заранее благодарен!

ccop
26.08.2007, 16:32
Особенно хорошо видно когда клацать на зеленый обьект а потом на красный или наоборот...
у меня Flash 8

Kikasso
26.08.2007, 16:45
Наблюдаем классический вариант "борьба твинов".
Предлагаю такой вариант:
import mx.transitions.Tween;
import mx.transitions.easing.*;
easeType = Strong.easeOut;
zoomTime = 60;
var t1:Tween = new Tween(a, "_x", easeType, a._x, a._x, 1, false);
var t2:Tween = new Tween(a, "_y", easeType, a._y, a._y, 1, false);
var t3:Tween = new Tween(a, "_xscale", easeType, a._xscale, a._xscale, 1, false);
var t4:Tween = new Tween(a, "_yscale", easeType, a._yscale, a._yscale, 1, false);



function viewFullObject(object)
{
documentWidth = 550;
documentHeight = 400;
space = 20;
object.swapDepths(this.getNextHighestDepth());
if (object._width > object._height)
zoom = (documentWidth - space) / object._width;
else
zoom = (documentHeight - space) / object._height;
x = documentWidth / 2 - (object._width * zoom) / 2 - object._x * zoom;
y = documentHeight / 2 - (object._height * zoom) / 2 - object._y * zoom;

t1.continueTo(x, zoomTime);
t2.continueTo(y, zoomTime);
t3.continueTo(zoom * 100, zoomTime);
t4.continueTo(zoom * 100, zoomTime);
}
for (i = 0; i < 20; ++i)
{
_root.a[i].onRelease = function()
{
viewFullObject(this);
}
}
Только поставьте 31 кадр в секунду - я поставил useSecond в false, соответственно zoomTime = 60 кадров. Это, впрочем, непринципиально, можете юзать секунды.

upd: нет, это принципиально. Я вернул секунды и оно начало дергаться.

ccop
26.08.2007, 17:38
Спасибо большое! Есть над чем работать... буду разбираться...