- 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();
}
}
kyzi007 25.04.2012 15:46 # +1
Обожаю такой стайл - пусть позлятся и те кто любят this и кто не любят.
KirAmp 25.04.2012 15:52 # 0
Но в данном случае это логично. у нас принять использовать this для унаследованных методов.
kyzi007 25.04.2012 16:07 # 0
Я всегда стояла за лишние символы только если это нужно когда пространство имен перекрываться начинает ).
KirAmp 25.04.2012 16:27 # 0
someone 25.04.2012 15:54 # +2
А как же неупоминание имени Б-жьего всуе?
Сильно. А просто сделать конструктор private нельзя было?
KirAmp 25.04.2012 16:01 # 0
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)
kyzi007 25.04.2012 16:07 # 0
wvxvw 25.04.2012 17:39 # 0
kyzi007 25.04.2012 17:44 # +1
И при чем тут ява? Что ооп специально только для него придумано было?
wvxvw 25.04.2012 18:02 # 0
Я ничего не говорил про ООП, и не сгораю желанием, если честно.
Нет, я настаиваю на том, что в AS3 невозможно "внезапно" создать 2 копии объекта. В Яве, если не предохранятся synchronized - иногда можно попасть. В AS3 - технически такой возможности нет.
kyzi007 25.04.2012 18:25 # 0
А следить чтобы все кто пользуются твоим кодом тоже это не забывали везде делать?
kyzi007 25.04.2012 18:26 # 0
И все же - как запретить другому человеку случайно создать левый экземпляр?
А себе через пол года доделывая собственный проект?
wvxvw 25.04.2012 20:42 # 0
kyzi007 25.04.2012 21:28 # 0
kyzi007 25.04.2012 21:34 # 0
Ну и берите себе инструмент по вкусу, благо их навалом.
wvxvw 26.04.2012 11:08 # 0
Я просто говорю, что усилие потраченое на то, чтобы обеспечить объекту то что он создастся в единственном экземпляре в большинстве случаев просто не нужное и в некоторых случаях - вредное, но никогда не полезное.
Зачем аппелировать к вещам которые тут не учавствуют? Инкапсуляция и ошибки - какое они имеют отношение к вопросу? Ну как-то проще надо быть, что ли... Или, еще хуже, объяснять код выше тем, что "а вдруг что-то случится, а я не знаю что это?" - да, наверное случится, но это, опять же, это никак не повлияет на решение проблемы - код выше не предохраняет от каких-то непредвиденых ошибок. Он просто добавляет немного бессмысленных строчек. Если кто-то что-то сломает, то нужно писать тесты, которые проверяют, что это что-то не сломалось, но не в самой программе же.
kyzi007 26.04.2012 11:15 # +1
Категорично то как.
Мне приходилось натыкаться на этот эксепшен, если бы не он пришлось бы долго искать что случилось, почему глючит и куда делись данные (и вообще вспомним что не все умеют дебаггер юзать). На ас профессора для профессоров не пишут, потом же шею намылят за то что твоим кодом воспользоваться не смогли.
Все значит везде и всегда писать надо:)
Говорить что какая либо языковая конструкция должна или не должна быть это... ну свойство теоретика что ли.
roman-kashitsyn 26.04.2012 11:24 # +1
в точку.
Если есть объект, который должен быть в единственном числе, нужно это явно декларировать. Чем раньше выявится ошибочная ситуация, тем лучше. Пусть лучше новый разработчик наткнётся на свою ошибку, разберётся получше и сделает всё согласно задуманной архитектуре, чем наворотит феерических костылей, многократно увеличив "технический долг".
wvxvw 26.04.2012 12:26 # 0
И за очень долгую практику использования AS я не встретил ни один класс-одиночку, который бы был оправдан. И я думаю, что видел очень много AS кода...
guest 07.09.2012 07:35 # 0
Возьмите какой-нибудь прокси-класс, который создается только если у него в подобии хэшмэпа не хранится уже созданный экзэмпляр, для коннекта с конкретным сервисом. Да, изврат. Но эдабы же. Как с ними по-другому?
>>Более того, в AS3 нет механизма, который бы однозначно гарантировал что объект будет >>создан в единственном экземпляре - если мне очень сильно захочется, или так же >>"случайно", эту ошибку можно обойти, например, создав класс-наследник и не вызвав в >>нем супер-конструктор.
Поэтому многие дружно стали юзать роботлегс. С ним экшн становится более, чем вменяем.
guest 07.09.2012 07:38 # 0
wvxvw 26.04.2012 12:09 # 0
Его убрали потому, что им никто особо не пользовался, реализация была очень затруднительной и занимала много времени при компиляции.
Программист, который не умеет использовать дебаггер - это личинка программиста :) С таким же успехом можно в качестве аргумента привести тот факт, что не все люди знают AS3, и поэтому программы лучше писать на китайском, т.как большинство людей на планете понимает китайский. Если не умеет использовать дебаггер - то чего он вообще взялся за работу?
kyzi007 26.04.2012 12:19 # 0
У нас найти хоть чуть умеющего прогера черезвычайно сложно.
Программисты в киеве не знающие дебаггер / ху из опп / где гугл не только есть но и хотят (иногда и получают) больше 1-2к баксов.
kyzi007 26.04.2012 12:27 # 0
wvxvw 26.04.2012 12:40 # 0
Ну да, если что-то случилось, а если не случилось - значит все нормально.