Просмотр полной версии : проблема с this
есть клип 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();
}
Что-то вообще странное смешение классов и ас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)
}
dimaMJ, а по-человечески тяжело код оформить?
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.