Немного сложно ответить точно, не зная, как вы создаете переменные и какие ошибки вы получаете. Можете ли вы опубликовать весь класс и ошибки?
Однако я могу порекомендовать вам , а не использовать шаблон Singleton. Это не идеальный случай для синглтона. Шаблону Одиночки нет места в ООП, это процедурное программирование, свернутое как ОО, но это аргумент для других.
Это, однако, идеальный случай для переменных уровня класса. Ниже приведен простой пример. Однако есть несколько пропущенных объявлений переменных (numCards), поскольку я не знаю, где вы их создаете и устанавливаете.
package{
import flash.display.Sprite;
public class CardGame extends Sprite{
private var cardPositions:Array = new Array();
private var cards:Array = new Array();
public function CardGame(){
for var i:uint = 1; i <= _CardGridInstance.numChildren; i++) {
var position:MovieClip = MovieClip(_CardGridInstance.getChildByName("Position_" + i));
cardPositions[i] = position;
cardPositions[i].pos_name.text = "position" + i;
cardPositions[i].id = ["pos"+i];
}
for(i = 1; i <= numCards; i++) {
var c:Class = getDefinitionByName("Card_" + i) as Class;
var cardInstance:MovieClip = new c();
cards[i] = cardInstance;
}
}
private function setPlayerCard(cardNumber:uint, cardPos:uint):void{
cards[cardNumber].x = _CardGridInstance.x + cardPositions[cardPos].x - 1;
cards[cardNumber].y = _CardGridInstance.y + cardPositions[cardPos].y;
addChild(cards[cardNumber]);
}
}
}
Таким образом, вы только один раз создаете и заполняете массивы и получаете к ним доступ из любого места в классе CardGame. Они не являются глобальными, но находятся в рамках метода setPlayerCard.
Вы можете получить ошибки, так как объекты не могут быть созданы при вызове конструктора класса документа, но это можно обойти.
Зачем нужно, чтобы переменная была общедоступной и статической?
Статический означает, что переменная находится в классе, а не в экземплярах класса. Таким образом, каждый экземпляр «CardGame» будет использовать одну и ту же статическую переменную. Я предполагаю, потому что это класс документов, что у вас не будет более одного его экземпляра. Так что для этого нет никаких оснований.
Единственная причина, по которой вы объявили ее общедоступной, - сделать переменную доступной извне класса через CardGame.cardPositions. Это плохая практика, так как вы не должны позволять другим объектам напрямую манипулировать внутренними данными Classes. Это нарушает инкапсуляцию. Поскольку это класс документов и вершина иерархии, вы должны передать копию данных любому объекту, который в этом нуждается, и дождаться события, чтобы получить обновленные данные. Таким образом, вы можете очистить данные перед их использованием, и вы не просто слепо доверяете другим объектам уважать ваши данные.
http://en.wikipedia.org/wiki/Encapsulation_(object-oriented_programming)