Помощь · Поиск · Пользователи · Календарь
Полная версия этой страницы: Использование значения переменной между классами
Flash Zone Forum > Macromedia Flash > ActionScript
DWanderer
Всем доброго времени суток!
Опять стал мучить старый вопрос. Казалось, что с ним разобрался, ибо значение переменной стало правильное перебрасываться из 1го класса в другой, однако же нет. Заранее прошу прощение, ибо скорее всего проблема достаточна глупая.
Суть вопроса и ситуация в следующем(привожу упрощенную форму). Есть 3 класса(для понятности А, В и С).
В классе С я объявляю переменную:
CODE
public class C{
public var number:int;

public function changeNumber(newNum){
number = number + newNum;
trace(number); //15
}
}


Класс В у меня дает изменение этого значения:
CODE
public class B{
private var exz:C = new C;

public function B(){
exz.changeNumber(15);
}
}


Класс же А должен у меня вывести на экран новое значение этой переменной, пишу следующее:
CODE
public class A{
private var someTextField:TextField = new TextField;
private var tg:C new C;

public function A(){
someTextField.text = tg.number;
trace(someTextField); //0
}
}


Цель моя, взять переменную С класса number. Затем произвести изменения этой переменной через класс B и уже в классе А вывести это значение в текстовое поля. Меня в прошлый раз сбило с толку то, что произведя изменения в классе B я выводил это значение в этом же классе и естественно получал то, что мне нужно. Но мне это значение нужно использовать и в других классах, как в примере с классом А. ОДНАКО же значение импортируется в класс А без изменений, т.е. number = 0. Вопрос, как вообще сохранять изменения переменной, чтобы ими могли воспользоваться другие классы? Или может быть более правильно будет - как перебрасывать измененные значения переменной в другие классы?
HaWK
Вы создаёте новый экземпляр класса C, конечно все свойства у него будут по умолчанию. Надо передавать ссылку на тот самый экземпляр в котором вы изменяли переменную number. И не надо ничего сохранять. Просто правильно передавайте ссылки.
Цитата
public class A{
private var someTextField:TextField = new TextField;
private var tg:C = new C();

public function A(){
someTextField.text = tg.number;
trace(someTextField); //0
}
}
DWanderer
HaWK вы 2й человек, который говорит мне, что я в этой ситуации не правильно поставил ссылку на экземпляр. Может быть вы чуть подробнее мне напишите об этом?
HaWK
Вы лучше опишите что вы хотите видеть в итоге (Конечную цель). Не надо так усложнять всё. Аж три класса, чтобы вывести просто число.
DWanderer
Цитата(HaWK @ 10.03.2011 - 14:28) *
Вы лучше опишите что вы хотите видеть в итоге (Конечную цель). Не надо так усложнять всё. Аж три класса, чтобы вывести просто число.


Я уже задавал вопрос на вашем форуме и приводил скрины моей игрухи. Может помните, после вашей не большой просьбы, я сам смог разобраться). Спасибо вам за то огромное!

В плане визуального отображения я уже многое сделал, что мне нужно было на данный момент. Теперь перехожу к функциональной части.

Класс С у меня при старте загружает данные игрока из xml файла. Я создал отдельный класс для этого, т.к. посчитал, что проще 1 раз загрузить эти данные, чем в каждом классе начинать с загрузки.
Названный класс В у меня имеет различные кнопки, которые запускают таймеры и по истечению времени отправляют некоторые значения, которое я плюсую к изначально загруженному (number = number + newNum), как я и привел в примере.
Класс же А у меня отвечает за вывод полной информации игрока на экран. Вообще у меня сейчас все работает, если запускать через Денвер. Т.е. я получаю новое значение и отправляю его в базу sql. Каждый раз когда игрок нажимает на кнопку вызова информации (т.е. класс А), в классе С опять происходит загрузка этих данных и вывод через А.
Теперь же я хочу и мне вообще надо чтобы без Денвера, новые значения могли передаваться в класс А(на отображение) и в различные классы: Н, К и т.д. для дальнейших подсчетов и условий.

Надеюсь вы меня поняли  rolleyes.gif
HaWK
Так, теперь скажите где вы создаёте экземпляры классов B и A. Не возможно передать ссылку, не зная где находятся экземпляры.
DWanderer
Цитата(HaWK @ 10.03.2011 - 14:56) *
Так, теперь скажите где вы создаёте экземпляры классов B и A. Не возможно передать ссылку, не зная где находятся экземпляры.


Есть у меня главный класс mainClass, который вызывает класс Главного меню (linksMenu называется), в котором создаются экземпляры классов А(только отображение) и В(изучение наук -> изменения очков) и многие другие(их я пока не трогал).
В классе В я создаю экземпляр класса С (где загружаю xml) для загрузки и внесения изменений значений других переменных. В классе А я так же создаю экземпляр класса С (одни переменные постоянны, другие нет, как например очки и уровень игрока).

Хотел картинку-схему привести для наглядности, но чет ругается форум, хз почему.
HaWK
Код покажите этого mainClass.
DWanderer
CODE
package world {
import flash.display.Sprite
import flash.events.*

public class mainClass extends Sprite{
private var vueMenu:linksMenu; //экземпляр класса linksMenu
private var vueTownName:townNamePHP; //экземпляр класса townNamePHP
private var lvlScore:player; //экземпляр класса player
private var Exp:playerFunc; //экземпляр класса playerFunc

public function mainClass(){
//выполняем функции класса linksMenu (главное меню)
vueMenu = new linksMenu();
addChild(vueMenu);
//выполняем функции класса townNamePHP (отображение названия города)
vueTownName = new townNamePHP();
addChild(vueTownName);
//выполняем функции класса playerFunc (подсчет уровня игрока)
Exp = new playerFunc();
}
}
}


Ну тут ничего особенного просто сразу загружаются данные и вызывается класс главного меню linksMenu. Остальные классы (кроме С) весьма большие, чтобы сюда их приводить.
DWanderer
Вот небольшая схема, стрелками указываю классы, в которых созданы экземпляры.

http://imglink.ru/show-image.php?id=1afd17...a6f83bb317df99f
Русская версия IP.Board © 2001-2013 IPS, Inc.