forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Общие вопросы (http://forum.boolean.name/forumdisplay.php?f=166)
-   -   Проблемы разработки от EvilOkta (http://forum.boolean.name/showthread.php?t=17911)

EvilOkta 14.07.2015 14:33

Ответ: Проблемы разработки от EvilOkta
 
Цитата:

Сообщение от seaman (Сообщение 297710)
Не знаю как эквивалентное выражение Линк работало бы. Но тут же не просто перебор - тут сортировка. Сортировка по идее медленней чем просто перебор массива.
PS: нашел статью по сравнению for foreach и ForEach(из Linq). Что быстрее? foreach vs. List.ForEach vs. for-loop

доберусь до скрипта попробую сравнить какой вариант будет быстрее в моем случае, если что результаты выложу для интереса )

EvilOkta 16.07.2015 00:18

Ответ: Проблемы разработки от EvilOkta
 
при 100000 вызовах что foreach, что linq выражение даст такой же эффект, зато строк стало поменьше

EvilOkta 31.10.2015 13:49

Ответ: Проблемы разработки от EvilOkta
 
подскажите по использованию UI системы. В общем какая проблема возникла:
Меню может появляться/исчезать по щелчку мыши на игровом поле. Управляется это так
PHP код:

UI_Menu.SetActive(true/false); 

В игровой логике присутствует проверка на пересечение курсора мыши UI c помощью:
PHP код:

if (EventSystem.current.IsPointerOverGameObject()) {...} 

Проблема в том, что если меню не активно (по умолчанию) то проверка пересечения выдает ошибку, т.к. объект не присутствует в сцене. Но при принудительном отображении меню проверка работает. Если меню снова скрыть - снова ошибки. В чем может быть беда и как исхитриться избежать таких ситуаций.

Планируемый алгоритм:
- Меню появляется при щелчке мыши по игровому объекту
- Меню пропадает при щелчке мыши по игровому полю
- Когда меню активно в логике кода должна происходить проверка на пересечение курсора мыши области UI.

Где копать?

pax 31.10.2015 14:46

Ответ: Проблемы разработки от EvilOkta
 
А если так?
PHP код:

if (EventSystem.current && EventSystem.current.IsPointerOverGameObject()) {...} 


EvilOkta 20.01.2016 00:00

Ответ: Проблемы разработки от EvilOkta
 
Подскажите, в новой системе UI каким образом можно снять выделение "Highlighted" с кнопки с помощью кода? Не могу найти какое свойство за это отвечает...

Антихрист 20.01.2016 00:19

Ответ: Проблемы разработки от EvilOkta
 
Цитата:

Сообщение от EvilOkta (Сообщение 303412)
Подскажите, в новой системе UI каким образом можно снять выделение "Highlighted" с кнопки с помощью кода? Не могу найти какое свойство за это отвечает...

Или полностью снять переходы:
GetComponent<Button>().transition = Selectable.Transition.None;
Или руками настроить цвет для хайлаита:
Создать ColorBlock. Настроить у него highlightedColor и присвоить его к button.colors.

EvilOkta 24.10.2019 20:20

Ответ: Проблемы разработки от EvilOkta
 
Возник вопрос, для понимания ситуации.
Есть субклассы, наследуемые от базового класса. Если создан экземпляр одного субкласса, может он каким-то образом превратиться в экземпляр другого субкласса? Паттерн состояние - это то?
Мне пока на ум пришло только уничтожение экземпляра субкласса и создание нового другого субкласса с переносом необходимых данных - так вообще делают или это плохая практика?

Антихрист 24.10.2019 21:06

Ответ: Проблемы разработки от EvilOkta
 
Цитата:

Сообщение от EvilOkta (Сообщение 316739)
Возник вопрос, для понимания ситуации.
Есть субклассы, наследуемые от базового класса. Если создан экземпляр одного субкласса, может он каким-то образом превратиться в экземпляр другого субкласса? Паттерн состояние - это то?
Мне пока на ум пришло только уничтожение экземпляра субкласса и создание нового другого субкласса с переносом необходимых данных - так вообще делают или это плохая практика?

Нельзя. Если у тебя есть 'треугольник' и 'квадрат' которые оба наследуются от 'фигуры', то сомневаюсь, что можно превратить одно в другое.
Паттерн состояние не превращает один класс в другой.
Данные можно перетащить из треугольника в квадрат через reflection в рамках родительского класса (фигуры).

EvilOkta 24.10.2019 21:19

Ответ: Проблемы разработки от EvilOkta
 
Ясно, спасибо! А как тогда лучше всего проектировать? Про треугольники и квадраты аналогия понятна.
Допустим базовый класс "работник"; субклассы "электрик", "менеджер", "ремонтник". Экземпляр класса "электрик" сменил работу и стал "менеджер" и должен теперь реализовывать другой набор функций.
Upcasting и Downcasting тоже не помогут?

Антихрист 25.10.2019 00:23

Ответ: Проблемы разработки от EvilOkta
 
Цитата:

Сообщение от EvilOkta (Сообщение 316741)
Ясно, спасибо! А как тогда лучше всего проектировать? Про треугольники и квадраты аналогия понятна.
Допустим базовый класс "работник"; субклассы "электрик", "менеджер", "ремонтник". Экземпляр класса "электрик" сменил работу и стал "менеджер" и должен теперь реализовывать другой набор функций.
Upcasting и Downcasting тоже не помогут?

Имхо, паттерн стратегия. Работа как интерфейс, конкретные профессии - его реализации. Работник ссылается на стратегию(его текущую работу). При смене профессии, меняем стратегию.

EvilOkta 30.10.2019 13:28

Ответ: Проблемы разработки от EvilOkta
 
Еще вопрос. Как вести документацию по составу класса? Для описания методов есть XML комментарии - это понятно, но интересует другое. Когда кол-во классов становится большим становится сложно в голове удерживать какие методы они реализуют, интерфейсы наследуют и какими свойствами обладают.
Может есть какие-то инструменты для создания базы данных о классах, их взаимодействии и структуре? Интересно для общего развития.
Или все банально сводится к тому, что в коде открываешь сам класс и вспоминаешь?)

