

Some переводs
Автор
оникс_админ0
, 19 May 2016 20:01
Сообщений в теме: 49
#41
Отправлено 27 May 2016 - 00:17
Дервен так регулярно и дохуя делает, что у меня начинается Стокгольмский синдром
#42
Отправлено 28 May 2016 - 16:51
Завези еще защитку от редактирования файла сохранения. Just for fun.
Цитата
Ролевой отыгрыш РП. Стремная хуйня, извращенная самими ярыми почитателями и профессианальными™ ролевиками. Прекрасное и ненавязчивое явление превратили с стремное и ужасное нечто, которое стало способно пугать своими стонами любое нормальное божие создание. Способ излечиться очень прост -- всеочищающий загрифон, который мигом заставит рассосаться всю псевдо-ралиплейную гниль.
dm-startup.sh - для удобного запуска билдосиков
#44
Отправлено 28 May 2016 - 19:58
6 часть.
Далее, мы начнем создавать некоторых базовых врагов для нашей игры.
Если вы еще не прочли %ссылка на пятый урок%, вы должны сперва сделать это. Или %ссылка на первую часть% если вы совсем новичок.
Анимированные иконки!
Сделаем пару иконок для базовых врагов, которые будут убивать нашего улыбающегося героя.
Шаг 1.1 Сперва сделаем новый файл с иконками для наших врагов.
File > New > Icon File Type > Name: EnemyRed.dmi
Шаг 1.2 Сейчас мы перейдем к созданию анимированного icon_state для врагов. Хоть это и будет только смена направлений при движении.
Кликните на иконку камеры наверху файла с иконками.

Шаг 1.3 Сейчас используйте настройки внизу слева чтобы сбросить счетчик кадров до 1.

Шаг 1.4 Два раза кликните на любой из кадров чтобы изменить его. Вставьте злой смайл в каждый, разверните в направлении стрелки слева. Но не делайте смайл большим!
Вы можете использовать инструменты внизу чтобы быстро развернуть icon_state.

Шаг 1.5 Сейчас мы создадим анимацию атаки. Используйте стрелку назад справа, чтобы выйти из редактирования нашего icon_state. Потом кликните на камеру вновь.
Шаг 1.6 Самое время, чтобы установить счетчик кадров на 2. Потом просто вставьте кадры которые вы создали в icon_state

Шаг 1.7 В вторых кадрах передвиньте злой смайлик к краю по его направлению. Это сделает его вид таким, будто бы он кинулся вперед, чтобы напасть на вас. Это также объясняет, почему мы не делали его большим - очевидно, нам нужно пространство для движения! Вы должны увидеть его анимацию слева от редактора кадров.
Шаг 1.8 Нажимайте кнопку назад, пока не вернетесь назад к файлу с иконкой. Сделайте правый клик на нашем новом icon_state и назовите его Attack. Мы также проходили это в %ссылка на первую часть%, когда создавли нашу траву и прочие турфы.
Вы можете выполнить эти же шаги, чтобы создать анимацию атаки для смайла главного героя, если хотите.
Переиспользуем спрайты!
Создадим копию нашего красного врага и по-быстрому перекрасим.
Шаг 2.1 Создайте новый файл с иконкой и назовите его EnemyGreen.dmi
Шаг 2.2 Перейдите назад к оригинальному EnemyRed.dmi файлу с иконками, и выберите оба icon_state'а. Затем копируйте их с помощью ctrl+c

Шаг 2.3 Сейчас перейдите в EnemyGreen.dmi, и нажмите ctrl+v, чтобы вставить выбранные icon_state'ы сюда.
EnemyRed.dmi и EnemyGreen.dmi должны выглядеть сейчас идентично.
Шаг 2.4 Выберите Colors > Edit... из меню файлов.

Шаг 2.5 Сделайте двойной клик на красную часть и выберите новый цвет. Я сделал свой светло-зеленым. Нажмите ОК чтобы закончить.

Эти простые действия заменили все красные иконки на зеленые, и сейчас мы получили "новых" врагов!
Далее, мы начнем создавать некоторых базовых врагов для нашей игры.
Если вы еще не прочли %ссылка на пятый урок%, вы должны сперва сделать это. Или %ссылка на первую часть% если вы совсем новичок.
Анимированные иконки!
Сделаем пару иконок для базовых врагов, которые будут убивать нашего улыбающегося героя.
Шаг 1.1 Сперва сделаем новый файл с иконками для наших врагов.
File > New > Icon File Type > Name: EnemyRed.dmi
Шаг 1.2 Сейчас мы перейдем к созданию анимированного icon_state для врагов. Хоть это и будет только смена направлений при движении.
Кликните на иконку камеры наверху файла с иконками.

