Форум 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)
-   -   Как правильно использовать getter и setter (http://www.flasher.ru/forum/showthread.php?t=137803)

NoCD 23.03.2010 09:49

Как правильно использовать getter и setter
 
Всем привет!
В классе создал мувиклип, прилепил к нему onEnterFrame, но свойства клипа в таком случае не доступны. Как я понял, такие свойства как _x, _y и т.д. нужно получать через get и set. Как правильно обратиться к ним, что бы получить свойства клипа?

udaaff 23.03.2010 11:32

Пример в студию.

NoCD 23.03.2010 11:41

даже примера нет, смотрел по книгам, но так и не понял что нужно делать, что бы получить результат

грубый пример вот:
Код AS1/AS2:

class modegame{
 
public function createmode(){
 
mc = attachMovie("mc","mc",1000)
mc._x = 100;
mc._y = 100;
 
mc.onEnterFrame = engine_mc
}
 
public function engine_mc(){
 
trace(this._x)
 
 
 
}
 
}

Как получить в функции engine_mc у this._x свойство _x или любое другое свойство мувика this ??

in4core 23.03.2010 12:11

Вопрос простейший. Тока тут геттер и сеттер не причем.

Код AS1/AS2:

class modegame{
 var SMC;
public function createmode(smc){
 SMC = smc; // или smc = SMC; забыл уже если честно
 SMC._x = 100;
 SMC._y = 100;
 
 onEnterFrame = mx.utils.Delegate.create(this,engine_mc);
}
 
public function engine_mc(){
 
trace(SMC._x)
 
 
 
}
 
}

Вариант 2 с твоими сеттирами
Код AS1/AS2:

var someVar;
function setVar(x) {
    someVar._x = x; }
function getVar():Number {
    return someVar._x;
}
setVar(100);
trace(getVar();)


NoCD 23.03.2010 12:16

Спасибо большое, буду разбираться!
Для вас простейший, а я только начинаю писать в классах

in4core 23.03.2010 12:17

Обращайся)

udaaff 23.03.2010 12:26

Цитата:

Вариант 2 с твоими сеттирами
get/set — это несколько другое

NoCD 23.03.2010 13:19

Второй вариант вообще замороченный :(
думал мое решение на get/set подвязаны, извиняюсь за ошибку.

Первый вариант у меня не получилось реализовать.

Если рассматривать первый вариант, то SMC, мувиклип?

если так, то каким образом он влияет на onEnterFrame?
проверил функцию create_bpost_f на trace(this), выдает объект.
а у объектов нет onEnterFrame.
вот собственно сам код, который я хочу оживить.

Код AS1/AS2:

public function create_bpost_f(container,clip){
 
 
                trace("this= "+this)
        bpost = container.attachMovie("bpost_img","bpost",3900)
        bpost._x = 100;
        bpost._y = 100;
        bpost.container = container;
        bpost.clip = clip;
                trace("container= "+container)
                trace("bpost= "+bpost)
                trace("this._x= "+bpost._x)
 trace("this._y= "+bpost._y)
 
                //bpost.onEnterFrame = bp_engine;       
        bpost.onEnterFrame = mx.utils.Delegate.create(this,bp_engine);
 
        }       
 
public function bp_engine(){
        trace("this= "+this)
        }

container - мувиклип контейнер, который будет содержать созданные в нем мувиклипы

clip - это клип, который будет проверяться с созданным клипом на столкновение.
Почему так? потому чтоя не могу понять, как в классе сделать так, что бы мувиклипы были доступны всем function в текущем классе.

В итоге выдает ошибку.

Почему сам клип в функии bp_engine трайсится, а свойства его не доступны?

in4core 23.03.2010 14:52

Удав- несколько другое? Покажи пример раз так. На сколько я помню последний пример про гет и сет как раз я видел в ливдоках. Вот оттуда этот пример ( тока немного модернизированный под нужды человека).

То Автор : Вообще заведомо нехорошо так классы писать. Все отрибуты давать лучше сначала. А потом тока запускать функции с этимт атрибутами. Код я написал тебе правильный. Просто тебе надо подделать его под себя, и подумать насчет Delegate который как раз нужен в твоем случае.

Добавлено через 5 минут
вот простейший пример : а как его использовать в твоих нуждах стоит подумать тебе самому
Код AS1/AS2:

class чепочем { 
      var f;
      function чепочем(set) {
          f = set;
      }
      function получи() {
        return f;
        }
}
var n = new чепочем(333);
trace(n.получи()) // 333

И второй метод уже с делегатом
Код AS1/AS2:

class NNN {
      var f;
      function NNN(set) {
      f = set;
      setTimeout(mx.utils.Delegate.create(this,DDD),30);
 }
    function DDD() { trace(f); } 
}
var n = new NNN("555");
// 555


udaaff 23.03.2010 15:06

Код AS1/AS2:

import mx.utils.Delegate;
 
class Test
{
 
        /**
        * Смысл делегата для NoCD
        */

        public function Test(mc:MovieClip)
        {
                super();
 
                this.mc = mc;
 
                // тут обработчик будет вызывать в области видимости объекта mc
                this.mc.onEnterFrame = mc_onEnterFrameHandler;
 
                // тут в области видимости текущего объекта. Т.е. экземпляра Test
                this.mc.onEnterFrame = Delegate.create(this, mc_onEnterFrameHandler);
 
                // или что не понятно?
        }
 
        private var mc:MovieClip;
 
        private function mc_onEnterFrameHandler():Void
        {
                trace(this);
        }
 
        /**
        * Пример get/set для in4core
        */

        private var _width:Number;
 
        public function get width():Number
        {
                return _width;
        }
 
        public function set width(value:Number):Void
        {
                if (_width < 0)
                        return;
 
                _width = value;
        }
 
}

Цитата:

Сообщение от in4core
Код я написал тебе правильный.

Цитата:

Сообщение от NoCD
а у объектов нет onEnterFrame.



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

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