Magneto903, Зачем? В этом нет вобще никакого смысла.
В таких случаях реализуют сразу два механизма перемещения: глобальный и локальный. Глобально - пройти из одной части местности до другой, например, по большой ячейстой структуре с ячейками по 10 метров (условно). Это может быть граф или прямойгольная матрица - не имеет значения. Просто глобальное задание того, куда персонаж должен идти. Локальный вариант уточняет движение в пределах ячейки, чтобы обходить мелкие препятствия, не сталкиваться с другими персонажами и тому подобное, при этом он всё равно стремится идти в глобально заданном направлении. Т.е. он шёл, наткнулся на пенёк, сделал шаг в сторону и вернулся к "основному плану". При этом глобальный путь вычисляется или один раз или в случаи какого-то критического события (мост взрвали, дорогу перегородили т .п.), а локальный путь пересчитывается или каждый кадр или с каким-то тикрейтом. Напрмиер, если один шаг персонажа занимает 0,5 секунды, то пересчитывать путь чаще, чем 2 раза в секунду не имеет смысла. За эти 0,5 секунды может отрисоваться 120 кадров, при этом персонаж физически не может изменить траекторию движения.
Magneto903, На самом деле, ещё больше операций будет, потому что ещё накладные расходы на сохранение инексов ячеек текущего шага. Допустим, что реализация будет очень корявая и поиск будет занимать 1 секунду. Как часто боту будет нужно перепроверять маршрут? Замечали в играх, что условный танк ехал-ехал, доехал до взорванного моста, развернулся и другим путём поехал? Это от того, что маршрут перепроверяют не в каждом кадре и не раз в секунду даже.
Для оптимизаци можно карту побить на крупные ячейки и сперва для них путь строить, а потом уже внутри более точно.
P.S. не сразу заметил про JS. Может и пару секунд искать будет на полной карте (у меня недоверие к JS). Если сперва искать по укрупнённой матрице, то будет мгновенно искать. Например, сделать 500*500 размер и предрасчитать возможность перехода из ячейки в соседнии. Сперва искать по укрупнённой, а потом уже по полной, используя только выбранные ячейки.
Эдуард, "палитры" это где "селективная". "Потери" это правый нижний окошко с надписью "потери". Это чтобы сжатие с потерями было.
Самое главное, дизеринт со "случайное" попробуй переключить на "шаблонное" или вообще выключи. Для сжатия нет ничего хуже случайностей.
DeOxygen, Теоретически, можно ещё больше ускорить, если создать список из полигонов, описывающих положение кисти в каждом шаге и потом этот список нарисовать за один drawing call. Н отут уже потратится время на создание списка вершин и списа треугльников, так что я не буду утверждать, что это будет быстрее работать, чем один и тот же спрайт по разным координатам рисовать.
DeOxygen, Я ещё сразу не сказал, т.к. это показалось очевидным: текстура-холст - это буфер для offscreen rendering. Т.к. холст может быть больше/меньше окна приложения, то рисовать надо в offscreen буфере и уже потом его вводить на экран с любым масштабом и положением.
DeOxygen, Текстура кисти рисуется белым цветом, чтобы при выводе текстуры на холст можно было задать цвет примеси. Цвет умножится на цвет текстуры. Если текстура изначально белая, то в результате нарисуется кружок заданного цвета с учётом прозрачности кисти.
DeOxygen, Холст - текстура, на которой сейчас рисуете (24 бит, без Z буфера). Её не очищаете и рисуете как рисовали и прежде. Вторая текстура - изначально прозрачная, в ней рисуется кисть белого цвета (допустим, кружок с размытыми краями, как в фотошоп). В фукнции drawLine вместо рисования в цикле ij рисуешь текстуру кисти 'k' раз в цикле по steps.
DeOxygen, Как куда? Сменили инструмент (изменили размер) - удалили текстуру кисти. Текстура кисти один раз создаётся при задании размера. Т.е. хоть месяц непрерывно рисуй одной кистью и она в памяти всего один раз будет создана.
Vladimir S, Есть более продвинутый. Для сравнения использовать регулярное выражение, разбивать название на "цифры" и "не цифры". Не цифры сравнивать посимвольно, а цифры преобразовывать в int и сравнивать уже их. Так можно будет сравнивать названия, в которых цифры в любом месте могут находиться.
Eugene, монитор ресурсов запустить и оставить открытым в ожидании появления тормозов. И тогда уже смотреть.
Если тормоза всё-время появлялись примерно в одно и то же время, то это похоже на какие-то запланированные служебные действи, типа индексирования, дефрагментации и обновлений. В общем, оставляй открытым монитор ресурсов и жди тормозов.
Eugene, Это хороший признак! Есть шанс, что вируса нет, раз никто не пытался избавиться от антивируса.
В диспетчере задач на вкладе "производительость" есть ссылка для открытия мониора ресурсов. Нужно открыть монитор и закрыть диспетчер задач. В мониоре рисуются графики загрузки и процессора и всего прочего и можно увидеть, какое конкретно приложение грузит. Главное закрыть диспетчер задач, чтобы если его приложение какое-то проверяет, чтобы перестало проверять.
Eugene, Раз не поьзуетесь антивирусами, то хватит любого "одноразового" сканера, типа CureIt или Касперского.
На самом деле, шансов мало, если вирус хорошо написан. Зато, если антивирус не скачается (самоудалится сразу после скачивания) или не запустится, то это 100% гарантия заражения.
DevMan, Это да. Я двухядерный (4 потока) взял ноут, как раз потому что на ноуте мне больше было не надо, при этом мощность ниже и чуть дольше работает не греясь.
DevMan, ТС явно написал, что для "сложной работы с кодом" :) В любом случае, у Райзена и на ядро частота выше и турбо-буст выше и IPC выше. Есть подозрение, что цена при этом ниже.
Вообще, сейчас на Интел брать есть смысл только ради матрицы, почему-то с Райзеном гораздо меньше выбор хороших экранов. Или так было, когда я на Райзене ноут брал, а теперь уже расширили ассотимент - не проверял за ненадобностью.
В таких случаях реализуют сразу два механизма перемещения: глобальный и локальный. Глобально - пройти из одной части местности до другой, например, по большой ячейстой структуре с ячейками по 10 метров (условно). Это может быть граф или прямойгольная матрица - не имеет значения. Просто глобальное задание того, куда персонаж должен идти. Локальный вариант уточняет движение в пределах ячейки, чтобы обходить мелкие препятствия, не сталкиваться с другими персонажами и тому подобное, при этом он всё равно стремится идти в глобально заданном направлении. Т.е. он шёл, наткнулся на пенёк, сделал шаг в сторону и вернулся к "основному плану". При этом глобальный путь вычисляется или один раз или в случаи какого-то критического события (мост взрвали, дорогу перегородили т .п.), а локальный путь пересчитывается или каждый кадр или с каким-то тикрейтом. Напрмиер, если один шаг персонажа занимает 0,5 секунды, то пересчитывать путь чаще, чем 2 раза в секунду не имеет смысла. За эти 0,5 секунды может отрисоваться 120 кадров, при этом персонаж физически не может изменить траекторию движения.