PDA

Просмотр полной версии : Функция родителя не видна из исполняемой функции setInterval'а


StreetPeople
27.07.2007, 00:46
Скажем есть класс родителя, в котором определена некая функция
class Action implements interfaceAction
{
function getValueByParams( args:Object ) : Number
{
// T - время
// A - Ускорение

return args.A*args.T*args.T/2;
}
}
и есть дочерний класс, из которого каждую миллисекунду мы хотим доставать значения функции класса родителя. - При обращеннии через функцию setInterval'а к функции класса родителя мы её не находим
class Movies extends Action
{
function StartXMovie( ){
this.movieObject.A = 1;
this.movieObject.T = 7;
trace( getValueByParams( {A:1, T:7} ) );//24.5
this.movieObject.InitMovieInterval = setInterval(this.setXPosition, this.movieObject.interval, this.movieObject );
}

function setXPosition( ){
// trace( getValueByParams( {A:1, T:7} ) );//Undefined
}
}

В же чём причина? Почему мы можем получить возвращаемое значение функции родительского класса из функции дочернего класса, но не можем получить это значение из такой же функции того же дочернего класса, вызываемой setInterval'ом???

Подскажите, плиз, как это можно сделать...


PS: Пытаюсь реализовать равномерно-ускоренное движение объекта. Если есть другой способ в рамках концепции классов, помимо setInterval, хотелось бы узнать...

etc
27.07.2007, 01:08
Не interfaceAction, а IAction надо называть, хотя бы.
У setInterval два синтаксиса. В данном случае применяется неправильный синтаксис.

Нужно так:

setInterval(this, 'setXPosition', this.movieObject.interval, …);

Только зачем там передается аргумент в функцию — непонятно, он все-равно не используется.

StreetPeople
27.07.2007, 06:27
Я не стал дописывать код, поскольку обнаружил ошибку и сразу же переключился на неё. Конечно аргумент будет использоваться...

К сожалению, во флэш регламентирована только одна функция реализации интервалов, в рамках "неправильного синтаксиса".


Флэшка ожила, спасибо =)
Насчёт названия интерфейса отдельное "спасибо" =)...

Kikasso
27.07.2007, 08:29
К сожалению, во флэш регламентирована только одна функция реализации интервалов, в рамках "неправильного синтаксиса".
Вот прямо из хелпа:
setInterval function
setInterval(functionReference:Function, interval:Number, [param1:Object, param2, ..., paramN]) : Number
setInterval(objectReference:Object, methodName:String, interval:Number, [param1:Object, param2, ..., paramN]) : Number
Это глобальные дела, где там этот таймер сидит, бог его знает.

etc
27.07.2007, 10:13
Насчёт названия интерфейса отдельное "спасибо" =)...
Судя по кавычкам, вы не приняли это к сведенью. А надо было.