Create site free
Использовать ли global.* (4) - Решение серьезных вопросов - Разработка игр на Game Maker (Advanced Mode) - Форум Game Maker. Разработка игр.
Здравствуй Гость | Перейти на сайт

Главная | Форум | Регистрация | Войти
gmaker.net ;) [ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 4 из 5«12345»
Форум Game Maker. Разработка игр. » Разработка игр на Game Maker (Advanced Mode) » Решение серьезных вопросов » Использовать ли global.*
Использовать ли global.*
Ang3L Дата: Пятница, 24.04.2009, 14:47 | Сообщение # 61
Каждый 5й пост мой
Группа: Админы
Сообщений: 2667
Статус: Offline
Quote (splean)
"по фен-шую" вроде бы и некрасиво использовать глобалы, но в рамках ГМ - вполне приемлимо и оправдано.

Ну лан, на том и порешим.


Blogpost
 
GLAVAK Дата: Пятница, 06.11.2009, 08:45 | Сообщение # 62
Молчун
Группа: Пользователь
Сообщений: 1
Статус: Offline
Так если global - это объект, то зачем создавать объект controller, и совать в него свои "lives" и "health"?

Нет, конечно если переменная только на один уровень/комнату то можно и с контроллером, но global и быстрее, и этот объект(вроде-как) всё равно стоит в комнате и занимает память. Так почему же не воспользоватся тем что нам дано wacko ?

 
WertyXBOCT Дата: Пятница, 06.11.2009, 08:52 | Сообщение # 63
Каждый 5й пост мой
Группа: Страж
Сообщений: 2467
Статус: Offline
global не объект.
Если тебе нужно создать постоянно работающий счетчик чего-то, а также хранить где то ресурсы, которые необходимо будет выгружать или подгружать, а также отображать что либо, то лучший выход, создать объект контроллер.


Blog:www.WeslomPo.ru
mailto: i@weslompo.ru
 
Ang3L Дата: Суббота, 07.11.2009, 01:05 | Сообщение # 64
Каждый 5й пост мой
Группа: Админы
Сообщений: 2667
Статус: Offline
GLAVAK, как что-нибудь напишешь больше чем Hit The Ball, там и посмотрим.


Blogpost
 
NeutralD Дата: Пятница, 01.10.2010, 16:30 | Сообщение # 65
Хрен заткнешь
Группа: Высший Советник
Сообщений: 398
Статус: Offline
WertyXBOCT, а почему это не объект? Насколько мне известно, как раз-таки специально зарезервированный объект.

Добавлено (01.10.2010, 16:23)
---------------------------------------------
Из хелпа:

Quote
global: Not an instance at all, but a container that stores global variables

Добавлено (01.10.2010, 16:30)
---------------------------------------------
по крайней мере, адресуется он ровно также, как и другие объекты. то есть, является классом и х с ним.
разница в том, что удалить его из памяти мы не можем никак. объект же, будь он персистент или не персистент, может быть удален.
цитата из англицкой педевикии:

Quote
In addition, there is no command for releasing a variable to free memory. When an instance is destroyed or a script finishes processing, however, any variables local to that instance or script are released. Hence, to conserve memory, it is advisable that one use variables local to either instances or scripts to store information rather than global variables.

вот и всё, господа.
 
WertyXBOCT Дата: Пятница, 01.10.2010, 17:15 | Сообщение # 66
Каждый 5й пост мой
Группа: Страж
Сообщений: 2467
Статус: Offline
NeutralD, честно говоря, за год я свое мнение поменял smile


Blog:www.WeslomPo.ru
mailto: i@weslompo.ru
 
Ang3L Дата: Пятница, 01.10.2010, 23:57 | Сообщение # 67
Каждый 5й пост мой
Группа: Админы
Сообщений: 2667
Статус: Offline
WertyXBOCT, NeutralD, так я не понял, господа! На какое вы мнение поменяли?

Quote (NeutralD)
разница в том, что удалить его из памяти мы не можем никак.

По моему, это меньшее из зол. Т.к. глобальных переменных много не бывает. Я больше ратую за понятность. Когда есть глобальная переменная и её меняют несколько объектов, вот здесь начинаются проблемы. И чем программа пухлее, тем они серьёзнее.


Blogpost
 
DragonSkiN Дата: Суббота, 02.10.2010, 07:13 | Сообщение # 68
Всех уже задолбал
Группа: Страж
Сообщений: 1180
Статус: Offline
Ang3L, объясни мне дураку, чем лучше менять control.value чем global.value?
В чём соль?
У меня в редакторе штук 20 переменных и структур, которыми пользуется весь редактор (разные его части).
Если бы я делал на объектах, в чём разница, кроме отдельно созданного объекта?

один фиг эи переменные скорее всего даже создаваться будут в одном объекте (это моя заморочка мутить длиннющий список переменных, на который всегда можно взглянуть)



http://gamegraphycs.do.am/ - сайт о 2D графике
http://dragonskin.ath.cx:777/- доступ по хттп к сборнику ресурсов для игр


Сообщение отредактировал DragonSkiN - Суббота, 02.10.2010, 07:32
 
Ang3L Дата: Суббота, 02.10.2010, 14:55 | Сообщение # 69
Каждый 5й пост мой
Группа: Админы
Сообщений: 2667
Статус: Offline
Quote (DragonSkiN)
объясни мне дураку,

Тут надо начать с истории. Сначала было слово. Потом слово превратилось в предложение и далее в процедурный код. Так зародилась программирование. Но в один прекрасный момент, при написании очередной очень большой и очень крутой ОСи, программисты сообразили что части их программы формально не связаны друг с другом. Т.е. есть куча функций и процедур в столбик, которые изменяют данные тута, тама и ещё в пару десятков мест, и код где весь этот бедлам расположен. Что и кого изменяет понять было трудно и требовало более детального изучения (т.е. лишних трат времени, иногда слишком лишних). И придумали в конце ~60ых годах ООП, где каждый класс (по GM - объект) выражает свою концепцию, а объект (по GM - образец или инстанс) выполняет строго свои обязанности.
Так вот. Теперь же все переменные стали находится в отведённых для них местах, в определённых классах отвечающие за них.
Пример из жизни не относящийся к программированию: у меня на бывшей работе офис был объединён для всех, т.е. люди из разных отделов сидели в одной комнате. Так вот, узнать кто из какого отдела стоило немалых лишних усилий и бессмысленных разговоров. Причём люди сидящие рядом могли быть из совершенно разных отделов. А вот если бы они были все определены по своим комнатам с надписью отдела, таких проблем бы не возникло - узнавать кто откуда. Зашёл в отдел, а там неважно с каким сотрудником будешь иметь дело, они выполняют одни и те же функций. Затраты на нахождение отдела минимальны. Естественно, что чем больше фирма, тем более это актуально.

Разберём твою ситуацию. Будем разбирать в стиле вопрос/ответ, и я не буду вываливать готовый ответ:

Quote (DragonSkiN)
чем лучше менять control.value чем global.value?

Менять? Ничем. Оно одинаково. Так же как, в принципе, и в любом другом языке программирования: присваивание глобальной переменной ничем не отличается от локальной (я так думаю). Важно здесь понять чем они различаются!

И вот тут я беру твой пример:

Quote (DragonSkiN)
У меня в редакторе штук 20 переменных и структур, которыми пользуется весь редактор (разные его части).

Допустим что-то работает не так. И ты выяснил что переменная №15 принимает странные значения которые не должна принимать. Как ты найдешь то место где оно его принимает неверно?


Blogpost
 
DragonSkiN Дата: Суббота, 02.10.2010, 20:34 | Сообщение # 70
Всех уже задолбал
Группа: Страж
Сообщений: 1180
Статус: Offline
Quote (Ang3L)
Как ты найдешь то место где оно его принимает неверно?

А хз. У меня в редакторе (текущей версии) ни глобальных переменных, ни объекта контроллера нет в принципе, но поиск причины ошибки ещё ни разу не занял более 20 - 25 минут (с учётом времени на ковыряние в носу).

Но идею уловил, возможно буду пользовать.



http://gamegraphycs.do.am/ - сайт о 2D графике
http://dragonskin.ath.cx:777/- доступ по хттп к сборнику ресурсов для игр
 
Ang3L Дата: Суббота, 02.10.2010, 20:58 | Сообщение # 71
Каждый 5й пост мой
Группа: Админы
Сообщений: 2667
Статус: Offline
Quote (DragonSkiN)
идею уловил

Это хорошо.

Quote (DragonSkiN)
но поиск причины ошибки ещё ни разу не занял более 20 - 25 минут

Да? Ну я могу подкинуть код с небольшой, умышленной ошибкой, где времени тебе потребуется чуточку больше, чтобы прочувствовать всю соль. С учётом красивого и правильного форматирования, конечно.

А ведь для тебя это актуально же? Ты хотел сделать универсальный редактор, чтобы желающие смогли воспользоваться твоими наработками. Так упрости им жизнь разбираться в чужом коде.

И ещё раз повторю:
56.1. Избегайте глобальных идентификаторов

Quote (Ален И. Голуб)
Положим, что две функции связаны посредством глобальной переменной, если одна из них устанавливает эту переменную, а вторая ее использует. (Если бы глобальная переменная не использовалась совместно, то не было бы причины иметь ее глобальной; она могла бы быть статической локальной). Отношения связи с участием глобальных переменных вызывают особенно неприятные проблемы при сопровождении, потому что эти отношения тяжело отслеживать. Когда глобальная переменная меняется во время выполнения программы, то очень трудно разобраться, что ее изменило. Аналогично, если вы должны изменить поведение глобального объекта, то очень трудно разобраться, где он используется. По этой причине лучше всего вообще избегать глобальных переменных. Конечно, большинству программ реального мира необходимо незначительное количество глобальных переменных, но, как правило, я начинаю сильно нервничать, если их становится больше 10.


Blogpost
 
NeutralD Дата: Суббота, 02.10.2010, 21:11 | Сообщение # 72
Хрен заткнешь
Группа: Высший Советник
Сообщений: 398
Статус: Offline
Ang3L, по существу надо было оставить последний абзац-цитату из Голуба, а также сообщить, что в ГМ есть степ-бай-степ дебагинга и возможности, соот-но, ставить точки останова, что делает всех гм-кодеров слепцами, по сути.
 
DragonSkiN Дата: Суббота, 02.10.2010, 21:15 | Сообщение # 73
Всех уже задолбал
Группа: Страж
Сообщений: 1180
Статус: Offline
Quote (Ang3L)
Да? Ну я могу подкинуть код с небольшой, умышленной ошибкой, где времени тебе потребуется чуточку больше, чтобы прочувствовать всю соль. С учётом красивого и правильного форматирования, конечно.

Я специально писал код так, чтобы отлаживать его приходилось как можно меньше и делать это можно было как можно быстрее.
Достигнуто это было банальной визуализацией или выводом с помощью сообщения нужной или подозрительной информации.

Конечно искуственно спланированную ошибку найти будет сложнее, особенно если код только ради этой ошибки и был написан.



http://gamegraphycs.do.am/ - сайт о 2D графике
http://dragonskin.ath.cx:777/- доступ по хттп к сборнику ресурсов для игр


Сообщение отредактировал DragonSkiN - Суббота, 02.10.2010, 21:16
 
Stasundr Дата: Суббота, 02.10.2010, 21:42 | Сообщение # 74
Всех уже задолбал
Группа: Высший Советник
Сообщений: 1058
Статус: Offline
DragonSkiN, вы можете тут долго спорить и каждый может настаивать на своем. Однако, дело просто в жизненном опыте. У тебя маленький проект и ты можешь свободно управлять им через global.переменные? Отлично! Делай как тебе удобно. Может позже поймешь, что это не очень классно, может не поймешь. Дело-то твое.

Я по опыту могу сказать, чем o_core.smth лучше global.smth - логикой. Так понятно, что это переменная ядра, т.е. сохраняется логика. А с глобалом это не очевидно.
Конечно, использую и глобальные переменные. Например, положение курсора мыши с учетом вида: переменные cursor_x и cursor_y, но они объявлены через globalvar, а их описание дается в комментах.

Повторяю, это только жизненный опыт.



.blanco
 
DragonSkiN Дата: Суббота, 02.10.2010, 21:49 | Сообщение # 75
Всех уже задолбал
Группа: Страж
Сообщений: 1180
Статус: Offline
Stasundr, так я ж и не спорил, я попросил разжевать чем лучше объект контроллер. Ang3L разжевал - структурированностью.
Вроде и не было спора.


http://gamegraphycs.do.am/ - сайт о 2D графике
http://dragonskin.ath.cx:777/- доступ по хттп к сборнику ресурсов для игр
 
NewStrannik Дата: Воскресенье, 03.10.2010, 07:11 | Сообщение # 76
Всех уже задолбал
Группа: Проверенные
Сообщений: 808
Статус: Offline
Обращение к переменным в global'е быстрее, нежели в объекте. Я промолчу про globalvar. biggrin

> o_core.smth лучше global.smth - логикой
Почему же нельзя их называть с логикой?
global.core_smth, global.coreSmth, coreSmth, gCoreSmth, core_smth, _core_smth и проч. варианты.

 
Stasundr Дата: Воскресенье, 03.10.2010, 08:08 | Сообщение # 77
Всех уже задолбал
Группа: Высший Советник
Сообщений: 1058
Статус: Offline
DragonSkiN, хорошо smile
NewStrannik, у тебя механистический подход, который оправдан в идеальном мире, а я говорю про то, что узнал по собственному опыту.


.blanco
 
NewStrannik Дата: Воскресенье, 03.10.2010, 09:06 | Сообщение # 78
Всех уже задолбал
Группа: Проверенные
Сообщений: 808
Статус: Offline
> у тебя механистический подход, который оправдан в идеальном мире, а я говорю про то, что узнал по собственному опыту.
Аргументы. Иначе посчитаю, что это был переход на личности. biggrin

На GM я делал тетрис только кодом в создании комнаты. Вначале объявлял дата-структуру поля, очки, уровень, номер текущей и след. фигуры, координаты оной, сами фигуры и проч., и проч.. В общем, всё работало и без объектов.

Кстати! А как же OneStep by Druce? Наглядный пример. =)



