PDA

Просмотр полной версии : проблема с this


dimaMJ
07.02.2013, 22:04
есть клип cat, в нем создан экземпляр класса motion и вызвана функция motion1() которая должна перемещать клип
проблема в том что когда в классе в этой ф-ции написано this._x+=10 ; - клип стоит, когда пишу _root.cat._x+=10 клип двигается
как решить эту проблему? мне нужно this чтоб я мог вызывать эту ф-цию у любого клипа, а не писать ф-ции для каждого клипа
class motion extends MovieClip implements Motions
{


public function motion1()
{

this._x+= speed;




}
}

-----------
onClipEvent (enterFrame) {


var cats:motion = new motion();

cats.motion1();

}

Hauts
08.02.2013, 11:12
Что-то вообще странное смешение классов и ас1 (onClipEvent (enterFrame)).

dimaMJ, попробуйте тогда без классов, но с кодом в кадрах. И вместо motion1, например, использовать твиннер.

О, кажется сообразил, что вы хотите сделать.

this указывает на экземпляр класса motion (классы лучше с большой буквы называть), а не на cat. Исправить можно так:


class MotionController extends MovieClip implements Motions
{
private var _owner:MovieClip;
private var _speed:Number;
public function MotionController( owner:MovieClip ){
_owner = owner;
}
public function motionToRight(speed:Number){
_speed = speed
this.onEnterFrame = function(){
this._owner._x+= _speed;
}
}
}
//----------------
// В первом кадре клипа, который должен двигаться:
//

var motionController:MotionController = new MotionController(this);
motionController.motionToRight(10);


Хотя я не уверен. Что-то мне подсказывает, что не будет события onEnterFrame у экземпляра класса MotionController (кажется это решалось созданием пустого мувиклипа в _root`е, чтобы onEnterFrame ловил).

Вообще вы при каждом обновлении кадра создаете новый motion. Это неправильно.

Как дополнительный вариант можно сделать так:


class Motions(){
public static function moveRight(moveWhat:MovieClip, speed:Number){
moveWhat._x += speed
}
}

//-----------
someMovieClip.onEnterFrame = function(){
Motions.moveRight(this, 10)
}

udaaff
08.02.2013, 11:44
dimaMJ, а по-человечески тяжело код оформить?