Всё для Game Maker
Навигация
Главная
Game Maker
Игры
Примеры
Статьи
Программы
Ресурсы
Справочники
Пакеты расширений
Поиск
Форум
Ссылки
Загрузить файл
Сейчас на сайте
Гостей: 2
На сайте нет зарегистрированных пользователей

Пользователей: 136
Посетитель: Valantery
Темы форума
Новые темы
Alpha-версия School ...
School of the Darkne...
Ассоциации
усовершенствование с...
RPG
Обсуждаемые темы
Ассоциации [286]
Black Monday [52]
RPG [50]
есть вопрос [50]
О форуме [45]
Топ закачек
Woin [6000]
Interest [5279]
Tank [4362]
Спрайты для 2d боевиков [4350]
Спрайты. Часть 1 [4328]
Спрайты. Часть 3 [4311]
Char [4225]
Space [4086]
Pirates [3985]
FireWing version 145d [3980]
Счетчики

Рейтинг сайтов о создании игр
Реклама
Статья
Создание реалистичной воды (вид сбоку)
Автор: logos2012 (Лебедев Антон) - 25 июля 2008

Контакты: logos2012@yandex.ru

Прежде чем




Дабы не возникало лишних, вопросов прочтите следующее.

Примитив - некоторая простейшая геометрическая фигура, которую способна нарисовать программа. Примитивом может быть прямоугольник, круг, эллипс, треугольник, многоугольник и т.д. Чаще всего примитив рисуется векторно, то есть при использовании алгебраических функций, таких как y = ax + b.



Концепция задумки




Создавая многие игры, мы часто задумываемся о том, как сделать их более динамичными, реалистичными, интересными. Очень важную роль в создании истинного реализма играют детали, особенно мелкие. Так, например, взрыв какого-нибудь моста без сопровождения соответствующих эффектов (взрывов, дыма, летящих частей моста) становится сухим и безжизненным. Ракета, летящая без дымового хвоста выглядит как отколовшийся от чего-то кусок (НЛО - неопознанный летающий огрызок). Все эти явления не добавляют интереса к игре, а зачастую и наоборот.

Очень важный элемент дизайна многих скроллинговых боковых шутеров - наличие разнообразного ландшафта. Сюда можно отнести долины, горы, впадины, леса, пустыни, воду. Но если горы, впадины, леса, пустыни можно создать из повторяющихся кусочков, то водный рельеф так просто не сконструируешь. Конечно, можно просто нарисовать некий полупрозрачный или непрозрачный примитив (прямоугольник), а еще лучше два примитивчика, один из которых может менять высоту относительно другого, только при этом ни о какой реалистичности речи вести нельзя. Да не обиться на меня автор, но такой эффект в частность применялся в игре «ICE», кстати эта игра заняла 3-е место на 1-м конкурсе YoYoGames. Вот пример реализации воды в данной игре:



В Create (obj_water):



rise = 0//переменная изменения уровня воды

y = 436

//Инициация различных цветов

a = make_color_rgb(16,74,189)

b = make_color_rgb(24,90,205)

c = make_color_rgb(41,148,243)

d = make_color_rgb(189,189,255)




В Draw (он же):



//Прорисовка примитивов (прямоугольники)

draw_set_color(c_white)

draw_set_alpha(0.6)

draw_rectangle(0,y-abs(rise),room_width,room_height,false)

draw_set_alpha(0.4)

draw_rectangle_color(0,y-abs(rise),room_width,room_height,a,a,d,d,false)

//Пошаговое изменение высоты примитивов

rise += 0.15

if rise >= 10 then rise = -10






Может это и сгодится для бронзовых призеров, но мы с вами люди самодостаточные и способны придумать что-то новое, а главное лучшее. Так вот, задумка реалистичной воды заключается в следующем: мы в начале игры создаем по всей ширине комнаты объекты-генераторы с определенным шагом, которые деактивируются за пределами вида, если размер комнаты больше площади экрана. Объекты-генераторы у нас будут создавать частицы в виде эллипсов, растянутых по ширине. Эти эллипсы должны случайно помещаться в небольшом интервале высоты (амплитуда - 10 пикселей). Эллипсы будут случайным образом перекрывать друг друга, а еще они будут перемещаться, создавая течение. Сейчас мы создали самую сложную часть конструкции. Теперь необходимо создать глубь воды, для чего мы просто отрисуем примитив. Вот и вся концепция. А теперь перейдем к самому «вкусному» - программному коду.