Шаг 1.3 Сейчас используйте настройки внизу слева чтобы сбросить счетчик кадров до 1.

Шаг 1.4 Два раза кликните на любой из кадров чтобы изменить его. Вставьте злой смайл в каждый, разверните в направлении стрелки слева. Но не делайте смайл большим!
Вы можете использовать инструменты внизу чтобы быстро развернуть icon_state.

Шаг 1.5 Сейчас мы создадим анимацию атаки. Используйте стрелку назад справа, чтобы выйти из редактирования нашего icon_state. Потом кликните на камеру вновь.
Шаг 1.6 Самое время, чтобы установить счетчик кадров на 2. Потом просто вставьте кадры которые вы создали в icon_state

Шаг 1.7 В вторых кадрах передвиньте злой смайлик к краю по его направлению. Это сделает его вид таким, будто бы он кинулся вперед, чтобы напасть на вас. Это также объясняет, почему мы не делали его большим - очевидно, нам нужно пространство для движения! Вы должны увидеть его анимацию слева от редактора кадров.
Шаг 1.8 Нажимайте кнопку назад, пока не вернетесь назад к файлу с иконкой. Сделайте правый клик на нашем новом icon_state и назовите его Attack. Мы также проходили это в %ссылка на первую часть%, когда создавли нашу траву и прочие турфы.
Вы можете выполнить эти же шаги, чтобы создать анимацию атаки для смайла главного героя, если хотите.
Переиспользуем спрайты!
Создадим копию нашего красного врага и по-быстрому перекрасим.
Шаг 2.1 Создайте новый файл с иконкой и назовите его EnemyGreen.dmi
Шаг 2.2 Перейдите назад к оригинальному EnemyRed.dmi файлу с иконками, и выберите оба icon_state'а. Затем копируйте их с помощью ctrl+c

Шаг 2.3 Сейчас перейдите в EnemyGreen.dmi, и нажмите ctrl+v, чтобы вставить выбранные icon_state'ы сюда.
EnemyRed.dmi и EnemyGreen.dmi должны выглядеть сейчас идентично.
Шаг 2.4 Выберите Colors > Edit... из меню файлов.

Шаг 2.5 Сделайте двойной клик на красную часть и выберите новый цвет. Я сделал свой светло-зеленым. Нажмите ОК чтобы закончить.

