Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Архив Flasher.ru > Flash > ActionScript

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему  
Старый 28.07.2004, 14:53
Lego вне форума Посмотреть профиль Отправить личное сообщение для Lego Найти все сообщения от Lego
  № 1  
Lego
 
Аватар для Lego

Регистрация: Nov 2001
Адрес: Днепропетровск
Сообщений: 107
Отправить сообщение для Lego с помощью ICQ
По умолчанию Как отследить изменение переменной внутри класса

Есть мувиклип с описанием класса:

#initclip

TGrid.prototype = new MovieClip();

function TGrid() {
trace("constructor");
}

TGrid.prototype.recordSet = [];

TGrid.prototype.Draw = function() {
trace(this.recordSet);
}

#endinitclip

Теперь приаттачиваю его на основную сцену:

this.attachMovie("TGrid", "Grid", 1);
var recordSet = [];
recordSet[0] = 0;
recordSet[1] = 1;
Grid.recordSet = recordSet;

и хочу, чтобы после присвоения Grid.recordSet нового значения сразу вызвалась внутрення функция Grid.Draw().

Подсажите, пожалуйста, как внутри класса прописать что-то типа

TGrid.watch("recordSet", this.Draw);

Или мне нужно заводиться с механизмом создания собственного события типа:

TGrid.prototype.onEnterFrame = fucntion()
{
if (this.recordSet.length > 0) this.Draw();
}
ну и т.д. по тексту?

Merci beaucoup!
__________________
Я не любопытный и хитрый, а любознательный и сообразительный!


Последний раз редактировалось Lego; 28.07.2004 в 14:57.
Старый 28.07.2004, 15:58
AnGL вне форума Посмотреть профиль Отправить личное сообщение для AnGL Найти все сообщения от AnGL
  № 2  
AnGL
 
Аватар для AnGL

Регистрация: Jul 2002
Адрес: Ст.-Петербург
Сообщений: 268
Напиши функцию-сеттер для присвоения Grid.recordSet нового значения и вызывай в ней Draw().

Старый 28.07.2004, 16:08
Lego вне форума Посмотреть профиль Отправить личное сообщение для Lego Найти все сообщения от Lego
  № 3  
Lego
 
Аватар для Lego

Регистрация: Nov 2001
Адрес: Днепропетровск
Сообщений: 107
Отправить сообщение для Lego с помощью ICQ
Если вроде этого

TGrid.prototype.SetRecordSet = function(recordSet)
{
this.recordSet = recordSet;
this.Draw();
}

а потом

Grid1.SetRecordSet(recordSet);

- то не очень бы хотелось.

По-моему, как-то коряво получается.
__________________
Я не любопытный и хитрый, а любознательный и сообразительный!


Последний раз редактировалось Lego; 28.07.2004 в 16:11.
Старый 28.07.2004, 16:43
styx вне форума Посмотреть профиль Отправить личное сообщение для styx Найти все сообщения от styx
  № 4  
styx

Регистрация: Apr 2003
Сообщений: 243
См. help на Object.addProperty

Старый 28.07.2004, 16:57
Lego вне форума Посмотреть профиль Отправить личное сообщение для Lego Найти все сообщения от Lego
  № 5  
Lego
 
Аватар для Lego

Регистрация: Nov 2001
Адрес: Днепропетровск
Сообщений: 107
Отправить сообщение для Lego с помощью ICQ
Спасибо. Посмотрел. Что-то в этом есть. Пойду попробую приделать ЭТО к классу .
__________________
Я не любопытный и хитрый, а любознательный и сообразительный!

Старый 29.07.2004, 16:15
Lego вне форума Посмотреть профиль Отправить личное сообщение для Lego Найти все сообщения от Lego
  № 6  
Lego
 
Аватар для Lego

Регистрация: Nov 2001
Адрес: Днепропетровск
Сообщений: 107
Отправить сообщение для Lego с помощью ICQ
Не знаю, но почему-то не работает.
Сделал так

#initclip

TGrid.prototype = new MovieClip();

function TGrid() {
trace("constructor");
}

TGrid.prototype.addProperty("recordSet", null, TGrid.prototype.SetRecordSet);

TGrid.prototype.SetRecordSet = function(rs)
{
this.recordSet = rs;
this.Draw();
}

TGrid.prototype.Draw = function() {
trace(this.recordSet);
}

#endinitclip


А в первом кадре так:

this.attachMovie("TGrid", "Grid", 1);
var recordSet = [];
recordSet[0] = 0;
recordSet[1] = 1;
Grid.recordSet = recordSet;

....и ничего...

Чувствую, что пока знаний не хватает, прийдется Grid.Draw() вручную вызывать
__________________
Я не любопытный и хитрый, а любознательный и сообразительный!

Старый 29.07.2004, 16:23
_zhloba вне форума Посмотреть профиль Отправить личное сообщение для _zhloba Посетить домашнюю страницу _zhloba Найти все сообщения от _zhloba
  № 7  
_zhloba

Регистрация: Apr 2004
Адрес: Минск
Сообщений: 176
Переходи на actionscript 2.0
Код:
class cSomeClass{
  private var somepropety:Number=10;
  function cSomeClass(){}
  function set somepropety(value:Number):Void{
    somepropety=value;
    someFunction();
  }
  function someFunction():Void{
    trace("someFunction");
  }
}


