Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   проблема с this (http://www.flasher.ru/forum/showthread.php?t=194100)

dimaMJ 07.02.2013 22:04

проблема с this
 
есть клип cat, в нем создан экземпляр класса motion и вызвана функция motion1() которая должна перемещать клип
проблема в том что когда в классе в этой ф-ции написано this._x+=10 ; - клип стоит, когда пишу _root.cat._x+=10 клип двигается
как решить эту проблему? мне нужно this чтоб я мог вызывать эту ф-цию у любого клипа, а не писать ф-ции для каждого клипа
Код AS1/AS2:

        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. Исправить можно так:

Код AS1/AS2:

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. Это неправильно.

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

 
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, а по-человечески тяжело код оформить?


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

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