Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Некорректная работа Tween (http://www.flasher.ru/forum/showthread.php?t=105189)

Волгоградец 10.12.2007 12:34

Некорректная работа Tween
 
Вложений: 1
Привет. Вот код перемещения клипа при клике мышкой на рабочем поле в точку клика. Проблема в следующем: при столкновении с объектом клип иногда ведет себе как должен - т.е. останавливается - а иногда как будто отскакивает - т.е. резко появляется в случайном месте экрана далеко от препятствия.
Код:

_root.onMouseDown = function (){
        c = this._xmouse;
        d = this._ymouse;
        import mx.transitions.Tween;
        var a:Tween = new Tween(ball, "_x", mx.transitions.easing.None.easeNone, ball._x, c, 1, true);
        var b:Tween = new Tween(ball, "_y", mx.transitions.easing.None.easeNone, ball._y, d, 1, true);
        ball.onEnterFrame = function (){
                if (this.hitTest(square)){
                        q = this._x;
                        w = this._y;
                        //trace (this._x);
                        //trace (this._y);
                        a.stop ();
                        b.stop ();
                        delete this.onEnterFrame;
                        if (this._x <= 300){
                                this._x = q - 2;
                                this._y = w - 2;
                        }
                        if (this._x >= 300){
                                this._x = q + 2;
                                this._y = w + 2;
                        }
                }
        }
}

В чем проблема? Или это кривые руки?
P.S.: может кто-то подскажет другой вариант поведения клипа при столкновении.

Вот исходник:

wvxvw 10.12.2007 12:42

Лучше не в onEnterFrame проверять а в onMotionChanged того твина, который работает с клипом, который нужно хиттестить. Да и объекты лучше одним твином двигать, а не двумя...

CrazyFlasher 10.12.2007 12:45

по мне так лучше вообще этот твин не использовать!:rtfm:

Волгоградец 10.12.2007 13:47

wvxvw, научи пжлста, как в один твин запихнуть изменение по _x и _y...
СумашедшийФлэшер, почему его лучше не использовать? На форуме ему (Твину) дифирамбы поют...

etc 10.12.2007 13:58

Поищите TweenExtended.

Волгоградец 10.12.2007 14:41

__etc, поискал. Нашел. А как теперь использовать? Я с ООП как-то не очень... Как вообще добавлять сторонние классы? Import'ом? Или в специальную папку нужно положить? Сори за ламерский вопрос...

Добавлено: файл .mxp.

etc 10.12.2007 14:48

В каком виде? В mxp?

Волгоградец 10.12.2007 16:05

Файл в .mxp.

etc 10.12.2007 16:10

Ну тогда надо просто запустить его (если не запускается, то установить через Extension Manager). Документация по классу появится потом в панели хелпа.

wvxvw 10.12.2007 16:14

Да ну, нормально он работает (Твин в смысле)...
Код:

import mx.transitions.Tween;
import mx.transitions.easing.*;
//
var tw:Tween = new Tween(mc,"_x",Regular.easeInOut,0,300,3,true);
tw.onMotionChanged = function():Void {
        trace(this.time); // Время, сколько проигрывается анимация
        trace(this.position); // 1..0, значение изменения параметра, который анимируется (0-изначальное положение, 1-конечное).
        trace(this.obj); // Ссылка на объект, который анимируется.
        this.obj._y = this.obj._x;
}

а класс Tween ничем особенным от других кем угодно написаных классов не отличается. Можно и самому его аналог написать, и пользоваться другими, вот, еще есть MCTween - я спокойно живу с тем, что пришло вместе с Флешем и мне хватает %)

CrazyFlasher 10.12.2007 17:08

Цитата:

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

Волгоградец 10.12.2007 17:10

__etc, спасибо.
wvxvw, как же в твоем примере изменение по _y происходит? Там же начальные и конечные координаты по _y должны отличаться от _x? И что означает строчка import mx.transitions.easing.*? Почему она у тебя отдельно?

wvxvw 10.12.2007 19:04

import mx.transitions.easing.* - импорт всего пакета (набора классов) easing.
В нем содержатся ф-ции рассчитывающие изменение в еденицу времени.
А что мешает привязаться к своийству position и на его основе рассчитывать _y?
Код:

import mx.transitions.Tween;
import mx.transitions.easing.*;
//
var __xFrom:Number = 0;
var __xTo:Number = 300;
var __yFrom:Number = 50;
var __yTo:Number = 200;
var tw:Tween = new Tween(mc,"_x",Regular.easeInOut,__xFrom,__xTo,3,true);
tw.onMotionChanged = function():Void {
        this.obj._y = __yFrom+__yTo*(this.position/__xTo);
        trace(this.obj._y);
}
//====================================
function onMotionChanged(t:Tween, pos:Number){
        trace(t+" : is at "+pos+" right now");
}
tw["addListener"](this);

Мало того, можно подписаться на те же твиновские события в духе броадкастер-листенер, и подисать на них, соответсвенно, все что угодно, в какоум угодно количестве =)

alekslitvinenk 10.12.2007 19:13

А класс Fuse использовать для того чтобы двигать объекты не вариант ?
Конечно он не лишен некоторых глюков (например для меня стало настоящей неожиданностью что конструктор класса можно объявлять только в том методе где он непосредственно используется иначе зело глючит), но вцелом вещь достаточно удобная и можно менять сколько угодно параметров (_x, _y, _alpha...)

Волгоградец 10.12.2007 20:51

Цитата:

Мало того, можно подписаться на те же твиновские события в духе броадкастер-листенер, и подисать на них, соответсвенно, все что угодно, в какоум угодно количестве =)
Почти ничего не понял - рано мне еще, мало знаний ). Все остальное понятно. Спасибо тебе большое!

alekslitvinenk, про Fuse ничего не знаю. Почитаю. Спасибо.


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

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