item=new cSomeClass();
item.somepropety=value;
Все красиво
__________________
Юра

Старый 29.07.2004, 16:42
Nox Noctis вне форума Посмотреть профиль Отправить личное сообщение для Nox Noctis Посетить домашнюю страницу Nox Noctis Найти все сообщения от Nox Noctis
  № 8  
Nox Noctis
don't panic!
 
Аватар для Nox Noctis

Регистрация: Aug 2001
Сообщений: 4,121
не обязательно под семёрку переделывать.

просто глупостей писать не надо :)

Lego, объясни пожалуйста, почему ты СНАЧАЛА создаёшь прототип функции, а только потом создаёшь саму функцию? :)) это во-первых.

во-вторых - почему ты СНАЧАЛА создаёшь сеттер, передаёшь ему сетовую функцию, а только потом эту сетовую функцию создаёшь? :) что за чудеса? :)

в-третих:
всегда можно протрейсить результат выполнения функции addProperty. если возвратилось false - то выполнения сеттера ждать бесполезно: свойство просто не было создано.

а не создаётся оно потому, что ты передаёшь ему сеттер, но не передаёшь геттер :)) read only свойства я еще видел, а вот write only - это что-то дзен-буддистское :))

и в-самых-последних:
зачем вся эта заморочка с классом и инитклипом, если ты не регистрируешь класс при помощи Object.registerClass?

итого:
Код:
#initclip
function TGrid() {
	trace("constructor");
}
TGrid.prototype = new MovieClip();
TGrid.prototype.SetRecordSet = function(rs) {
	this.recordSet = rs;
	trace("recordSet changed!");
};
TGrid.prototype.GetRecordSet = function() {
	return this.recordSet;
};
TGrid.prototype.addProperty("recordSet", TGrid.prototype.GetRecordSet, TGrid.prototype.SetRecordSet);
//
Object.registerClass("TGrid", TGrid);
#endinitclip

Старый 29.07.2004, 16:54
Lego вне форума Посмотреть профиль Отправить личное сообщение для Lego Найти все сообщения от Lego
  № 9  
Lego
 
Аватар для Lego

Регистрация: Nov 2001
Адрес: Днепропетровск
Сообщений: 107
Отправить сообщение для Lego с помощью ICQ
По поводу первого - в целом, согласен, но не вижу принципиальной ошибки - ведь работает в обоих случаях.

По поводу второго - я же могу, допустим, написать так

f = pi_2();

function pi_2()
{
return Math.Pi()/2;
}

? Ведь работает.


Третье, пропущу - лопухнулся.

А про последнее ВООБЩЕ не понял. Но все равно спасибо.
__________________
Я не любопытный и хитрый, а любознательный и сообразительный!

Старый 29.07.2004, 17:07
Nox Noctis вне форума Посмотреть профиль Отправить личное сообщение для Nox Noctis Посетить домашнюю страницу Nox Noctis Найти все сообщения от Nox Noctis
  № 10  
Nox Noctis
don't panic!
 
Аватар для Nox Noctis

Регистрация: Aug 2001
Сообщений: 4,121
Цитата:
Оригинал написал(а) Lego
По поводу первого - в целом, согласен, но не вижу принципиальной ошибки - ведь работает в обоих случаях.
вобщем-то да :) я забыл упомянуть одну фишку...

это связано со следующим вопросом:
Цитата:
Оригинал написал(а) Lego
По поводу второго - я же могу, допустим, написать так

f = pi_2();

function pi_2()
{
return Math.Pi()/2;
}

? Ведь работает.
это потому что ты, может быть, никогда не декомпилировал ролики :) или декомпилировал, но не обращал внимания. если ты создаёшь функцию так:
function name (args) {
..
}

то её объявление перемещается при компиляции на самый верх. как будто ты написал это в первых строчках скрипта. т.е. это происходит даже без твоего ведома.

а вот если ты создаёшь функцию так:
name = function () { .. };
то там где написал объявление - там оно и будет.

только благодаря этой особенности компилятора флэша у тебя что-то работало. но логика-то при этом принципиально не правильная... собственно это меня и восхитило :) всё задом-наперёд :)

а то что оно почему-то работает даже при неправильно логически построенном скрипте - это не показатель. работает - замечательно. но я бы посоветовал писать код сверху вниз и слева направо, а не как-нибудь еще :))

попробуй сначала налить чай, а потом поставить кружку. а потом наоборот. как думаешь и в том и в другом случае получится одинаковый эффект? :))
Цитата:
Оригинал написал(а) Lego
А про последнее ВООБЩЕ не понял. Но все равно спасибо.
что не понял? ты не связал свой инстанс с классом. у тебя и не должно было ничего работать, всё правильно. Object.registerClass привязывает класс к конкретному инстансу в библиотеке. собсно ради этого ты всё это и затевал...

вобщем посмотри код который я запостил - он работает как надо.


Последний раз редактировалось Nox Noctis; 29.07.2004 в 17:09.
Создать новую тему   Часовой пояс GMT +4, время: 14:50.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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