08 июля 2011

Снова за работу

  Ну название сообщения не совсем правдиво. Но после событий минувших дней, я вправду, снова взялся за работу.
  Но всегда есть "но". Опять же вперемешку с моей ленью дела движутся медленно. В общем попытаюсь "отчитаться" о совершённых мною дел.
  • добавил новый юнит;
  • подарил деду ружьё:
  "добавил новый юнит"  
 Теперь добавлен ещё один юнит. Количество оных оставляет желать лучшего. После данного добавления их суммарное количество равно двум. И так, этот юнит - волк:
волчонок
  Как вообще хищное животное затесалось к домашним, автор понятия не имеет, но теперь они составляют один альянс. А вообще, жалко стало домашних животных, ещё расценят не правильно, решил включить в дело дикую живность. Из всех домашних зверей легче всего крошить в мясо свиней. Это и решило их участь. Теперь им на равне с хищниками придётся отдуваться за оставшийся скот. 
  Со спрайтом волчары слукавил. Сдеал скриншот волка из редактора карт WarCraft'a третьего. А потом ещё с пол часа шаманил над этой картинкой в PhotoShop'e. Таким же образом теперь у меня есть спрайт вепря и медведя. Но о них скорее всего в следующем сообщении.
  Волчонка добавил, от того что одну свинку жарить скучно. Добавил. Передвигается быстро. Кусается больно. Поджаривать его не успеваешь. Поэтому переходим к следующему пункту...

   "Подарил деду ружьё"
...странный, наверное, переход. Но этот пункт имеет связь с предыдущим. Какое там было последнее предложение имеющее хоть малейшую смысловую нагрузку? Поджаривать его не успеваешь.... а вот и причина. Волчонок передвигается быстро. Пока ГГ пытается спалить волка из своего огнеброса, последний успевает добежать до нашего престарелого любимца и загрызть его. Но выход был найден. Подарил ему ружьишко. Так как было лень перерисовывать спрайт деда с огнемётом на спрайт с ружьём, то сделал его огнеброс универсальным. Теперь он ещё и стреляет. 
  Для добавления ружья я потратил пол вечера и половину следующего утра, так как стрельба для меня всё же дело новое. Хотя нет... даже выкладывал мини-игру со стрельбой. Но там было немало печальных моментов. А именно - коллизия с вражеским объектом и задержка между выстрелами. Про коллизию вообще умолчу. Про задержку между выстрелами - замерял расстояние между стрелком и последним с"снарядом". В общем, есть за что краснеть.
  Ну а в это раз сделал немножко грамотнее коллизию. С задержкой между выстрелами тоже остался более-менее доволен. Достаточно было замерять время между выстрелами. Может кто другие способы подскажет?(ну профан я в этом деле) Можно было ещё покопаться в исходниках работ 9-го конкурса.
  И так, первую часть, т.е. то самое пол вечера, потратил на создание шлейфа(след, остающийся в воздухе после патрона так называется?) от снаряда. Выход нашёлся довольно таки простой. Достаточно было растягивать спрайт шара 64х64 с прозрачными краями и двигать его за патроном. В последствии, вместе с патроном  уничтожаем и шлейф. Сам спрайт:
  Конечно, можно было использовать и более меньшие размеры. Например, 32х32. Но при их наклоне спрайт искажается. Соответственно спрайт пришлось делать более масштабным. 
  Не по-душе оказался цвет шлейфа. Плохо смотрелся светло-голубой в качестве оного. А каждый раз менять цвет в графическом редакторе и пересохранять его - утомляет. Поэтому я открыл для себя процедуру Material.GetActualPrimaryMaterial.FrontProperties.Diffuse.SetColor(r,g,b,a); Спасибо учебнику DL, нашёл подсказку в какую сторону копать.
  А вторую часть, т.е. слудующее пол-утра потратил на коллизии и звуки выстрела. Для озвучки выстрела начал рыться в ресурсах Counter-Strik'a. Хотел звук выстрела пистолета, но не разобрался какой файл за него отвечает. Поставил от АК-47. Теперь если уменьшить задержку между выстрелами, то получается дед с автоматом при бесконечном числе патронов в магазине.

Над чем собираюсь поработать в дальнейшем:
  •  GUI(ну ни как у меня до него руки не доходят);
  • следы крови при попадании выстрелов(а не испортит ли картинку?);
  • добавление новых зверюшек;
  Хоть и научился примерно пользоваться скриптами, но решил пока от них отказаться. Причина такова - понятия не имею какой функционал на них "повесить". 
  На этом пока всё. Если всё таки конкурс продлят, то надеюсь количество сданных работ будет приблизительно(ну хотя бы на половину) равно количеству объявленных блогов.  
  Удачи конкурсантам с их работами.

4 комментария:

  1. Молодец :)

    Насчет задержки - я тоже так делаю:

    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 и отсутствием багом - это, на мой взгляд самое главное, чтобы игра смотрелась цельной.

    ОтветитьУдалить
  2. "И да - чтобы цвет был правильным, спрайт должен быть белым."
    Спасибо) учту. Значит, я был почти близок к истине, раз использовал светлый цвет.

    ОтветитьУдалить
  3. Небольшой ликбез (наверняка, ты это знаешь интуитивно)
    Режим текстуры Modulate означает, что цвет заданный в материале будет смешиваться с цветом текстуры по принципу
    r := r1 * r2;
    g := g1 * g2;
    ...
    Соответственно если у текстуры будет цвет 1,1,1 (белый), то влиять будет исключительно цвет, заданный в FrontProperties материала:

    r := 1 * r2;
    g := 1 * g2;
    ...

    ОтветитьУдалить
  4. Спасибо, за ликбез. Честно, не знал.

    ОтветитьУдалить