Jump to content
Korean Random

BufferOverflow

User
  • Content Count

    95
  • Joined

  • Last visited

Posts posted by BufferOverflow


  1. @ktulho, привет. Вот такую ошибку выдаёт при попытке сохранить иконки. Проверил сохранение атласа - всё работает нормально. Windows 7 SP1 x64, NET v 4.5.2. Клиент 9.16 с последними обновлениями (танки для Black Friday). Версия 117.

    Thread: Main
    
    Exception: System.NullReferenceException
    Message: Ссылка на объект не указывает на экземпляр объекта.
      в TankIconMaker.Ut.ExpandIconPath(String path, WotContext context, Style style, String country, String class_, Boolean fragment) в UtMisc.cs:строка 391
      в TankIconMaker.MainWindow.saveIcons(String pathTemplate) в MainWindow.xaml.cs:строка 1192
      ...
      в TankIconMaker.App.Main(String[] args) в App.xaml.cs:строка 109
    
    

     

    А на 8.1 всё ок.

     

    Внизу окна есть кнопочка "...". Нажми на неё, увидишь окно с тремя параметрами. Для первого опять нажимаешь "..." и в появившемся окне вводишь "{IconsPath}" (без кавычек). Если поможет - сообщи, сделаю ПР разработчику


  2. Почему не на C++? Там ведь можно спокойно включить direct3d библиотеку, чем идти окольными путями в C#.

     

    На C# это не так уж и проблематично. Есть механизм P/Invoke, с помощью которого можно описать реализуемые в библиотеке методы. Я даже не сказал бы, что это было сложнее, чем заголовки в том же C++.

     

    Но, с другой стороны, еслиб писалось всё чисто на C++, то можно было бы расходовать меньше оперативной памяти,тк в Плюсах большая быстрота исполнения кода и расход памяти контролирует разработчик из Autodesk'a.

     

    Насчёт оперативной памяти ты прав, C# в этом плане проигрывает C++, зато выигрывает в плане отсутствия утечек. А вот насчёт быстроты кода - не согласен. В C# очень многое сделано для оптимизации, и управляемый код уже не хуже неуправляемого, а в перспективе и эффективнее будет.

    • Upvote 2

  3. Вроде версия последняя,а вот:(

    Попробую из шапки поставить,хотя по билду то же самое.

    П.С: да нет,абсолютно идентичны файлы.Может кеш удалить,он по моему еще бог знает какой,не охота были стили терять.

    П.П.С:экспортировал стили,удалил старые файлы в апдате,все равно нет.Давно хотел фон убрать,он еле еле,но виден.

    Правой кнопкой клик по слою - Добавить эффект - Прозрачность. А то на скриншоте эффект не применён - как диагностировать?)

    Эти настройки в эффекте прозрачность, как у ktylho в скрине

     

    К слову, это не единственный способ удалить тень. Ещё можно эффектом Уровни, если натравить его на альфа-канал.


  4. Небольшой гайд по сложным эффектам. Большинство эффектов создателям иконок будут так или иначе знакомы по аналогам из фотошопа или будут просты в освоении (наложить, подёргать ползунки, полюбоваться эффектом). А если нет - то по крайней мере, интернет сможет вам в этом помочь. Но есть и те эффекты, в работе которых разобраться весьма непросто, или имеющие возможности, о которых пользователи даже не подозревают.

     

    '1. Эффект прозрачность. Пример того, как удалить тень с 3D иконки.'

    На первый взгляд ничего сложного, но при открытии параметров сразу возникает вопрос: а куда вводить проценты?

    Метод прозрачности - это первый параметр. Значение непрозрачности - это второй, числовой настраиваемый параметр слоя.

    В настройках эффекта имеется 4 режима:

    '1. Авто'

    Использует суммирующийся режим для уменьшения прозрачности и сдвиг крайней точки для увеличения. Тут всё просто.

    '2. Сдвиг крайней точки. Задать процентную непрозрачность можно им.'

    Если вас интересует вопрос, как просто сделать иконку, к примеру, полупрозрачной, то вам следует использовать сдвиг крайней точки. Крайняя точка - это 100% непрозрачность в случае, если непрозрачность уменьшается (в нижнее поле вводится отрицательное число) и 0% непрозрачность (в случае, если непрозрачность увеличивается) в поле значения вводится положительное число). В случае уменьшения этого числа для каждого пикселя непрозрачность уменьшается аналогично заданию % непрозрачности. Формулы перевода % непрозрачности в значение непрозрачности:

    a = - (100% / a%) + 1

    a% = 100% / (1 - a)

    a - значение непрозрачности. a% - процентное значение непрозрачности. Теперь пояснения:

    К примеру, у нас имеется обыкновенная картинка и мы хотим сделать её полупрозрачной (a% = 50%). Тогда, нам нужно ввести a = - ( 100% / 50% ) + 1. 100%/50% = 2 -> -2+1 = -1. Итого, для полупрозрачности нужно вводит -1. Соотношение числового и процентного значения непрозрачности:

    -0.25 = 80%

    -0.33 = 75%

    -0.5 = 67%

    -1 = 50%

    -2 = 33%

    -3 = 25%

    -4 = 20%.

    -9 = 10%

    Если ввести числовое значение больше 0, то будет аналогичный эффект, только увеличиваться будет нижняя граница. Если мы зададим число 1, то пиксели с непрозрачностью 0% станут 50% (100% / (a + 1) = 100% / 2 = 50%), 50% станут 75%. Если зададим число 3, то 0% станет 75%, 50% станет 82.5%.

    '3. Сдвиг средней точки. Полезен при удалении тени.'

    По внешнему виду похоже на эффект гамма-коррекции для канала непрозрачности. Главный плюс в том, что действует он только на полупрозрачности. Возводит непрозрачности в степень 1-a в случае отрицательного числа и 1/(1+а)  в случае положительного. Все помнят из курса математики, что 100% = 1? Так вот, если применить непрозрачность -1, то 0% останется 0%, 100% останется 100%, а вот 50% станет 25%. Ибо 0^(1-1) = 0^2 = 0, 1^2 = 1, а вот 0.5^2 = 0.25. С увеличением аналогично: 0.5^(1/2) = 0.71.

    К примеру, им удобно устранять тени у 3D иконок:
    post-7275-0-23499400-1472145732_thumb.png

    '4. Суммирующийся.'

    Всё равно, что умножать текущее значение x на 1+a ( x = x*(1+a) )в случае увеличения и умножать ( x = 1 - (1 - x) * (1-a) ) в случае уменьшения. Т. е. при a = 1 пиксели с непрозрачностью 50% станут (50% * (1+1)) 100% непрозрачными. 25% станет 50%, а вот 75% станет 100% непрозрачным, ибо выше 100% нельзя. С отрицательными числами ситуация обратная: 75% станет 50%, 50% станет 0%, 25% станет 0.

     

    '2. Эффект слой-маска.'

    В целом подобные ему эффекты можно найти в интернете, да и в примере 2 он использовался, так что просто дополню неясные моменты.
    Эффект позволяет задать прозрачность на основе другого слоя. Как именно задаётся прозрачность - ниже.
    Это один из двух эффектов, использующих ссылки на другие слои. Второй - размер/положение. Для использования нужно заполнить у целевого слоя поле Индентификатор. Допустимы латинские символы, цифры и символ подчёркивания. Идентификатор не должен начинаться с цифры. Затем идентификатор слоя должен быть скопирован в поле "Id слоя-маски" в параметрах эффекта.

    Обратите внимание на несколько особенностей:
    * Слой, используемый в качестве маски, может находиться и выше и ниже по порядку. Но в случае зацикливания (слой 2 сылается на слой 1, слой 1 ссылается на слой 2) TIM выдаст ошибку отрисовки.
    * Слою, используемому в качестве маски, не обязательно быть видимым. Главное - чтобы параметр Идентификатор был заполнен.
    * Несколько слоёв могут иметь одинаковый идентификатор. Это сделано, чтобы не мешать пользователю использовать функцию Копировать/вставить. Но не ждите, что ссылка на слой с таким идентификатором будет работать корректно.

    Непрозрачность при использовании слоя-маски может только уменьшаться. Это значит, что слой-маски никогда не проявит невидимые области, но может сделать видимые невидимыми. В классическом понимании слоя-маски маска должна быть чёрно-белой. Так как слои TIM мало того, что цветные, так ещё и имеют собственную прозрачность, реализовано 3 режим работы:
    1) Прозрачность. Накладывает прозрачность слоя маски на прозрачность текущего слоя.
    2) Оттенки серого. Классический режим - слой-маска обесцвечивается, затем используетсяд ля просчёта прозрачности. Белый цвет значит 100% непрозрачность, чёрный - 0%, серые оттенки означают полупрозрачности. Обратите внимание, что нежелательно использовать его для слоёв, имеющих прозрачность во избежание неожиданностей.
    3) Комбинированный. По-умолчанию. Смешивание двух предыдущих - накладывает прозрачность и на основе оттенков серого, и на основе прозрачности.

     

    '3. Эффект Размер/положение. Выравнивание одного слоя относительно другого.'

    С последними патчами и без того непростой эффект разросся в функционале и стал настоящим кладезем недокументированных возможностей. Это крайне гибкий инструмент для настройки размера/положения иконки.
    Фильтр. Вдаваться в подробности фильтров не буду - всё в интернете, родимом. Скажу лишь, что в случае выбора фильтра "Авто" для увеличения картинки будет использоваться Mitchell, а для уменьшения - Lanczos. Советую вам придерживаться этого фильтра.

    Параметры X, Y, Ширина, Высота.

    Все эти четыре параметра изначально задаются в пикселях. X, Y задают точку привязки, Ширина/Высота - без комментариев. Задавая разные значения, вы сможете сами разобраться в принципе работы (не забывайте так же параметр "Привязка"!), а если нет - вряд ли от моих объяснений станет понятнее. Расскажу лишь о возможностях, которые не описаны в документации за отсутствием таковой.
    Все эти параметры в качестве значения принимают ссылки на другие слои. Для использования нужно заполнить у слоя, на который используется ссылка, поле Индентификатор. Допустимы латинские символы, цифры и символ подчёркивания. Идентификатор не должен начинаться с цифры.
    К примеру, я задам у слоя 1 идентификатор "tank" и у слоя 2 использую эффект Размер/положение. После этого я в качестве параметра для X могу вписать не число пикселей, а "tank.left", а в параметр Y - "tank.top". И тогда у меня слой 2 всегда будет выровнен относительно слоя 1, и более того, при перемещении слоя 1 слой 2 тоже будет смещаться!

    'Доступные параметры (результат всегда в пикселях!):'

    "width" - ширина.
    "height" - высота.
    "top" - координата самого верхнего пикселя по вертикали.
    "left" - координата самого левого пикселя по горизонтали.
    "right" - координата самого правого пикселя по горизонтали.
    "bottom" - координата самого нижнего пикселя по вертикали.
    "centerhorz" - координата среднего пикселя по горизонтали.
    "centervert" - координата среднего пикселя по вертикали.

    К примеру, я могу сделать так:
    post-7275-0-77616400-1472145891_thumb.png
    Как видите, размер флага на фоне всегда соответствует размеру контура танка. Заметьте, что эти параметры слоя регистронезависимы, т. е. я мог бы написать "tank.left", "tank.Left", "tank.LEFT" и всё бы сработало. Но вот если бы я написал "Tank.left" - то уже не сработало бы, ибо имя слоя регистро-зависимо. Возможно, в будущих версиях это изменится.

    Обратите внимание, что начиная с версии 050 доступен также идентификатор this, который всегда обозначает текущий слой.

    Пара слов о том, как конкретно определяются эти параметры. Если картинка, представляемая слоем, абсолютно квардатна (как флаг на картинке) - определить его ширину несложно, но как определить ширину контурной иконки, если из-за тени её края размыты и границы нечёткие? TIM чётко отделяет, какие пиксели считать прозрачными, а какие нет, по параметру эффекта "Порог прозрачности". Допустимые значения 0-255. 255 аналогично 100% непрозрачности. Все пиксели, которые хот чуть прозрачнее этого порога - считаются прозрачными, менее - непрозрачными.

    Но это - лишь вершина айсберга. В качестве значения для этих параметров принимаются _формулы_, поддерживающие константы (читай - числа), математические операции +-*/^% (плюс-минус-умножить-поделить-степень-деление по модулю), скобки, функции и переменные (tank.left - это переменная).

    К примеру, я хочу задать флаг на фоне так, чтобы он был на два пикселя с каждой стороны уже и короче. Элементарно!

    post-7275-0-39441900-1472145904_thumb.png

    Можно задать формулу сложнее. К примеру, X = "(tank.left/2)^0.5". Или ширина = "max(tank.width, tank.height)".

    'Полный список доступных функций:'

    sqrt(x)
    abs(x)
    sign(x)
    ceil(x)
    floor(x)
    round(x)
    trunc(x)
    sin(x)
    cos(x)
    tan(x)
    sinh(x)
    cosh(x)
    tanh(x)
    acos(x)
    asin(x)
    atan(x)
    atan2(x, y)
    deg(x)
    exp(x)
    log10(x)
    log2(x)
    ln(x)
    log(x)
    log(x, y)
    min(x, y, ...)
    max(x, y, ...)

    • Upvote 6

  5. , не понял.

     

     

    , это есть

     

    Посмотрите, что подправить. Название техники подогнал под ваши только для китайцев, французов,  чехов и немцев. Остальных сами поправите, если вас устроят иконки. Посмотрите, что не так.

    attachicon.gifDJON_999.rar

     

    Атлас: attachicon.gifatlas.rar

    P.S. Выделить ботов в этом стиле не смог, но можно создать отдельный стиль для них.

     

    Можно выделить отдельно. Все боты имеют первый уровень и статус "акционный". При этом других акционных танков первого уровня в игре нет. Так же можно выделить, создав WotBuiltin-2.csv.

     

     

    Скорее всего не хватает чтоб он не резал иконки сверху и снизу и добавлять четкость.

     

    Иконки обрезает эффект "Обрезка краёв". Если добавить слой 3D-иконки, и тут же применить на него эффект Размер/Положение и уменьшить до высоты 24 пикселя - иконка выйдет целиком.

    Чёткость уже давно можно настраивать. Несколько фильтров на подбор. К слову, я эту возможность в TIM и добавил.

    • Upvote 1

  6. Ну так они ж уже сделаны!? Просто добавляю новые каждый патч. Если надо что то глобально поменять во всех иконках-существуют "автоматизация-пакетная обработка" в фотошопе. Создал задачу и фотошоп сам меняет во всех файлах.

    Мне аж интересно сравнить. Буду ждать с нетерпением.

     

    С помощью TIM можно импортировать уже существующий стиль и создать для него атлас. И он при этом такие ошибки выдавать не должен. Просто так, для справки )

     

    Кстати, а каких фич в TIM сейчас не хватает? Наверное, связанные с "барабашками"? Выделить иконку отдельным цветом только для барабашек, и выделить только часть ника танка отдельным цветом. С помощью TIM можно добиться, но придётся дико исхитряться .


  7. вот насчёт эффекта выравнивания и слоя-маски хотелось бы подробностей! Потому как делать гайд "по рисованию" для тех кто не отличит gimp2 от ps имхо лишняя трата времени: кому интересно, в "азах" и так разберутся, благо теоретическая основа одинакова. Нужны "секреты мастерства", а кому не интересно скачают готовое...

     

    В том стиле, на который я сослался, как раз эти два эффекта и используются. Флаг в размерах использует формулу ширина = ширине контура танка, высота = высоте контура танка. И накладывается маска по контуру танка.

    Если надо будет, распишу принцип работы обоих фич в подробностях для инструкции, но чуть позже.

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

     

    А вот насчёт азов ты зря. Некоторые вообще не понимают, как создать простейший стиль. Хотя это, как я тоже считаю, от нежелания разобраться


  8. , здесь, ИМХО, он лишний, контуры и так покрашены в яркие цвета согласно классу техники. 

    Кстати, я делал пример танков с иконками. Там и стиль приложен

    http://forum.worldoftanks.ru/index.php?/topic/274782-tank-icon-maker-v049-%d0%b4%d0%bb%d1%8f-913-14-%d0%b4%d0%b5%d0%ba%d0%b0%d0%b1%d1%80%d1%8f-2015/page__st__1580__pid__40775843#entry40775843


  9. Вот такие нашел:

    attachicon.gifpost-18805140-0-42431300-1411678572_thumb.png

    Вроде никто не поддерживает, по крайней мере на оф.сайте.

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

    Кстати, иконки необязательно должны быть теми, что в ушах. Ведь с TIM можно сделать и иконки для дерева исследований, и для ангара


  10. @ktulho, например, эти. Их поддерживают, но у автора ещё нескоро появится возможность их обновить.

     

    Это black_spy, они на каждом углу.

    На одном офсайте две темы по их поддержке, и одна из них, к слову, моя )

     

    Наверное, проще будет создать новый стиль, по-максимуму заюзав различные не самые понятные слои и эффекты.Вот прозрачность одна чего стоит. Необязательно делать этот стиль популярным, да что там - лучше! Поддерживать не надо будет.


  11. @Mr 13, даже не представляю что в шапке такой темы написать. Может знает? Или сделать клон с оф. сайта? @BufferOverflow, я так понимаю, не часто заходит на данный форум.

     

    Не очень часто, ага.

    По содержимому - действительно продублировать с оффорума. Что там ещё написать? Разве что инструкцию, вот её реально не хватает xD


  12. что-то я не представляю, как это должно выглядеть.

    Смотри, у нас есть парочка наборов иконок.

    Для одной путь "стиль1\gui\maps\icons\vehicle\contour". Для этой нужно так же создавать, допустим, battleAtlas и vehicleAtlas.

    Первый должен лежать по адресу "стиль1\gui\flash\atlasses\battleAtlas.png", второй "стиль1\gui\flash\atlasses\vehicleAtlas.png". Или можно просто оба пихать "стиль1\gui\flash\atlasses".

    Второй стиль имеет путь "стиль2\mods\xvm\icons". Для него, к примеру, уже атласы не нужны. Их вообще быть не должно. Или наоборот, только атласы и нужны.

    И всё это должно быть настраиваемо в стиле. Т. е. галочкой "сохранять обычные иконки", путь сохранения, "сохранять vehicleAtlas" опять же путь к нему и т. д.

    Или можешь оставить и так отправлять пулреквест, я потом посмотрю, как это лучше обыграть.

    • Upvote 3

  13. Функцию "Массовое сохранение" разработал я и идеи в её основе лежали тоже мои. Куча стилей сохраняется не "в папку с игрой", а по тому адресу, который указывается в кнопке "..." рядом с "сохранить как". Для каждого стиля единожды указываешь адрес, и в будущем TIM сохраняет все стили в уже нужные тебе папочки, прямо рядом с "readme.txt" - два в папки stereo, по одному в папку mono. И не надо ничего никуда запихивать каждый раз - оно само уже где надо. "Массовое сохранение в папку" было создано позже уже Романом для тех, кому лень/не нужно разбираться с массовым сохранением.

    По интеграции с массовым сохранением я уже говорил - его концепция это "Единожды настроил, и в будущем TIM всё делает сам".

     

     

    По поводу поддержки массового сохранения надо подумать, потому что в идеале - нужно нажать массовое сохранение, выбрать в менюшке нужные стили, нажать ОК и всё должно сделаться само. Если для каждого стиля создавать отдельно ещё и атлас - будет нарушение самой концепции "разок настроил, и при каждом обновлении клац-клац и готово" ) Сейчас у каждого стиля прописывается путь сохранения для массового сохранения. При этом не всем стилям нужны атласы (стереостили для XVM). Не все сохранять стили в папках, содержащих в пути стиля адрес gui/maps/icons/ и т.д.. Я бы, наверное, сделал так - добавил галочку в настройки стиля "Генерировать атласы" и добавил поле "путь сохранения атласа". При этом в идеале путь алтаса должен ещё и автоматически просчитываться на основе "Пути стиля" для стандартных путей, а автор стиля если захочет - впишет что-то другое.
    • Upvote 1

  14. вообще я надеялся, что-то кто-нибудь другой это сделает.

    Кто кодит, тот и делает реквест. Да и всего-то делов, что нажать кнопочку в меню битбакета.

     

     

    я так понимаю, что для 0.9.15.1 правильнее сказать: Если для каждого стиля создавать отдельно ещё и иконки...

    Надеюсь, нет. Для того же XVM, да и сам клиент до сих пор их использует.

     

    @BufferOverflow, Delphi юзает виндовое средство для работы с XML...

    сахар...

    Тогда непонятно, отчего так долго. Небольшая же xmlка.

    Сахар, да.


  15. Дело в том, что в Delphi тоже есть инструмент для работы с XML. Но сохранение с его помощью него происходит на два порядка медленнее. 

     

     

    А где брать флаги? Встроенные стили тоже надо редактировать? В остальном вроде везде поправил.

    Я так понимаю, их рисовали. Один парень иконки в прошлом в теме TIM на форуме танков, помнится нарисовал иконку для чехов. Флаги, что есть в игре, не подходят

     

    Неужели сохранить небольшую xml-ку - так долго в делфи? В C# я никогда не переживал по этому поводу.


  16. В неравной борьбе я все таки победил TreeSource и BitBucket. Надо делать пул или достаточно моего репозитория? 

    С вложенными репозитариями всегда проблема )

    Во-первых, посмотри ревизию 494 (1915da24b019) Added Czech tank support. Там Роман добавлял чехов, как видишь надо править КУДА больше файлов ). И то он ещё потом в 532-м дополнил.

    Во-вторых, создавать xml как текстовый файл - моветон. В C# есть замечательный встроенный механизм по работе с XML. Даже два, в TIM используется XDocument, там же можно найти несколько примеров.

    В-третих, лучше делай коммиты почаще. К примеру, шведов - отдельно, далее атлас - отдельно. Сейчас можно откатить изменения и разбить на несколько шагов, если планируешь делать пулреквест. Потому что Роман может ругаться, что всё в куче )

    "var fileGuiPKG = context.Installation.Path + "\\res\\packages\\guy.pkg";"

    1) gui.pkg

    2) Для путей всегда используй Path

    var fileGuiPKG = Path.Combine(context.Installation.Path, @"res\packages\gui.pkg");

    Path.Combine сам проверяет правильность соединения через слэш, так что за результат можно не переживать на любой системе. Ну и собачья строка, в ней не действуют никакие спецсимволы кроме двойных кавычек "", означающих одну ".

    В целом код особо привередливо не смотрел. Это за что глаз зацепился.

    По поводу поддержки массового сохранения надо подумать, потому что в идеале - нужно нажать массовое сохранение, выбрать в менюшке нужные стили, нажать ОК и всё должно сделаться само. Если для каждого стиля создавать отдельно ещё и атлас - будет нарушение самой концепции "разок настроил, и при каждом обновлении клац-клац и готово" )

    Сейчас у каждого стиля прописывается путь сохранения для массового сохранения. При этом не всем стилям нужны атласы (стереостили для XVM). Не все сохранять стили в папках, содержащих в пути стиля адрес gui/maps/icons/ и т.д.. Я бы, наверное, сделал так - добавил галочку в настройки стиля "Генерировать атласы" и добавил поле "путь сохранения атласа". При этом в идеале путь алтаса должен ещё и автоматически просчитываться на основе "Пути стиля" для стандартных путей, а автор стиля если захочет - впишет что-то другое.

×
×
  • Create New...