![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|
|
|||||
|
Регистрация: Feb 2012
Сообщений: 1,540
|
Дайте ссылку на пример создания твина с использованием изингов.
Весь мой твин сделан на getTimer(). Например, найти текущую позицию: Обновить время: Но вот как сделать изинги? Например, это работает на ура: А вот это работает очень быстро: Дать код своего твина не могу, но уточнить некоторые моменты могу. |
|
|||||
|
http://www.gizma.com/easing/#quad1
А чем код того же твина от зеленых носков не удовлетворил?
__________________
тут я |
|
|||||
|
Регистрация: Feb 2012
Сообщений: 1,540
|
Цитата:
![]() Удовлетворил, но я хочу понять, почему у меня ничего не получается. Добавлено через 13 минут Кажется я понял. Между примером этого сайта и в моим твином есть отличие: У меня каждый раз используется новое значение target[parameter], а в примере этого сайта используется начальное значение target[parameter]. Именно в этом и была проблема. Вот, кому надо, готовый рабочий пример твина без глюков: package { import flash.display.Shape; import flash.display.Sprite; import flash.events.Event; import flash.utils.*; /** * ... * @author V-Games */ public class Main extends Sprite { public function Main():void { if (stage) init(); else addEventListener(Event.ADDED_TO_STAGE, init); } private function init(e:Event = null):void { removeEventListener(Event.ADDED_TO_STAGE, init); // entry point var spr:Sprite = new Sprite(); addChild(spr); spr.graphics.beginFill(0x00FF00); spr.graphics.drawCircle(0, 0, 20); spr.graphics.endFill(); createTween(spr, 2, { x:100, y:100 } ); setTimeout(trace, 2000, 'timer finished'); } //------------------ tween public var tar:Object; public var dur:Number; public var par:Object; public var args:Array; public var startTime:Number; public var pos:Number; public var main:Shape; public function createTween(target:Object, duration:Number, parameters:Object):void { tar = target; dur = duration; par = parameters; pos = 0; args = []; startTime = getTimer(); main = new Shape(); for (var p:String in par) { args.push([tar[p], p]); } main.addEventListener(Event.ENTER_FRAME, _onTimeChange); } private function _onTimeChange(e:Event):void { updatePosition(); updateTime(); nextPosition(); } private function updateTime():void { startTime = getTimer() - pos * 1000; } private function updatePosition():void { pos = (getTimer() - startTime) / 1000; if (pos >= dur) { stop(); } } private function nextPosition():void { for (var i:uint = 0; i < args.length; i++) { var p:String = args[i][1]; var b:Number = args[i][0]; tar[p] = easeCircIn(pos, b, par[p] - b, dur); } } public function stop():void { main.removeEventListener(Event.ENTER_FRAME, _onTimeChange); pos = dur; trace('tween finished'); } public function easeLinear(t:Number, b:Number, c:Number, d:Number):Number { return c*t/d + b; } public function easeCircIn(t:Number, b:Number, c:Number, d:Number):Number { t /= d; return -c * (Math.sqrt(1 - t*t) - 1) + b; } } } Последний раз редактировалось MikroAcse; 21.03.2012 в 21:12. |
![]() |
![]() |
Часовой пояс GMT +4, время: 23:17. |
|
|
« Предыдущая тема | Следующая тема » |
|
|