Сообщение отредактировал NewStrannik - Воскресенье, 03.10.2010, 09:08
 
SRes Дата: Воскресенье, 03.10.2010, 10:03 | Сообщение # 79
Каждый 5й пост мой
Группа: Страж
Сообщений: 2512
Статус: Offline
Stasundr, global.core_loadingStatus - чем не наглядно ?
NewStrannik, ГМ был создан для простоты разработки, пытаться делать в нем игры без создания объектов (не в реал-тайме), и подобных фичь - это уже на любителя, да и далеко ты так врядли уедешь.


Velociped Inc.
 
WertyXBOCT Дата: Воскресенье, 03.10.2010, 10:09 | Сообщение # 80
Каждый 5й пост мой
Группа: Страж
Сообщений: 2467
Статус: Offline
Я вообще все глобальные переменные тупо называю через globalvar большими буквами, global.* уже давно не пользовался :). Например:
WIDTH,HEIGHT, SIZE, SELECTED. Еще ни разу не запутался.


Blog:www.WeslomPo.ru
mailto: i@weslompo.ru
 
Форум Game Maker. Разработка игр. » Разработка игр на Game Maker (Advanced Mode) » Решение серьезных вопросов » Использовать ли global.*
Страница 4 из 5«12345»
Поиск:



Сообщество Gmaker.SU 2005-2012
Используются технологии uCoz
Простой вход