Задать вопрос
  • Почему RenderTargetBitmap долго отрисовывается?

    @AlexHell
    судя по информации что я нашел https://stackoverflow.com/questions/56582013/why-t...
    RenderTargetBitmap doesn't take advantage of hardware rendering

    т.е. простыми словами - он рендерит на CPU, и в отличие от GPU рендеринга (шейдерами в играх как вы приводите сравнение), CPU рендеринг очень медленный, и не предназначен для высокого FPS, а скорее для оффлайн обработки как в граф редакторе без видеокарты :)
    Ответ написан
    Комментировать
  • Как по массиву точкек нарисовать круг WPF? Из миллиона точек?

    @AlexHell
    Зачем вызывается перерисовка элемента каждый раз с нуля. Если 99.9999999% его содержало не изменилось.

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

    .. если же у вас вопрос - почему они перерисовывают треугольники \ круги \ полигоны (легкие) - потому что это просто реализовать (и код простой) и быстро происходит (т.к. не тяжелая графика), а хранение RenderTexture на каждый элемент это потребление памяти (мегабайты допустим на каждый, но зависит от размера экрана и\или размера элемента), плюс усложнение кода (когда перерендеривать целиком обеъкт в RenderTexture, сам код вывода из RenderTexture в экран) или воспользоваться чемто готовым - но это тоже усложнения так и так по сравнению с рендером каждый фрейм всего что надо в экранный буфер
    Ответ написан
  • Почему не срабатывает рейкаст?

    @AlexHell
    Может ли юнити по каким-то причнам игнорировать рейкаст, и работать иначе на другом устройстве?

    да, очевидно может работать платформо-зависимо, и этот конкретный кейз вам надо детально дебажить, смотрите ваши логи, а не только видео (к слову которое вы приложили - черный экран у меня)
    Ответ написан
  • Как исправить ошибку RenderTexture.Create failed: width and height must be larger than 0?

    @AlexHell
    очевидно что это баг в юнити, раз ссылкается на пакет com.unity.2d.tilemap .. а по поводу что так быть не должно (в ответе) - разумеется, но в юнити случаются баги, пробуйте другую версию редактора (случайную или ищите ваш баг в баг-трекере их)
    Ответ написан
    Комментировать
  • Как оптимизировать рендеринг?

    @AlexHell
    в винде давным давно есть оптимизация для GUI как раз - перерендеринг (инвалидация) только отдельных изменившихся элементов, скажем одно текстовое поле перерендерится (и CPU и GPU), а потом прилепляется к закешированной текстуре (где все остальные неизмененные GUI)
    Ответ написан
    Комментировать
  • Есть ли аналог CLR via C# Рихтера в мире Java?

    @AlexHell
    Ответ написан
    Комментировать
  • Проверить пересекаются ли отрезки, что я делаю не так?

    @AlexHell
    В википедии есть формула и пояснения https://en.wikipedia.org/wiki/Intersection_(Euclid...

    а по вашему коду точно не разбирал

    вкратце как надо:
    * создаются уравнения прямых через 2 точки
    * проверяются пересечения двух уравнений прямых - есть ли точка пересечения (может не быть)
    * проверяется принадлежность точки пересечения каждому отрезку (или явно или лучше параметрически) (может быть в уравнении но не в диапазоне отрезка)

    однако так делать нельзя изза погрешности double if (y2 == y1) k1 = 0; обычно проверяют через if(Abs(y2 - y1) < epsilon) (скажем 0.0001 но зависит от задач)
    Ответ написан
    Комментировать
  • Находил ли кто-нибудь алгоритм разделения рандомной карты на различные регионы?

    @AlexHell
    подробней про Кластеризацию
    https://habr.com/ru/post/101338/

    Ищу подобное решения для увеличения продуктивности алгоритмов поиска пути.

    вы можете провести все ваши предварительные расчеты в оффлайне (т.е. на этапе генерации карты, а не во время "битвы")

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

    например
    - первым проходом - циклом итерируете все клетки одинакового типа (синие на карте например, допустим это "вода"), проверяете тип их соседей, выбираете границы, скажем зеленые\желтые (допустим "суша"), по результату этапа у вас есть большие области одного "цвета" с их границами (для описания можете заюзать bounding box или convex hull или что угодно такого рода)
    - вторым проходом - можно поделить крупные области, на более мелкие, например получить r1, r2, r3 с вашего скриншота, из исходного (на вашем скриншоте нету, но считайте что он сумма r1+r2+r3).. с помощью определения макс удаленности, скажем берете границу любую случайно - и от нее далее ведете по границе, пока не превышен лимит, или еще как-нибудь во время итерации ваших точек внутри региона проверяете лимит длины до первоначально выбранной границы

    p.s. а еще для той же цели оптимизации поиска почитайте
    https://www.redblobgames.com/pathfinding/grids/alg...
    Ответ написан
    Комментировать
  • Почему на смартфоне Lerp работает медленее?

    @AlexHell
    а где учат писать такой LERP с динамической точкой старта? для перемещения с равномерной скоростью нужно начальную точку и конечную взять статичными, меняя только коэффициент интерполяции от 0 до 1
    например (инцииализацию можете и по-своему сделать)
    public GameObject Test;
    public Vector3 StartPosition;
    public Vector3 TargetPosition;
    void Start() {
      StartPosition = Test.transform.position;
    }
    void Update(){
        Test.transform.position = Vector3.Lerp(StartPosition, TargetPosition, 5f * Time.deltaTime);
        }


    то что вы изначально написали может дико зависеть как от FPS так и от погрешности устройства, и вобще криво т.к. не выражает намерений (от куда до куда за сколько пеермещаться должно?)
    Ответ написан
    Комментировать
  • Как вы пришли к смене направления в программировании?

    @AlexHell
    Все люди разные. Если вы как я - welcome почитать. А может у вас свои мотивы.

    Если мне хочется поделать А, а потом Б, потом В - разные виды работ, в том числе фронт, бек, на java, на php, и потестить, и залезть в БД, и по оптимайзить, и доки почитать и т.п, то я ищу такую работу, где нас мало, а работы много, т.е маленькая конторка или ИП с играми под соц сети или мобилки и т.п.

    Если контора большая и ей нужен человек с направлением в java - я иду в нее на большую з/п но там очень неохотно позволяют лезть в смежные таски. Хотя зависит от моего желания и упорства.

    Высокую з/п платят не просто так, а как специалисту. Если перйти на джуна в фирму или как швец-жнеца-на-дуде-игреца к ИП-шницу, ради бОльшего разнообразия тасков - явно платят меньше, по моему опыту
    Ответ написан
    Комментировать
  • Как найти пустое место на воде в 2d?

    @AlexHell
    простое решение - цикл перебора рандомных варинтов X
    // ВНЕ цикла подбора рандомного X для оптимизации
      foreach (GameObject enemy in enemies)
      {
        // заполнить _usedCoordX
      }
    // цикл подбора рандомного X
    while (true)
    {
      int x = Random.Range(1 - _minX, _maxX);
      if (!_usedCoordX.Contains(x)) break;
    }


    (НЕ эффективное по перфомансу, можно оптимизить - структурами Spatial или заполненными областями - не буду приводить реализации)

    ___
    UPDATE:

    там где _usedCoordX заполняется
    хорошо бы бить поле на GRID равномерный, аналог хеша
    ______
    |__|__|
    |__|__|

    например
    если позиция object.X >= 10 && object.X < 20 то newX=1
    если позиция object.X >= 20 && object.X < 30 то newX=2
    и т.п с шагом 10
    тогда при уже существующем объекте с X = 15, не сгенерится объект с X = 16 или 17 и т.п т.к они в одной ячейке сетки

    и Random конечно по той же размерности кидать (_maxX должен быть не полного пиксельного\объектого размера, а размера сетки)

    UPD2: по теме https://gamedev.stackexchange.com/questions/69310/...
    и там же есть картинка

    UPD3: вместо равномерного GRID - можно юзать истинный Collision Detection, т.е после генерации Random X - проверять всех врагов вокруг, и если есть - генерить заного, так наверное лучше будет

    .. но опять же можно проверять по GRID-у всех в этой же ячейке (т.е если X равен 15, то проверим всех врагов - есть ли они в X от 10 до 19, и если нет - выход из цикла
    .. плюс проверять в соседних ячейках (иначе будут прям вплотную генериться
    Ответ написан
    Комментировать
  • Как разобраться в теме систем поддержки принятия решений?

    @AlexHell
    хотябы вот
    www.swsys.ru/index.php?page=article&id=823&lang=en

    91.222.128.30/handle/Uchebnye-izdaniya/Sistemy-pod...

    а из того что я изучал по дискретной математике и связанному это могут быть
    - линейное программирование
    https://ru.wikipedia.org/wiki/%D0%9A%D0%B0%D1%82%D...

    - многокритериальная оптимизация

    например для решения задач оптимизации
    - можно написать программу и рассказать как оно работает по симплекс-методу
    https://ru.wikipedia.org/wiki/%D0%A1%D0%B8%D0%BC%D...

    - по транспортной задаче
    https://ru.wikipedia.org/wiki/%D0%A2%D1%80%D0%B0%D...

    - многокритериальная оптимизация для оптимизации по этим самым нескольких критериям
    https://ru.wikipedia.org/wiki/%D0%9C%D0%BD%D0%BE%D...
    https://math.semestr.ru/simplex/concessions.php

    - возможно взять Теорию Игр и задействовать ее для выбора оптимальных стратегий, скажем по Min-Max для получения больший конкурентных преимуществ относительно каких-то заданных стратегий соперников, скажем вводится таблица весов и результатов (почитайте про Теорию Игр) и программа выводит наилучшие стратегии, возможно с заданием критериев на выбор (например "меньше убытков" или "больше прибыли" или "меньше шанса разорится" или "разорить всех конкурентов")
    https://ru.wikipedia.org/wiki/%D0%A2%D0%B5%D0%BE%D...

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

    UPD: еще можете почитать книжку по теме
    Дело - Математические методы и модели в управлении.2000
    Ответ написан
    Комментировать
  • Есть готовые OpenSource графический редакторы для чертежей и эл. схем на .NET?

    @AlexHell
    я попользовался гуглом за вас (сам с этими либами не работал)
    https://github.com/dataweb-GmbH/NShape/
    https://stackoverflow.com/questions/2005274/free-o...
    https://github.com/circuitdiagram/circuitdiagram
    dcjtech.info/topic/list-of-open-source-circuit-dia...

    Если происходит перемещение узла/линии/прямоугольника, то соединительные линии должны автоматически удлиняться, оставаясь при этом ломаными линиями.

    такой функционал не нашел circuitdiagram (онлайн редактор есть у него), возможно в какойто отдельной либе и есть, при желании пишется - гуглите алгоритмы
    Ответ написан
    Комментировать
  • Как вам такая концепция, когда code review делают не опытные, а новички?

    @AlexHell
    (сон по 4 часа в сутки, кофе литрами до болей в сердце и все такое) и быстро заслужить одобрение и даже повышение.

    что за дурацкое мировоззрение, гробить свое юношество \ молодость на то чтобы побыстрей изучить чтото, ну не до такой же степени, ну отучитесь вы сами в институте и почитайте книжек, и будете уже не джун а мидл с 1-3 летним опытом, если конечно делали курсовые и дипломы и свои проекты для интереса

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

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

    А "внимательно читать код" - это автоматически дает побочный эффект - делается дополнительный code review.

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

    результат код-ревью от профи - будет подробный разбор косяков в коде и способов его рефакторинга \ переписывания

    результат код-ревью от джуна - куча вопросов "а что это и как оно работает", и уж точно не поиск багов

    если ревью не делается опытными, то на это есть причины нехватки времени, и вас наняли не для этого потому что ваша эффективно 0 будет в этом ревью, а если будет надобность - есть кому провести качественный ревью

    и тесты по той же причине - или не пишутся, потому что нет эффективности ни от кого (времени мало, бизнесу надо быстрей и задачи не такие уж чтоб все юнит-тестить), и тем более не будет от джуна, а если вдруг планы поменяются - найдется опытный чтобы написать эти тесты
    Ответ написан
    Комментировать
  • Как оптимизировать анимации?

    @AlexHell
    я в WPF не шарю, мимо проходил
    есть опыт в Win Forms, Unity и сопутствующем
    может быть помогу чемто

    при каждом вызове метода с этой анимацией, создается обьект этой анимации, остается в памяти и там сидит до тех пор пока приложеине на закроется?

    Врятли, т.к. у объекта-анимации есть продолжительность, и он самоуничтожается под капотом по истечении таймера, вручную нет смысла удалять, я бы спроектировал именно так внутри (под капотом WPF всмысле)
    Судя по примерам (я не эксперт WPF) делать надо именно так, как у вас и сделано.

    вполне может быть что траблы с перформансом по таким причинам
    * ShowCard вызывается слишком часто, а этого кода вы не привели, вполне могут быть проблемы, например цикл из ShowCard или вызов его каждый такт (update или что там у вас в WPF)
    без защитного флага
    тогда когда надо сделать чтото в духе
    if (! isAnimPlayed)
    {
      isAnimPlayed = true;
      ShowCard ();
    }

    * слабый другой ПК, CPU \ GPU, уточняйте и тестите на аналогичных
    * много что модифицируется, т.е. window.cardQuestionBorder.RenderTransform это чтото большое и у него есть какието лишние потомки, и можно както разбить по-лучше
    Ответ написан
    6 комментариев
  • Что почитать по архитектуре приложений под десктоп?

    @AlexHell
    проектирование (не только десктопы)
    * Тепляков С. - Паттерны проектирования на платформе .NET - 2015
    * Нильсон - DDD - 2008

    UI
    * чтото по Win Forms \ WPF (хотя мои знания по ним несколько устарели)
    * Алан Купер об интерфейсе. Основы проектирования взаимодействия - 2009

    если делать игры / визуализацию (не просто формочки) - кроссплатформ сейчас на unity (билд и под ПК и под мобилы и под webgl)
    Ответ написан
    Комментировать
  • Оплата удаленной фултайм работы: аванс или сдельная?

    @AlexHell
    Посмеялся над многими ответами в этом типике.
    Да есть ответ что джентельмены доверяют - только он правдив.

    Предлагают заключить договор, который якобы их спасет. От чего?
    1) В договоре (работ \ услуг) либо вы распсиывается все до мелочей, все ТЗ, все классы, как тестится, как условия приемки, т.е. прямо расписывается от корки до корки ТЗ - это не час и не два, это редко кто так заморочиться, это дни-месяцы просто чтобы составить все подробности.
    И тогда такой договор защитит если в нем написано сделать Х а вы сделали Y < X, он защитит заказчика от того что он может не заплатить. т.к. вы сделали меньше. Либо защитит вас если вы сделали Х и соглашались на Х.
    2) В договоре (работ \ услуг) - Если подробностей ТЗ нет, если в проекте лапша \ поддержка \ стартап, там будет куча нюансов, которые сроки раздувают в 1.5 - 3 раза постоянно (пруфы по опыту 14 летнему программинга и 8 летнему на коммерческой основе удаленно), плюс от других людей - погуглите сколько проблем у людей "составить договор который защитит фрилансера". Вам просто не заплатят потому что заказчик найдет причину:
    а) если у вас написано ТЗ, но кроме него пришлось рефакторить, тестить, сопровождать другое, фиксить баги, на что вы не расчитывали изначально - заказчик не заплатить за это не расписанное в ТЗ
    б) если в ТЗ очень абстрактно, то может не заплатить ни за что, а конкретику писать дорого всем сторонам по времени, в том числе исследований
    в) тот кто составляет ТЗ - тому не заплатят потому что нет критериев "правильно составленного ТЗ"
    г) если пишите часы заказчику и в договоре написано "фрилансер пишет часы, а заказчик их оплачивает" - заказчик может не оплатить, мотивировав тем что вы делали не то что он хотел в эти часы, и вы доказывайте суду (если вы хотите судиться?) что вы сделали именно то, приглашайте экспертов

    поэтому либо у вас все очень просто формализуемо с ТЗ - делайте договор

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

    3) Либо у вас трудовой договор - заказчики будут от него отказываться, и даже если так - как вы будете доказывать часы?
    а) многие заказчики не будут писать в договоре что они оплачивают все что вы им скажете, а будут писать формулировки (был случай) "оплачиваются только принятые заказчиком часы" т.е он может захотеть и не принять, а не только то что вы ему сообщили.
    б) многие не согласяться платить фикс, мол вы можете не рабоатть весь месяц и за что вам фикс (условные 2к баксов в месяц), поэтому см пункт (а)

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

    как впрочем и заказчик не застрахован что фрилансер \ удаленщик не пропадет, или что не будет писать часы (которые ему оплачивать) больше в 2-3-4 раза, чем оно у него заняло времени, т.е. фрилансер тоже кинуть может и обмануть

    и это даже про РФ (как выше писали - для международных - ваш договор никого не защищает, ни вас, ни их, только репутация фирмы)
    Ответ написан
    Комментировать
  • Стоит ли идти учиться в ВУЗ будущему программисту?

    @AlexHell
    Учишься базовым навыкам, идешь в ВУЗ, изучаешь всю программу что там дают на курсовые\лабы, и попутно доп списки литературы спрашиваешь, плюс гуглишь по колючевым словам, в ВУЗе реально дается все по верхам, но всетаки зацепляюстя базовые навыки, потом по ним гуглишь сам и читаешь умные книжки (можно не от корки до корки, а конкретные темы что проходил)
    делаешь лабы - и не только, делаешь проекты для себя - для закрепления
    делаешь больше чем треюбуют, делаешь для наработки навыков, что вот это ты умеешь, а не просто "Cи прошли", "БД прошли"

    >> Моей целью есть разработка игр, хочу создать компанию по их разработке(в
    будущем)
    гейм дев это программинг в 1ю очередь
    т.е учишься программировать
    я так понимаю не художником и не аниматором, а именно тем кто будет продумывать архитектуру, и потом ее реализовывать, тестить и чинить баги - это программинг
    геймдев - это Предметная область
    т.е прикладная разработка К..
    к бухгалтерии.. к геймдеву.. к роботостроению

    >> но я боюсь того, что "Ты всегда успеешь..." закончиться после того как умру.
    если учиться хочешь от сих до сих (условные 4 года у ВУЗе) то закончится твоя учеба и карьера норм программиста с ней же
    потому что учиться надо всегда
    и реально все лучшие годы (с 15 до 45) пройдут у тебя в обучении чемуто новому - новые технологии будут замещать старые, новые подходы к работе, новые проекты, новые требования продуктивности.. если все это пропустить, и думать что вот я учился в ВУЗе (или сам) а теперь "я все знаю" - быстро станешь не-конкурентноспособным со многими (но ниша останется, всегда будут нужны кое-какеры, которые могут от сих до сих сделать, на старой легаси технологии)

    важный нюанс - не думай, автор вопроса, что какието пару лет в ВУзе тебя спасут, не строй иллюзий якобы в том что "за 4 года делать свою компанию", смысл в том чтобы наработать навыки и узнать много нового, 4 года это реально мало.. если идти в ВУЗ и параллельно делать свои сайд проекты для подкрепления - можешь делай (о боже!) гейм дев проекты! делай змейки, крестики нолики, делай синглы, потом делай сетевые крестики нолиги, потом делай 10х10 крестики нолики, изучай minmax и теорию игр по верхам, и комбинаторику, потом пиши AI ля своих крестиков ноликов
    и вот через 4 года ты знаешь много чего и наработал много чего
    можно и в геймдев реальный (а не с корочкой и ничего не умеющим)

    .. а там на дядю
    .. или на себя - в бизнес свой.. да нужны ДОП навыки, не ВМЕСТО программинга - быть менеджером\руководителем\директором.. а доп, и это доп ГОДЫ на наработки таикх навыков
    Ответ написан
    Комментировать