Но всегда есть "но". Опять же вперемешку с моей ленью дела движутся медленно. В общем попытаюсь "отчитаться" о совершённых мною дел.
- добавил новый юнит;
- подарил деду ружьё:
Теперь добавлен ещё один юнит. Количество оных оставляет желать лучшего. После данного добавления их суммарное количество равно двум. И так, этот юнит - волк:
волчонок |
Как вообще хищное животное затесалось к домашним, автор понятия не имеет, но теперь они составляют один альянс. А вообще, жалко стало домашних животных, ещё расценят не правильно, решил включить в дело дикую живность. Из всех домашних зверей легче всего крошить в мясо свиней. Это и решило их участь. Теперь им на равне с хищниками придётся отдуваться за оставшийся скот.
Со спрайтом волчары слукавил. Сдеал скриншот волка из редактора карт WarCraft'a третьего. А потом ещё с пол часа шаманил над этой картинкой в PhotoShop'e. Таким же образом теперь у меня есть спрайт вепря и медведя. Но о них скорее всего в следующем сообщении.
Волчонка добавил, от того что одну свинку жарить скучно. Добавил. Передвигается быстро. Кусается больно. Поджаривать его не успеваешь. Поэтому переходим к следующему пункту...
"Подарил деду ружьё"
...странный, наверное, переход. Но этот пункт имеет связь с предыдущим. Какое там было последнее предложение имеющее хоть малейшую смысловую нагрузку? Поджаривать его не успеваешь.... а вот и причина. Волчонок передвигается быстро. Пока ГГ пытается спалить волка из своего огнеброса, последний успевает добежать до нашего престарелого любимца и загрызть его. Но выход был найден. Подарил ему ружьишко. Так как было лень перерисовывать спрайт деда с огнемётом на спрайт с ружьём, то сделал его огнеброс универсальным. Теперь он ещё и стреляет.
Для добавления ружья я потратил пол вечера и половину следующего утра, так как стрельба для меня всё же дело новое. Хотя нет... даже выкладывал мини-игру со стрельбой. Но там было немало печальных моментов. А именно - коллизия с вражеским объектом и задержка между выстрелами. Про коллизию вообще умолчу. Про задержку между выстрелами - замерял расстояние между стрелком и последним с"снарядом". В общем, есть за что краснеть.
Ну а в это раз сделал немножко грамотнее коллизию. С задержкой между выстрелами тоже остался более-менее доволен. Достаточно было замерять время между выстрелами. Может кто другие способы подскажет?(ну профан я в этом деле) Можно было ещё покопаться в исходниках работ 9-го конкурса.
И так, первую часть, т.е. то самое пол вечера, потратил на создание шлейфа(след, остающийся в воздухе после патрона так называется?) от снаряда. Выход нашёлся довольно таки простой. Достаточно было растягивать спрайт шара 64х64 с прозрачными краями и двигать его за патроном. В последствии, вместе с патроном уничтожаем и шлейф. Сам спрайт:
Конечно, можно было использовать и более меньшие размеры. Например, 32х32. Но при их наклоне спрайт искажается. Соответственно спрайт пришлось делать более масштабным.
Не по-душе оказался цвет шлейфа. Плохо смотрелся светло-голубой в качестве оного. А каждый раз менять цвет в графическом редакторе и пересохранять его - утомляет. Поэтому я открыл для себя процедуру Material.GetActualPrimaryMaterial.FrontProperties.Diffuse.SetColor(r,g,b,a); Спасибо учебнику DL, нашёл подсказку в какую сторону копать.
А вторую часть, т.е. слудующее пол-утра потратил на коллизии и звуки выстрела. Для озвучки выстрела начал рыться в ресурсах Counter-Strik'a. Хотел звук выстрела пистолета, но не разобрался какой файл за него отвечает. Поставил от АК-47. Теперь если уменьшить задержку между выстрелами, то получается дед с автоматом при бесконечном числе патронов в магазине.
Над чем собираюсь поработать в дальнейшем:
- GUI(ну ни как у меня до него руки не доходят);
- следы крови при попадании выстрелов(а не испортит ли картинку?);
- добавление новых зверюшек;
На этом пока всё. Если всё таки конкурс продлят, то надеюсь количество сданных работ будет приблизительно(ну хотя бы на половину) равно количеству объявленных блогов.
Удачи конкурсантам с их работами.
Молодец :)
ОтветитьУдалитьНасчет задержки - я тоже так делаю:
t := t + deltaTime;
if t > TimeBetweenShots then
begin
//стреляем
t := 0;
end;
else
//Нельзя еще стрелять, ружьишко не остыло.
Material.GetActualPrimaryMaterial.FrontProperties.Diffuse.SetColor(r,g,b,a)
Ужос, чем тебя не устроило Material.FrontProperties?
В случае с либ-материалом, при его создании задаешь ему FrontProperties.
И да - чтобы цвет был правильным, спрайт должен быть белым.
Я бы на твоем месте поработал с GUI и отсутствием багом - это, на мой взгляд самое главное, чтобы игра смотрелась цельной.
"И да - чтобы цвет был правильным, спрайт должен быть белым."
ОтветитьУдалитьСпасибо) учту. Значит, я был почти близок к истине, раз использовал светлый цвет.
Небольшой ликбез (наверняка, ты это знаешь интуитивно)
ОтветитьУдалитьРежим текстуры Modulate означает, что цвет заданный в материале будет смешиваться с цветом текстуры по принципу
r := r1 * r2;
g := g1 * g2;
...
Соответственно если у текстуры будет цвет 1,1,1 (белый), то влиять будет исключительно цвет, заданный в FrontProperties материала:
r := 1 * r2;
g := 1 * g2;
...
Спасибо, за ликбез. Честно, не знал.
ОтветитьУдалить