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

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

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

Регистрация: Feb 2012
Сообщений: 1,540
По умолчанию Мой твин ускоряется со временем.

Вот код твина:
Код AS3:
package  MikroacseAS3Lib.Tween{
	import flash.utils.Timer;
	import flash.events.TimerEvent;
	import flash.display.Sprite;
	import flash.system.System;
 
	public class MTween {
 
 
        private var p:Object;
		private var o:Object;
		private var osp:Sprite;
		private var c:Number;
		private var vars:Array;
		private var t:Timer;
		private var finishFunction:Function;
		private var playFunction:Function;
		private var startFunction:Function;
		public var currentCount:Number;
		public var stopped:Boolean;
		public var paused:Boolean;
 
		public function MTween(objectToTween:Object,countOfMoves:Number,parameters:Object) {
			osp=new Sprite()
 
			c=Math.floor(countOfMoves)||60
			p=parameters
			o=objectToTween
			currentCount=0
			vars=[]
			stopped=false
			paused=false
			finishFunction=parameters['onFinish']
			playFunction=parameters['onPlay']
			startFunction=parameters['onStart']
 
 
			t=new Timer(1,c)
 
			for(var strObj:String in p){
				if(strObj!='onFinish'&&strObj!='onPlay'&&strObj!='onStart'){
 
			    osp[strObj]=o[strObj]
 
				vars.push([p[strObj], (osp[strObj]-p[strObj])/c ,strObj])
 
				}
			}
 
			if(p['onStart']){
			startFunction()
		    }
 
			t.start()
            t.addEventListener(TimerEvent.TIMER,EnterTimer)
			t.addEventListener(TimerEvent.TIMER_COMPLETE,EnterTimerFinish)
		}
		//--------------------------------
	    private function EnterTimer(e:TimerEvent){
 
			if(currentCount==c){
				currentCount=0
				stop()
			}
 
			for(var param=0;param<vars.length;param++){
				osp[vars[param][2]]-=vars[param][1]
 
				o[vars[param][2]]=osp[vars[param][2]]
 
				vars[param]=[p[vars[param][2]], (osp[vars[param][2]]-p[vars[param][2]])/(c-currentCount) ,vars[param][2]]
			}
 
			if(p['onPlay']){
				playFunction()
			}
 
		    currentCount++
		}
		private function EnterTimerFinish(e:TimerEvent){
			for(var paramFinish=0;paramFinish<vars.length;paramFinish++){
				o[vars[paramFinish][2]]=vars[paramFinish][0]
				osp[vars[paramFinish][2]]=vars[paramFinish][0]
			}
 
			if(p['onFinish']){
				finishFunction()
			}
 
			stopped=true
		}
		//--------------------------------
		public function play(){
			if(!t.running&&!stopped){
				t.start()
				paused=false
			}
		}
		public function pause(){
			if(t.running&&!stopped){
				t.stop()
				paused=true
			}
		}
		public function stop(){
			if(t.running&&!stopped){
				t.stop()
				t.reset()
				stopped=true
				currentCount=0
			}
		}
		public static function create(target:Object,counts:Number,objectParameters:Object):MTween{
			return new MTween(target,counts,objectParameters)
		}
	}
 
}
Данные о MovieClip передаю в Sprite, т.к. если использовать сразу MovieClip, то в нем параметры округляются до 0.05 .

Вызываю так:
Код AS3:
import MikroacseAS3Lib.Tween.*
MTween.create(mc,705,{rotation:1000})
Собственно, вот что выходит:
Dropbox

Добавлено через 15 минут
Такое ощущение, что с формулой что-то не так:
Код AS3:
(osp[vars[param][2]]-p[vars[param][2]])/(c-currentCount)
Перевод
(объект[переменная(например,x)]-параметры[переменная])/(количество движений-количество сделанных движений)


Последний раз редактировалось MikroAcse; 15.02.2012 в 20:16.
Старый 15.02.2012, 20:36
Stitch512 вне форума Посмотреть профиль Отправить личное сообщение для Stitch512 Найти все сообщения от Stitch512
  № 2  
Ответить с цитированием
Stitch512

Регистрация: Nov 2010
Сообщений: 150
Ужос какой, куча скобочек, @#$ что разбереш, вы бы оформили что ле код...
А на вскидку, возможно у вас нелинейная зависимость, вот к примеру как я интерполирую.
Код AS3:
left / time * (_to - _from) + _from;
Перевод
left - прошедшее время
time - время анимации
_to - начальное значение параметра
_from - конечное значение параметра

Добавлено через 3 минуты
зы.
Зачем же на блог то код выкладывать если он не рабочий...
И ссылка на дропбокс авторизации требует.

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

Регистрация: Feb 2012
Сообщений: 1,540
Код AS3:
Зачем же на блог то код выкладывать если он не рабочий...
На блоге рабочий код.

Спасибо за формулу. Скоро испробую

Старый 15.02.2012, 22:30
-De- вне форума Посмотреть профиль Отправить личное сообщение для -De- Найти все сообщения от -De-
  № 4  
Ответить с цитированием
-De-
 
Аватар для -De-

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
И напишите, пожалуйста, Object вместо Sprite %)
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают.

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

Регистрация: Feb 2012
Сообщений: 1,540
Цитата:
И напишите, пожалуйста, Object вместо Sprite %)
Object округляет значения до 0.05
Например:
Код AS3:
var obj:Object=new Object()
obj.x=0.188
trace(obj.x) //0.185

Старый 15.02.2012, 23:25
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 6  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
О боже... Ознакомьтесь с конвенциями по написанию кода. Например, тут http://opensource.adobe.com/wiki/dis...ng+Conventions

Вместо того, чтобы городить огород из скобок, записывайте значения в переменные.

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

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
У меня 0.188 трейсит. Вы сами-то запускали перед тем как //0.185 написать?
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают.

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

Регистрация: Feb 2009
Адрес: Гы...поди, найди!
Сообщений: 853
Записей в блоге: 1
А void и ; Вам религия не позволяет использовать? Ну подписались Вы на события таймера, а отписываться кто будет?
__________________
http://www.chessmax.ru


Последний раз редактировалось Inet_PC; 15.02.2012 в 23:58.
Старый 15.02.2012, 23:56
MikroAcse вне форума Посмотреть профиль Отправить личное сообщение для MikroAcse Найти все сообщения от MikroAcse
  № 9  
Ответить с цитированием
MikroAcse
 
Аватар для MikroAcse

Регистрация: Feb 2012
Сообщений: 1,540
-De-, ну да, только немного другие параметры.
Странно, только что испробовал obj.myX=0.123456 и выдало в Output: 0.123456.
Ну ладно, спасибо, что подправил.

Добавлено через 9 минут
Все, исправил.
Заработало.
Поменял Sprite на Object.
Подправил:
Код AS3:
(osp[vars[param][2]]-p[vars[param][2]])/(c-currentCount)
На:
Код AS3:
paramDifferenceNumber/timeDivisionNumber
Добавлено через 10 минут
Зачем void нужен?

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

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

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


 


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


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