Алгоритм




Сначала при помощи объекта-контроллера (o_draw) создадим нужные объекты-генераторы (o_water):

В Create (o_draw):



//Инициируем объекты воды

for(i=-50;i<=room_width;i+=50)

{

instance_create(i,582,o_water)

}






В Draw (o_draw):



//Отрисовываем воду ниже волн (примитив)

draw_set_color(make_color_rgb(0,0,150))

draw_rectangle(view_xview[0],576,view_wview[0],room_height,0)






Далее работаем с объектом-генератором (o_water).

В Create (o_water):



//Инициируем частицы

oc_ps=part_system_create()//Создаем систему частиц

oc=part_type_create()//Создаем тип частиц

part_type_shape(oc,pt_shape_sphere)//Назначаем тип частиц

part_type_color1(oc,make_color_rgb(0,0,150))//Назначаем цвет частиц

part_type_alpha2(oc,1,0.5)//Ставим alpha-канал

part_type_direction(oc,180,180,0,1)//Назначаем направление движения

part_type_life(oc,15,15)//Определяем время жизни частиц

part_type_size(oc,0.8,1.2,0,0.01)//Назначаем размер

part_type_scale(oc,1,0.2)//Растягиваем по горизонтали (эллипс)

part_type_speed(oc,3,5,0,2)//Имитация течения

oc_em=part_emitter_create(oc_ps)//Создаем эмиттер

//Ставим регион генерации частиц эмиттером
part_emitter_region(oc_ps,oc_em,x,x,y-5,y+5,ps_shape_rectangle,ps_distr_linear)






Теперь удаляем объекты-генераторы (если игра скроллинговая).

В Step (o_water):



if(x<view_xview[0])

{

instance_destroy()

}






В Draw (o_water):



//Назначаем генерацию взрыва частиц каждый шаг

part_emitter_burst(oc_ps,oc_em,oc,1)






P.S.: в комнату необходимо поместить только o_draw.

Теперь в данную воду и какую-нибудь подлодку поместить не грех.

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



Недостатки алгоритма




Данный алгоритм хоть и создает эффект волн и течения на воде, но он не лишен своих недостатков, главный из которых - невозможность немедленного динамического изменения цвета воды, что например необходимо, если объект погружается на глубину (затемнение фона воды). Этому мешает время жизни, которое равно 15 шагов. При использовании меньшего времени жизни частиц эффект волн становится мелькающим и теряет плавность. Возможно, какой-нибудь гениальный ум избавится от этой проблемы. Если же менять цвет воды не нужно, то смело используйте данный код, а также можете поэкспериментировать с временем жизни частиц, размером и масштабированием.


Эту статью + пример Вы можете скачать здесь.
 
Опубликовал -MaX- Июль 28 2008 20:24:57 · 0 Комментариев · 7196 Прочтений · Для печати
Комментарии
Нет комментариев.
Добавить комментарий
Вам нужно авторизоваться или зарегистрироваться чтобы оставлять комментарии.
Рейтинги
Рейтинг доступен только для пользователей.

Пожалуйста, авторизируйтесь или зарегистрируйтесь для голосования.

Нет данных для оценки.
Гость
Имя

Пароль



Вы не зарегистрированны?
Нажмите здесь для регистрации.

Забыли пароль?
Запросите новый здесь.
Голосование
Оцените новую версию сайта :)

5 (отлично)

4 (хорошо)

3 (плохо)

2 (ужасно)

Для участия в опросах вы должны авторизоваться или зарегистрироваться.
Мини-чат
Вам необходимо авторизоваться.

GRID
06/04/2012 18:17
<_<

MaxIM
21/01/2012 16:23
Я всё еще вспоминаю про этот сайт... Жалко что -МаХ- ушёл в неизвестность,и забил на всё =(

CrashBand
17/10/2011 20:40
лол.

MaxIM
04/08/2011 22:26
Я тоже жив,а вот насчет -MaX-`a незнаю =(((

fedenkovadik
28/07/2011 03:41
прошел практически ровно год, немного больше. Я все еще жив. В отличии от сайта. сука.

Архив чата