seaman 02.11.2019 12:34

Ответ: Проблемы разработки от EvilOkta
 
Вложений: 1
В VS (не Community) есть средство создания диаграмм классов
Вложение 23060

pax 03.11.2019 11:53

Ответ: Проблемы разработки от EvilOkta
 
Цитата:

Сообщение от seaman (Сообщение 316778)
В VS (не Community) есть средство создания диаграмм классов
Вложение 23060

Ух какой ужас, моя не смотри.

2EvilOkta: Лучше называть классы именами, описывающими функции, которые они выполняют. И организовывать в пространства имен/папки по тому же принципу. Ничего вспоминать не потребуется, все будет понятно по наименованию классов. Много ли вы диаграмм видели в справке по .net? Я часто так же использую ключевое слово partial, чтобы разделить класс на несколько частей, если часть функций можно объединить в группы. Тогда в структуре проекта это представлено несколькими файлами, имена которых так же отвечают на вопрос, что там внутри (например LevelEditor.cs и LevelEditor.LoadSave.cs).

EvilOkta 03.11.2019 12:35

Ответ: Проблемы разработки от EvilOkta
 
Спасибо ) энтерпрайз дорого (я ж не зарабатываю программированием), идея с partial интересная. Параллельно в Excel заношу публичные методы классов и их сигнатуры, на всякий случай.

Продолжаю закидывать страшными вопросами. Я наконец-то разобрался со свойствами (pax за это отдельное спасибо), но терзают сомнения, можно ли их применять вот так:

PHP код:

protected static string[] Mounthes = new[] { "января""февраля""марта""апреля""мая""июня""июля""августа""сентября""октября""ноября""декабря" };
protected 
string _mounth;
        protected 
byte Mounth // храним номер месяца, выдаем его string из массива по номеру элемента
        
{
            
get
            
{
                
byte count 1;
                while (
count <= Mounthes.Length)
                {
                    if (
Mounthes[count-1] == _mounth) break;
                    
count++;
                }
                return 
count;
            }
            
set
            
{
                
_mounth Mounthes[value-1];
            }
        } 

Условно закидываем номер месяца, а получаем его string название. Или это плохая практика?

Антихрист 03.11.2019 14:25

Ответ: Проблемы разработки от EvilOkta
 
Цитата:

Сообщение от EvilOkta (Сообщение 316781)
Спасибо ) энтерпрайз дорого (я ж не зарабатываю программированием), идея с partial интересная. Параллельно в Excel заношу публичные методы классов и их сигнатуры, на всякий случай.

Продолжаю закидывать страшными вопросами. Я наконец-то разобрался со свойствами (pax за это отдельное спасибо), но терзают сомнения, можно ли их применять вот так:

PHP код:

protected static string[] Mounthes = new[] { "января""февраля""марта""апреля""мая""июня""июля""августа""сентября""октября""ноября""декабря" };
protected 
string _mounth;
        protected 
byte Mounth // храним номер месяца, выдаем его string из массива по номеру элемента
        
{
            
get
            
{
                
byte count 1;
                while (
count <= Mounthes.Length)
                {
                    if (
Mounthes[count-1] == _mounth) break;
                    
count++;
                }
                return 
count;
            }
            
set
            
{
                
_mounth Mounthes[value-1];
            }
        } 

Условно закидываем номер месяца, а получаем его string название. Или это плохая практика?

Конкретно к этому примеру - выглядит не очень. В первую очередь за счет цикла с сравнением строк внутри гетера. Добавь одну переменную и закэшируй туда индекс.
PHP код:

protected static readonly string[] Monthes =
        {
            
"января""февраля""марта""апреля""мая""июня""июля""августа""сентября""октября""ноября",
            
"декабря"
        
};

        protected 
byte monthIndex;
        protected 
string monthName;

        protected 
byte MonthIndex
        
{
            
get => monthIndex;
            
set
            
{
                if (
value <= || value 12) return;
                
monthIndex = (byte) (value 1);
                
monthName Monthes[monthIndex];
            }
        }

        protected 
string MonthName => monthName



Часовой пояс GMT +4, время: 20:33.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot