- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
public function GameCanvas()
{
if(_instance)
throw new Error("Вы не можете создавать экземпляры класса при помощи конструктора. Для доступа к экземпляру используйте GameCanvas.instance.");
if (stage) {
createGameCanvas();
} else {
addEventListener(Event.ADDED_TO_STAGE, createGameCanvas);
}
}
public var field : Field;
public var current_field : uint = 1;
public var fields_canvas : Canvas;
public function createGameCanvas(e:Event = null):void
{
GodObject.instance.addEventListener(ModelEnum.SERVICE_LEVEL.toString() + "." + ModelEnum.METHOD_GETUSERLEVEL.toString(), createLevel);
GodObject.instance.addEventListener(ModelEnum.SERVICE_SANDBOX.toString() + "." + ModelEnum.METHOD_GETUSERSANDBOX.toString(), createSandbox);
GodObject.instance.addEventListener(ModelEnum.SERVICE_USER.toString() + "." + ModelEnum.METHOD_GETINFO.toString(), getInfoHandler);
removeEventListener(Event.ADDED_TO_STAGE, createGameCanvas);
this.width = 800;
this.height = 600;
this.x = 0;
this.y = 0;
this.autoLayout = false;
this.verticalScrollPolicy = "off";
this.horizontalScrollPolicy = "off";
_memСontroller = new MemoryController();
loadData = new LoadData();
stage.addEventListener(Event.RESIZE , windowResize);
MainInterface.instance.create_main_interfame();
this.addChild(MainInterface.instance);
var items:Vector.<InventoryItem> = new Vector.<InventoryItem>();
items.push(new InventoryItem(FieldLibrary.square_grass_class, "sad"));
items.push(new InventoryItem(FieldLibrary.square_grass_class, "sad"));
items.push(new InventoryItem(FieldLibrary.square_grass_class, "sad"));
items.push(new InventoryItem(FieldLibrary.square_grass_class, "sad"));
Inventory.instance.createInventory(items.length+ 68, items);
//addChild(ActiveQuests.instance);
var obj:Array = [ { name:"Найди пять бутылок", descr:"Тебе необходимо сдать 5 бутылок, чтобы купить банку яги!" },
{ name:"Трололошки", descr:"Оставь десять комментов, содержащих слово \"школота\"!" },
{name:"Сдай сессию", descr:"Будь мужиком, сдай сессию!"} ];
ActiveQuests.instance.setQuests(obj);
switch (Capabilities.playerType) {
case 'StandAlone':
loadData.gateway.call("Server.service", new Responder(startSessionResult, loadData.onFault),"User.startSession", "bstrx");//bstrx
break;
}
for (var i:uint = 0; i < MainInterface.instance._menuBtsButtons.length;i++)
(MainInterface.instance._menuBtsButtons[i].img as Image).addEventListener(MouseEvent.CLICK, menuButtonsClickHandler);
//Model.instance.requestData(ModelEnum.SERVICE_LEVEL, ModelEnum.METHOD_GETUSERLEVEL, true, userID, current_field);
}
private function createLevel(e : DataEvent):void
{
if (e.getData())
{
ScreenManager.removeObject(field, this);
field = new Field();
field.sandbox = false;
field.initFieldListeners();
field.initSquareListeners();
field.createField(e.getData());
field.rearrange();
field.createPlayer(e.getData()[0].id);
this.addChildAt(field, this.getChildIndex(MainInterface.instance));
MainInterface.instance.setBtnsField();
}
}
Обожаю такой стайл - пусть позлятся и те кто любят this и кто не любят.
Но в данном случае это логично. у нас принять использовать this для унаследованных методов.
Я всегда стояла за лишние символы только если это нужно когда пространство имен перекрываться начинает ).
А как же неупоминание имени Б-жьего всуе?
Сильно. А просто сделать конструктор private нельзя было?
mxmlc -load-config+=obj\ArcheologConfig.xml -debug=true -incremental=true -o obj\Archeolog634709595029016500
Incremental compile of 3
Loading configuration file C:\flex_sdk_3.5.0.12683\frameworks\flex-config.xml
Loading configuration file D:\arheolog\archeolog\Client\Archeolog\o bj\ArcheologConfig.xml
Files changed: 2 Files affected: 8
D:\arheolog\archeolog\Client\Archeolog\s rc\Components\GameCanvas.as(41): col: 21 Error: A constructor can only be declared public.
private function GameCanvas()
^
Build halted with errors (fcsh).
(fcsh)
Done(1)
И при чем тут ява? Что ооп специально только для него придумано было?
Я ничего не говорил про ООП, и не сгораю желанием, если честно.
Нет, я настаиваю на том, что в AS3 невозможно "внезапно" создать 2 копии объекта. В Яве, если не предохранятся synchronized - иногда можно попасть. В AS3 - технически такой возможности нет.
А следить чтобы все кто пользуются твоим кодом тоже это не забывали везде делать?
И все же - как запретить другому человеку случайно создать левый экземпляр?
А себе через пол года доделывая собственный проект?
Ну и берите себе инструмент по вкусу, благо их навалом.
Я просто говорю, что усилие потраченое на то, чтобы обеспечить объекту то что он создастся в единственном экземпляре в большинстве случаев просто не нужное и в некоторых случаях - вредное, но никогда не полезное.
Зачем аппелировать к вещам которые тут не учавствуют? Инкапсуляция и ошибки - какое они имеют отношение к вопросу? Ну как-то проще надо быть, что ли... Или, еще хуже, объяснять код выше тем, что "а вдруг что-то случится, а я не знаю что это?" - да, наверное случится, но это, опять же, это никак не повлияет на решение проблемы - код выше не предохраняет от каких-то непредвиденых ошибок. Он просто добавляет немного бессмысленных строчек. Если кто-то что-то сломает, то нужно писать тесты, которые проверяют, что это что-то не сломалось, но не в самой программе же.
Категорично то как.
Мне приходилось натыкаться на этот эксепшен, если бы не он пришлось бы долго искать что случилось, почему глючит и куда делись данные (и вообще вспомним что не все умеют дебаггер юзать). На ас профессора для профессоров не пишут, потом же шею намылят за то что твоим кодом воспользоваться не смогли.
Все значит везде и всегда писать надо:)
Говорить что какая либо языковая конструкция должна или не должна быть это... ну свойство теоретика что ли.
в точку.
Если есть объект, который должен быть в единственном числе, нужно это явно декларировать. Чем раньше выявится ошибочная ситуация, тем лучше. Пусть лучше новый разработчик наткнётся на свою ошибку, разберётся получше и сделает всё согласно задуманной архитектуре, чем наворотит феерических костылей, многократно увеличив "технический долг".
И за очень долгую практику использования AS я не встретил ни один класс-одиночку, который бы был оправдан. И я думаю, что видел очень много AS кода...
Возьмите какой-нибудь прокси-класс, который создается только если у него в подобии хэшмэпа не хранится уже созданный экзэмпляр, для коннекта с конкретным сервисом. Да, изврат. Но эдабы же. Как с ними по-другому?
>>Более того, в AS3 нет механизма, который бы однозначно гарантировал что объект будет >>создан в единственном экземпляре - если мне очень сильно захочется, или так же >>"случайно", эту ошибку можно обойти, например, создав класс-наследник и не вызвав в >>нем супер-конструктор.
Поэтому многие дружно стали юзать роботлегс. С ним экшн становится более, чем вменяем.
Его убрали потому, что им никто особо не пользовался, реализация была очень затруднительной и занимала много времени при компиляции.
Программист, который не умеет использовать дебаггер - это личинка программиста :) С таким же успехом можно в качестве аргумента привести тот факт, что не все люди знают AS3, и поэтому программы лучше писать на китайском, т.как большинство людей на планете понимает китайский. Если не умеет использовать дебаггер - то чего он вообще взялся за работу?
У нас найти хоть чуть умеющего прогера черезвычайно сложно.
Программисты в киеве не знающие дебаггер / ху из опп / где гугл не только есть но и хотят (иногда и получают) больше 1-2к баксов.
Ну да, если что-то случилось, а если не случилось - значит все нормально.