Просмотр полной версии : get MovieClip._x from class
screamge
18.03.2007, 01:49
использую в классе твин для перемещения объекта из координаты 1 на координату два. хотелось бы отследить перемещение, т.е. если mc_1 двигается с 200 на 400 то хочется получить значение координаты в момент перемещения. на таймлайне если писать:
onEnterFrame = function (){
trace (mc._y)
}
то всё работает
а если в классе пользоваться setInterval то постоянно выводит undefined... объясните пожалуйста в чём дело.
А зачем вам setInterval и onEnterFrame, когда есть событие onMotionChanged? Которое вызывается при каждом изменении свойства вызванного твином?
screamge
18.03.2007, 02:00
:rolleyes: Спасибо
screamge
18.03.2007, 02:21
а как вызывать функцию в классе прикаждом изменении this.position?
screamge
18.03.2007, 02:31
если бы вызывало я бы не спрашивал бы))
addEventListener подойдёт?
screamge
18.03.2007, 02:35
if (blurer == true){
it2move.onMotionChanged = function (){
currentypos = this.position;
trace (this.position)
blurfunc ();
}
private function blurfunc (){
trace ("siska")
}
}
не работает
screamge
18.03.2007, 02:44
private var blurer:Boolean = true;
var it1move:Tween = new Tween (it, "_x", motype , it._x , xcor, times, true);
var it2move:Tween = new Tween (it, "_y", motype , it._y, ycor, times, true);
if (blurer == true){
it2move.onMotionChanged = function (){
currentypos = this.position;
trace (this.position)
blurfunc ();
}
}
}
}
private function blurfunc (){
trace ("siska")
}
Может вы все дадите, а не кусок класса?
screamge
18.03.2007, 02:56
да...ну там естественно импорт Tween и TweenEasing, я могу и весь класс выложить но остальные строчки вроде к проблеме не относятся
Вроде или нет, выкладывай.
screamge
18.03.2007, 03:36
import mx.transitions.Tween;
import mx.transitions.easing.*;
import flash.filters.BlurFilter;
class Screamge.Motion.BTwin {
private var it:MovieClip;
private var xcor:Number;
private var ycor:Number;
private var frame:Number;
private var times:Number;
private var currentypos:Number;
private var blurer:Boolean = false;
static private var xblur:Number = 3;
private var yblur:Number;
static private var quality:Number = 5;
public var motype:Function;
public function showtips (){
trace ("Elastic")
trace ("Bounce")
trace ("Back")
trace ("Strong")
}
public function setBlur (){
blurer = true;
}
public function setType (nam:String, ease:String){
if (nam == "Elastic"){
if (ease == "In"){
motype = Elastic.easeIn;
}
else if (ease == "Out"){
motype = Elastic.easeOut;
}
else if (ease == "InOut"){
motype = Elastic.easeInOut;
}
}
else if (nam == "Bounce"){
if (ease == "In"){
motype = Bounce.easeIn
}
else if (ease == "Out"){
motype = Bounce.easeOut
}
else if (ease == "InOut"){
motype = Bounce.easeInOut
}
}
else if (nam == "Back"){
trace ("back")
if (ease == "In"){
motype = Back.easeIn;
}
else if (ease == "Out"){
motype = Back.easeOut;
}
else if (ease == "InOut"){
motype = Back.easeInOut
}
}
else if (nam == "Strong"){
if (ease == "In"){
motype = Strong.easeIn;
}
else if (ease == "Out"){
motype = Strong.easeOut
}
else if (ease == "InOut"){
motype = Strong.easeInOut
}
}
else {
motype = None.easeNone;
}
}
public function setName (nam:MovieClip){
it = nam;
}
public function initMove (xcord:Number, ycord:Number, timemove:Number, framecount:Number){
times = timemove;
xcor = xcord;
ycor = ycord;
frame = framecount;
if (times == 0){
var itmove:Tween = new Tween (it, "_x", motype, it._x , xcor, frame);
var itmove:Tween = new Tween (it, "_y", motype, it._y, ycor, frame)
}
else {
var it1move:Tween = new Tween (it, "_x", motype , it._x , xcor, times, true);
var it2move:Tween = new Tween (it, "_y", motype , it._y, ycor, times, true);
if (blurer == true){
it2move.onMotionChanged = function (){
trace (this.position)
yblur = ycor - this.position
var setBlur:BlurFilter = new BlurFilter (xblur, yblur,quality)
var filar:Array = new Array ()
filar.push(setBlur)
it.filters = filar;
}
}
}
}
}
screamge
18.03.2007, 04:01
it2move.onMotionChanged = function (){
trace (this.position)
yblur = ycor - this.position
trace (ycor)
var setBlur:BlurFilter = new BlurFilter (xblur, yblur,quality)
var filar:Array = new Array ()
filar.push(setBlur)
it.filters = filar;
}
почемуто выводит undefined хотя объявляется при создании класса
Потому что область видимости не та. Воспользуйтесь классом Delegate
screamge
18.03.2007, 04:11
дело в том (я только сейчас заметил) что даже если прописывать yblur значение, то класс как не работал в плане блюра так и не работает! я не жду готовых решений просто действительно интересно почему так происходит...а про delegate как раз сейчас и читаю
trace (it) тоже даст undefined
screamge
18.03.2007, 04:26
всем спасибо, всё понятно
http://flasher.ru/forum/showthread.php?t=90800 про Delegate.
screamge
18.03.2007, 06:18
НЕ ну я так не играю...я прочёл всё что было по delegate...и нифига не понял...люди добрые если кто может объяснить на моём примере как пользоваться этим delegate буду очень признателен...у меня пропадает то одно значение то второе (((
А что у вас не получилось с Delegate?
screamge
18.03.2007, 07:04
Область видимости то я поменял но вот значение this.position у меня пропало
it2move.onMotionChanged = Delegate.create (this, blurfunc)
}
}
}
public function blurfunc (){
trace (it) // всё нормально
trace (ycor) // тоже отображается
trace (this.position) // undefined
}
Правильно. this работал внутри твина, теперь это не так и вам нужно указать имя твина.
screamge, ссылку на твин нужно хранить в одном из приватных свойств класса, а не использовать локально в функции.
screamge
18.03.2007, 15:18
всё заработало....и теперь всё знаю про delegate:)...ура!!!
На самом деле не все. Вы еще не знаете как в Delegate передавать параметры.
Ответ прост — в Delegate никак :D
Ответ прост — в Delegate никак :DВ этом да, а в ru.inils.util.Delegate запросто :)
Ужыс, у каждого свой Delegate :)
А у меня ascb.util.Proxy.
Я решил не мутить с названием. У себя везде мой Delegate используется, на форуме стандартный.
screamge
18.03.2007, 15:42
а на каких условиях распростроняется ru.inils.util.Delegate и ascb.util.Proxy или вообще не распростроняется?;)
Не помню, кто автор, но вот:
class ascb.util.Proxy {
public static function create(oTarget:Object, fFunction:Function):Function {
var aParameters:Array = new Array();
for(var i:Number = 2; i < arguments.length; i++) {
aParameters[i - 2] = arguments[i];
}
var fProxy:Function = function():Void {
var aActualParameters:Array = arguments.concat(aParameters);
fFunction.apply(oTarget, aActualParameters);
};
return fProxy;
}
}
Я не заморачиваюсь и своих делегатов не пишу. :D
Что-нибудь более полезное разве что…
Просто так.
/**
* Класс ru.inils.framework.Delegate, модифицированный mx.utils.Delegate. Выполнение функции в заданной области видимости с передачей аргументов.
*
* @author iNils
* @version 1.2
* @see mx.utils.Delegate
* Изменения:
* 1.2 (xx.xx.07)
* Переехал из пакета ru.inils.util.Delegate
*
* 1.1 (xx.xx.07)
* [+] Добавлена возможность передавать аргументы "родного" метода
*
* 1.0 (xx.xx.06)
*/
class ru.inils.framework.Delegate extends Object {
/**
* Метод, передает событие в заданную область видимость и в заданный метод.
*
* @usage public static create (obj:Object, func:Function, arg:Array) : Function
* @param obj Object - Объект, заданная область видимости.
* @param func Function - Метод, обработчик события.
* @param arg Array [дополнительный параметр] - Массив передаваемых аргументов, замещающий аргументы передаваемые "родным" событием. По умолчанию возращаются аргументы переданный при вызове "родного" события.
* @return Function - Функция обработчик.
*/
public static function create (obj:Object, func:Function, arg:Array):Function {
var f = function () {
var targetTemp:Object = arguments.callee.target;
var funcTemp:Function = arguments.callee.func;
var argTemp:Array = null;
if (arguments.callee.arg) {
argTemp = arguments.callee.arg;
} else {
argTemp = arguments;
}
return funcTemp.apply (targetTemp, argTemp);
};
f.target = obj;
f.func = func;
f.arg = arg;
return f;
}
}
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.