Эти простые действия заменили все красные иконки на зеленые, и сейчас мы получили "новых" врагов!
#45
Отправлено 28 May 2016 - 20:13
Часть 6. "А Сейчас мы сделаем говноспрайты наших врагов!"
Часть 7 "А сейчас мы сделаем говноспрайты последнего босса"
.....
Часть 800 "А сейчас мы сделаем говноспрайты воды"
Ну вот, игра почти готова, осталось совсем немного: написать код.
Часть 7 "А сейчас мы сделаем говноспрайты последнего босса"
.....
Часть 800 "А сейчас мы сделаем говноспрайты воды"
Ну вот, игра почти готова, осталось совсем немного: написать код.
#48
Отправлено 28 May 2016 - 21:21
Эпизод семь
The Force Awakens
Поехали дальше, мы будем создавать базовых врагов для нашей игры, и verb атаки, который смогут использовать и игрок и враги.
Если вы не читали %ссылка на шестой урок%, то советуем вам это сделать. Если же вы совсем новичок, то %ссылка на первую часть%
Атака!
Чтобы начать, мы создадим общий Attack verb, который может быть использован и NPC и игроками.
Шаг 1.1 Следующий код может быть вставлен в конец файла Verbs.dm (под verb'ом Who)
http://pastebin.com/HsJqkULb

flick() - встроенная процедура, которая проигрывает анимацию объекта от начала до конца.
Поскольку мы не сделали анимацию атаки для нашего игрока мы просто исчезнем.
get_step() - другая встроенная процедура, она возвращает тайл, который находится на растоянии одного шага в желаемом направлении от указанного объекта.
В нашем случае, мы используем get_step чтобы найти тайл спереди атакующего.
Мы используем цикл for() чтобы пройтись по каждому мобу спереди атакующего, и обозначить его M.
Далее мы считаем, как много урона мы нанесли. Здесь мы используем базовую формула Сила - Защита.
Мы используем max() десь, для того чтобы наш урон не был отрицательным.
Потом мы выводим простое сообщение каждому мобу поблизости о атаке и уроне.
Следующая строка нужна для вызова новой процедуры(TakeDamage), которую мы создадим в следующей части.
Шаг 1.2 Сейчас, когда мы можем атаковать, начнем обрабатывать урон. Следующий код может быть вставлен в конец файла Procs.dm (под процедурой LevelCheck())
http://pastebin.com/ida43zXg

TakeDamage() процедура требует(берет) два аргумента. Один для урона который будет получен, и другой - переменная с типом моба, для того кто это делает.
Потом производится вычитание: хитпоинты цели минус урон.
В итоге запускается процедура DeathCheck, которую мы создадим ниже.
Шаг 1.3 Сейчас нам нужно проверить, не умерли ли мы? Следующий код также может быть вставлен в конец файла Procs.dm
http://pastebin.com/M9RFhLUp
Эта процедура принимает(требует, берет) аргументы также, но точнее только один, который обозначает убийцу.
TakeDamage() процедураиспользуется атакующим.
Во-первых, мы проверяем не умерли ли действительно вы, это проийзодет если ваши хитпоинты(HP) меньше или равно нулю.
Потом мы делаем быструю проверку, игрок ли это(обладающий клиентом) или просто NPC, поскольку мы хотим обрабатывать их смерти по-разному.
Если игрок умер, то мы сделаем, чтобы весь сервер это знал.
Далее мы сбросим их HP на max.
В конце-концов кинем их в относительно безопасное место.
Если убит NPC, мы даем тому, кто убил немного Exp(опыта).
Мы используем переменную Exp во врагах, чтобы показать как много с них набьем опыта.
Потом мы запускаем процедуру LevelCheck() на убийце, чтобы увидеть, достаточно ли ему опыта, чтобы поднять уровень.
Далее мы удаляем NPCиз бытия(лол) из игрового мира.
The Force Awakens
Поехали дальше, мы будем создавать базовых врагов для нашей игры, и verb атаки, который смогут использовать и игрок и враги.
Если вы не читали %ссылка на шестой урок%, то советуем вам это сделать. Если же вы совсем новичок, то %ссылка на первую часть%
Атака!
Чтобы начать, мы создадим общий Attack verb, который может быть использован и NPC и игроками.
Шаг 1.1 Следующий код может быть вставлен в конец файла Verbs.dm (под verb'ом Who)
http://pastebin.com/HsJqkULb

flick() - встроенная процедура, которая проигрывает анимацию объекта от начала до конца.
Поскольку мы не сделали анимацию атаки для нашего игрока мы просто исчезнем.
get_step() - другая встроенная процедура, она возвращает тайл, который находится на растоянии одного шага в желаемом направлении от указанного объекта.
В нашем случае, мы используем get_step чтобы найти тайл спереди атакующего.
Мы используем цикл for() чтобы пройтись по каждому мобу спереди атакующего, и обозначить его M.
Далее мы считаем, как много урона мы нанесли. Здесь мы используем базовую формула Сила - Защита.
Мы используем max() десь, для того чтобы наш урон не был отрицательным.
Потом мы выводим простое сообщение каждому мобу поблизости о атаке и уроне.
Следующая строка нужна для вызова новой процедуры(TakeDamage), которую мы создадим в следующей части.
Шаг 1.2 Сейчас, когда мы можем атаковать, начнем обрабатывать урон. Следующий код может быть вставлен в конец файла Procs.dm (под процедурой LevelCheck())
http://pastebin.com/ida43zXg

TakeDamage() процедура требует(берет) два аргумента. Один для урона который будет получен, и другой - переменная с типом моба, для того кто это делает.
Потом производится вычитание: хитпоинты цели минус урон.
В итоге запускается процедура DeathCheck, которую мы создадим ниже.
Шаг 1.3 Сейчас нам нужно проверить, не умерли ли мы? Следующий код также может быть вставлен в конец файла Procs.dm
http://pastebin.com/M9RFhLUp
Эта процедура принимает(требует, берет) аргументы также, но точнее только один, который обозначает убийцу.
TakeDamage() процедураиспользуется атакующим.
Во-первых, мы проверяем не умерли ли действительно вы, это проийзодет если ваши хитпоинты(HP) меньше или равно нулю.
Потом мы делаем быструю проверку, игрок ли это(обладающий клиентом) или просто NPC, поскольку мы хотим обрабатывать их смерти по-разному.
Если игрок умер, то мы сделаем, чтобы весь сервер это знал.
Далее мы сбросим их HP на max.
В конце-концов кинем их в относительно безопасное место.
Если убит NPC, мы даем тому, кто убил немного Exp(опыта).
Мы используем переменную Exp во врагах, чтобы показать как много с них набьем опыта.
Потом мы запускаем процедуру LevelCheck() на убийце, чтобы увидеть, достаточно ли ему опыта, чтобы поднять уровень.
Далее мы удаляем NPC
#49
Отправлено 29 May 2016 - 14:20
8 часть.
Едем дальше, мы создадим некоторых базовых врагов для нашей игры, и ИИ который будет управлять ими, чтобы убить нас. Если вы не читали %ссылка на седьмой урок% то советуем вам это сделать. Или %ссылка на первый урок%, если вы совсем новичок.
Создаем врагов!
Сейчас мы действительно сделаем врагов! Наконец-то...
Шаг 4.1 Создаем новый код-файл под названием Enemies.dm
Шаг 4.2 Создадим /Enemies тип и немного вражеских мобов используя следующий код:
http://pastebin.com/2bL0EZkQ

Тут мы создали два врага типа /mob/Enemies, Red Guy и Green Guy, нижние подчеркивания будут преобразованы в пробелы внутри игры(в названии, по всей видимости).
Мы установим иконки для этих двух типов, далее настраиваем их базовые характеристики.
Это те же переменные характеристик, что мы создавали для нашего игрока раньше в %ссылка на третью и четвертую часть%.
Как мы говорили ранее, мы используем переменную Exp здесь лишь для того, чтобы показать как много мы его(опыта) получим, убивая их(врагов).
Шаг 4.3 Сейчас, сделаем кое-что для врагов и их ИИ.
http://pastebin.com/4x5PMG2Z
New() - процедура которая автоматически вызывается всякий раз, когда что-то создается.
Если объект расположен на карте, это сработает при запуске игры. В противном случае, это случится когда мы создадим объект через код, или загрузим объект из файла.
Вы можете заметить, что мы не выставили HP ля наших врагов, только MaxHP. Вместо того, чтобы писать две строки с одними и теми же значениями для бесчисленных врагов, мы просто установим это значение через процедуру New() для каждого их них.
spawn() - другая встроенная процедура. Она позволяет вам обработать сразу несколько вещей(процедур, и прочего) без ожидания их окончания.
Ставя -1 в качестве аргумента мы заставляем выполнять код в нужном порядке. Это поможет предотвратить рантаймы и проблемы синхронизации.
spawning() нашего ИИ предотвратит остановку всего остального, когда новый врга будет создан, потому как их ИИ будет работать пока они существуют.
Последнее здесь, мы возвращаем ..(), ..() обозначает родительскую процедуру, мы вызываем это, чтобы выполянть какие-либо стандартные действия, такие как установка метсоположения.
Шаг 4.4 Мы почти закончили! Нам просто нужно написать некоторый простой боевой ИИ. Этот код также должен быть в Enemies.dm
http://pastebin.com/SYkgdpUk
Первая строка создает процедуру, эта процедура предназначена только для /mob/Enemies, и называется CombatAI(). Это значит, что Игроки или другие не вражеские NPC не могут этим пользоваться.
while(src) заставляет все, что ниже по табуляции повторяться до тех пор пока src существует.
Первое, что мы делаем в этом цикле, это идем с помощью цикла по каждому мобу типа /Player в oview()(радиусе видимости) врага.
Если мы находим любого /Player, то мы выполянем некоторые действия:
Мы проверяем расстояние до цели используя встроенную процедуру get_dist().
Если цель в одном тайле, то идем далее:
Враг повернется к цели с помощью get_dir()
Ну а Attack verb() мы создали на прошлом уроке.
Если они не оказались рядом игроком: Враг идет к целям используя встроенную процедуру step_to().
step_to() использует встроенный механизм нахождения пути, таким образом враг создает путь преодолевая стены и прочее.
После того как сделали два этих действия, мы используем break, чтобы выйти из цикла for(). Это предотвратит наших врагов от того, чтобы пытаться охотиться сразу на нескольких игроков.
Далее, в самом конце, мы вызываем sleep() используя случайное число от 4 до 8 (тиков).
Заметьте, что sleep() находится под while() по табуляции. Если мы не сделали бы задержку в конце цикла while(), то это просто выполнялось нонстопом(без остановки) и вызывало серьезные лаги/падение игры.
Таким образом вы должны получить базовую систему боя, и вашего игра стала по-настоящему игрой. Враги могут бы помещены на карту тем же путем что и турфы, который мы расставляли в первом уроке.
Едем дальше, мы создадим некоторых базовых врагов для нашей игры, и ИИ который будет управлять ими, чтобы убить нас. Если вы не читали %ссылка на седьмой урок% то советуем вам это сделать. Или %ссылка на первый урок%, если вы совсем новичок.
Создаем врагов!
Сейчас мы действительно сделаем врагов! Наконец-то...
Шаг 4.1 Создаем новый код-файл под названием Enemies.dm
Шаг 4.2 Создадим /Enemies тип и немного вражеских мобов используя следующий код:
http://pastebin.com/2bL0EZkQ

Тут мы создали два врага типа /mob/Enemies, Red Guy и Green Guy, нижние подчеркивания будут преобразованы в пробелы внутри игры(в названии, по всей видимости).
Мы установим иконки для этих двух типов, далее настраиваем их базовые характеристики.
Это те же переменные характеристик, что мы создавали для нашего игрока раньше в %ссылка на третью и четвертую часть%.
Как мы говорили ранее, мы используем переменную Exp здесь лишь для того, чтобы показать как много мы его(опыта) получим, убивая их(врагов).
Шаг 4.3 Сейчас, сделаем кое-что для врагов и их ИИ.
http://pastebin.com/4x5PMG2Z
New() - процедура которая автоматически вызывается всякий раз, когда что-то создается.
Если объект расположен на карте, это сработает при запуске игры. В противном случае, это случится когда мы создадим объект через код, или загрузим объект из файла.
Вы можете заметить, что мы не выставили HP ля наших врагов, только MaxHP. Вместо того, чтобы писать две строки с одними и теми же значениями для бесчисленных врагов, мы просто установим это значение через процедуру New() для каждого их них.
spawn() - другая встроенная процедура. Она позволяет вам обработать сразу несколько вещей(процедур, и прочего) без ожидания их окончания.
Ставя -1 в качестве аргумента мы заставляем выполнять код в нужном порядке. Это поможет предотвратить рантаймы и проблемы синхронизации.
spawning() нашего ИИ предотвратит остановку всего остального, когда новый врга будет создан, потому как их ИИ будет работать пока они существуют.
Последнее здесь, мы возвращаем ..(), ..() обозначает родительскую процедуру, мы вызываем это, чтобы выполянть какие-либо стандартные действия, такие как установка метсоположения.
Шаг 4.4 Мы почти закончили! Нам просто нужно написать некоторый простой боевой ИИ. Этот код также должен быть в Enemies.dm
http://pastebin.com/SYkgdpUk
Первая строка создает процедуру, эта процедура предназначена только для /mob/Enemies, и называется CombatAI(). Это значит, что Игроки или другие не вражеские NPC не могут этим пользоваться.
while(src) заставляет все, что ниже по табуляции повторяться до тех пор пока src существует.
Первое, что мы делаем в этом цикле, это идем с помощью цикла по каждому мобу типа /Player в oview()(радиусе видимости) врага.
Если мы находим любого /Player, то мы выполянем некоторые действия:
Мы проверяем расстояние до цели используя встроенную процедуру get_dist().
Если цель в одном тайле, то идем далее:
Враг повернется к цели с помощью get_dir()
Ну а Attack verb() мы создали на прошлом уроке.
Если они не оказались рядом игроком: Враг идет к целям используя встроенную процедуру step_to().
step_to() использует встроенный механизм нахождения пути, таким образом враг создает путь преодолевая стены и прочее.
После того как сделали два этих действия, мы используем break, чтобы выйти из цикла for(). Это предотвратит наших врагов от того, чтобы пытаться охотиться сразу на нескольких игроков.
Далее, в самом конце, мы вызываем sleep() используя случайное число от 4 до 8 (тиков).
Заметьте, что sleep() находится под while() по табуляции. Если мы не сделали бы задержку в конце цикла while(), то это просто выполнялось нонстопом(без остановки) и вызывало серьезные лаги/падение игры.
Таким образом вы должны получить базовую систему боя, и вашего игра стала по-настоящему игрой. Враги могут бы помещены на карту тем же путем что и турфы, который мы расставляли в первом уроке.
#50
Отправлено 24 June 2017 - 20:47
Нашел свой старый переводик одного гайда по пиксельарту, решил, что кому-то может быть полезно, а темами срать не хочется. Также вырезал лишнее.
Множество людей говорят мне, что это довольно сложно для них, подобрать идеальную цветовую палитру для своих спрайтов.
В этом самоучителе я попытаюсь показать вам некоторые основные трюки для создания собственной палитры.
Начинаем: RGB и HSB/HSL
Для начала вы должны найти это окно в вашем графическом редакторе. В любой программе, я знаю, оно есть.
Это довольно важно для работы с цветовыми величинами. RGB(RED(красный) GREEN(зеленый) BLUE(синий)) код создает цвет из чисел от 0 до 255.
Более высокие значения увеличивают цветность нашего цвета. Вы можете сочетать эти числа для трех цветов - красного, зеленого и синего. Но вы не сможете на деле понять какие коды соответствуют вашему желаемому цвету.
Итак...
! Меняем RGB на HSB/HSL(Hue Saturation Brightness/Lightness(Оттенок Насыщенность Яркость))
Оттенок
Оттенок определяется значением от 1 до 360 и изменяет выбранный цвет.
Насыщенность
Маленькие значения делают цвет более серым, большие менее серым.
Яркость
Это значение меняет яркость выбранного цвета, высокие значения делают цвет более ярким.
Свет для начинающих
"Изменяем оттенок правильно"
Всегда, когда вы хотите создать новую цветовую палитру, вы должны начинать с вашего темнейшего цвета.
Когда цвет становится ярче, вы должны менять оттенок до следующего более яркого цвета.
Хорошая палитра всегда содержит много темных синих/фиолетовых цветов и очень ярких желтых и зеленых. Потому что так более реалистично.
Цвет контуров
- Этот цвет всегда один и тот же, для всех ваших спрайтов.
- Всегда выбирайте темно-синий или темно-фиолетовый цвет для контура.
Множество людей говорят мне, что это довольно сложно для них, подобрать идеальную цветовую палитру для своих спрайтов.
В этом самоучителе я попытаюсь показать вам некоторые основные трюки для создания собственной палитры.
Начинаем: RGB и HSB/HSL
Для начала вы должны найти это окно в вашем графическом редакторе. В любой программе, я знаю, оно есть.
Это довольно важно для работы с цветовыми величинами. RGB(RED(красный) GREEN(зеленый) BLUE(синий)) код создает цвет из чисел от 0 до 255.
Более высокие значения увеличивают цветность нашего цвета. Вы можете сочетать эти числа для трех цветов - красного, зеленого и синего. Но вы не сможете на деле понять какие коды соответствуют вашему желаемому цвету.
Итак...
! Меняем RGB на HSB/HSL(Hue Saturation Brightness/Lightness(Оттенок Насыщенность Яркость))
Оттенок
Оттенок определяется значением от 1 до 360 и изменяет выбранный цвет.
Насыщенность
Маленькие значения делают цвет более серым, большие менее серым.
Яркость
Это значение меняет яркость выбранного цвета, высокие значения делают цвет более ярким.
Свет для начинающих
"Изменяем оттенок правильно"
Всегда, когда вы хотите создать новую цветовую палитру, вы должны начинать с вашего темнейшего цвета.
Когда цвет становится ярче, вы должны менять оттенок до следующего более яркого цвета.
Хорошая палитра всегда содержит много темных синих/фиолетовых цветов и очень ярких желтых и зеленых. Потому что так более реалистично.
Цвет контуров
- Этот цвет всегда один и тот же, для всех ваших спрайтов.
- Всегда выбирайте темно-синий или темно-фиолетовый цвет для контура.
alexix (23 September 2017 - 18:39) писал:
Мне всегда нравился дервен и его непредсказуемость. Он одновременно и идиот, и гений.
Количество пользователей, читающих эту тему: 1
0 пользователей, 1 гостей, 0 анонимных