Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > BlitzMax > FAQ и уроки

Ответ
 
Опции темы
Старый 26.10.2007, 11:07   #1
Данил
Модератор
 
Аватар для Данил
 
Регистрация: 11.07.2007
Сообщений: 2,910
Написано 686 полезных сообщений
(для 1,694 пользователей)
Некоторые полезные функции

Функции.

В этом туториале я вам расскажу о некоторых необходимх функциях, которые бы потребовались при создании игры.


Первая функция, это, конечно же, вывод простой картинки.

[blitz]
'============================================= ОТРИСОВКА ИЗОБРАЖЕНИЯ
Function Bl_DrawImage (image, x#, y#, z#, rotat#,level#,scale#,r,g,b,tip,frame=0 )
'Рисуем тень
If z > 0 Then
SetBlend ALPHABLEND
SetColor 0, 0, 0
SetAlpha level-0.5
SetRotation rotat
SetScale scale,scale
DrawImage image, x-(z), y + z
End If
'Рисуем саму картинку
If tip=1 Then SetBlend LIGHTBLEND
If tip=2 Then SetBlend ALPHABLEND
If tip=3 Then SetBlend MASKBLEND
SetRotation rotat
SetAlpha level
SetScale scale,scale
SetColor R,G,B
DrawImage image, x, y, frame
'Выставляем параметры по умолчанию.
SetRotation 0
SetAlpha 1
SetScale 1,1
SetColor 255,255,255
SetBlend ALPHABLEND
End Function
[/blitz]

В стандартном виде это бы всё выглядело убого. И каждый раз пришлось бы это писать. Для каждой картинки. Это столько лишнего текста. По этому лучше использовать эту функцию.

Для использования функции пишите в коде DrawShadowImage (image, x#, y#, z#, rotat#,level#,scale#,r,g,b,tip,frame )

Image – картинка, коотрая будет показывается
x – положение по х
y – положение по у
z – высота тени от картинки. При 0 тень не рисуется.
Rotat – поворот картинки. (0-360)
Level – прозрачность картинки. (0-1)
Scale – масштаб картинки.
R – количество красного цвета (0-255)
G – количество зеленого цвета (0-255)
B – количество синего цвета (0-255)
Tip – тип отрисовки. 1 – светится. 2- мягкая прозрачность 3- грубая
Frame - кадр для анимационной картинки. Если не анимациооная - не заполняем.
Пример: Bl_DrawImage (Hero, 24, 32, 2, 0,1,1,255,255,255,2 )


·················································· ··········
[blitz]
'============================================= ОТРИСОВКА ТЕКСТА
Function Bl_DrawText (t$, x, y,r,g,b)
SetRotation 0
SetColor 0,0,0
SetAlpha 0.7
DrawText t$, x+1, y+1

SetRotation 0
SetColor r,g,b
SetAlpha 1 DrawText t$, x, y
'Выставляем параметры по умолчанию.
SetRotation 0
SetAlpha 1
SetScale 1,1
SetColor 255,255,255

End Function
[/blitz]
Это функция для отрисовки текста.
T – текст
x – положение по х
y – положение по у
R – количество красного цвета (0-255)
G – количество зеленого цвета (0-255)
B – количество синего цвета (0-255)

·················································· ··········
[blitz]
'============================================= ОПРЕДЕЛИТЬ УГОЛ МЕЖДУ ТОЧКАМИ
Function Bl_Angle!(x0!,y0!,x1!,y1!)
Return ATan2(y1-y0,x1-x0)
End Function
[/blitz]

Определяем угол между двумя точками. Помогает, допустим, при повороте врага. Чтобы враг был повёрнут в сторону игрока, пишем:
Monster.Ang = Angle!(monster.x,monster.y,hero.x,hero.y)

X0 – положение по Х первого объекта
Y0 – положение по У первого объекта
X1 – положение по Х второго объекта
Y1 – положение по у второго объекта
·················································· ··········
[blitz]
'============================================= ОТРИСОВКА ПРЯМОУГОЛЬНИКА
Function Bl_DrawRect (x#,y#,z#, width# , height# , level# , r , g , b , tip, o )
Setscale 1,1

'Рисуем тень
If z > 0 Then
SetBlend ALPHABLEND
SetColor 0, 0, 0
SetAlpha level-0.5
DrawRect x-(z), y + z , width# , height#
End If


SetRotation 0
SetAlpha level
SetColor R,G,B

If tip=1 Then SetBlend LIGHTBLEND
If tip=2 Then SetBlend ALPHABLEND
If tip=3 Then SetBlend MASKBLEND
DrawRect x,y , width# , height#

If o = 1 Then
SetColor r+80,g+80,b+80
DrawLine x, y, x+width,y
DrawLine x, y, x, y+height

SetColor r-80,g-80,b-80
DrawLine x, y+height, x+width, y+height
DrawLine x+width, y, x+width, y+height
End If

SetRotation 0
SetAlpha 1
SetColor 255,255,255

End Function
[/blitz]

Функция для отрисовки прямоугольных плоскостей. Опять же экономим кучу кода.


Image – картинка, коотрая будет показывается
x – положение по х
y – положение по у
z – высота тени от прямоуголььника. При 0 тень не рисуется.
width – ширина прямоугольника
height – высота прямоугольника
Level – прозрачность картинки. (0-1)
R – количество красного цвета (0-255)
G – количество зеленого цвета (0-255)
B – количество синего цвета (0-255)
Tip – тип отрисовки. 1 – светится. 2- мягкая прозрачность 3- грубая
O – объемный ли прямоугольник.(0-1)
·················································· ··········
[blitz]
Global FPS, FPS2, FPS_T 'Для отображения фпс.

'============================================= ОТРИСОВКА ФПС
Function Bl_DrawFPS()
Bl_DrawText "FPS: " + FPS2,200,0,255,255,255
fps=fps+1
If fps_t<MilliSecs()
fps2=fps
fps_t=1000+MilliSecs()
fps=0
EndIf
End Function
[/blitz]

Функция для отображения фпс. Просто в главном цикле перед flip пиши Bl_DrawFPS .

·················································· ··········
[blitz]
Function Bl_Distance(x1#,y1#,x2#,y2#)
Local nx#
Local ny#
Nx=x1-x2
Ny=y1-y2
Return Sqr((nx*nx)+(ny*ny))
End Function
[/blitz]
Определяет расстояник между двумя точками.
X1 – положение по Х первого объекта
Y1 – положение по У второго объекта
X2 – положение по Х первого объекта
Y2 – положение по у второго объекта


·················································· ··········
[blitz]
'============================================= ОТРИСОВКА ЛИНИИ
Function Bl_DrawLine (x1#,y1#,z#, x2#,y2# , r , g , b )
'Устанавливаем параметры, чтобы нормально рисовалось
SetScale 1,1
SetAlpha 1
SetBlend ALPHABLEND
SetRotation 0

'Рисуем тень
If z > 0 Then
SetBlend ALPHABLEND
SetColor 0, 0, 0
SetAlpha level-0.5
DrawRect x1-(z), y1 + z , x2-(z), y2 + z
End If


SetColor R,G,B

'Рисуем.
DrawLine x1,y1,x2,y2


'Восстанавливаем параметры по умолчанию
SetRotation 0
SetAlpha 1
SetColor 255,255,255
End Function
[/blitz]

Функция для отрисовки линии.


X1 – положение по Х первой точки
Y1 – положение по У первой точки
X2 – положение по Х второй точки
Y2 – положение по у второй точки
z – высота тени от прямоуголььника. При 0 тень не рисуется.
R – количество красного цвета (0-255)
G – количество зеленого цвета (0-255)
B – количество синего цвета (0-255)
·················································· ··········
[blitz]
'============================================= ЗАГРУЗКА КАРТЫ
Function Bl_LoadMap ()
Local T
Local x,y

In:TStream = OpenStream("Map1.map",True,Fasle)

t = Int(ReadLine (In))

If t > 0 Then
For i = 1 To t
x = Int( ReadLine (In))
y = Int( ReadLine (In))
TObject.CreateObject (x,y)
Next
End If

End Function
[/blitz]

Функция загрузка карты.

TObject – Тип объекта. У вас свой.
CreateObject – Функция создания объекта. У вас своя.
SObject – список, в котором содержутся объекты. У вас свой.

Считаем количетсво объектов t. Если их больше 0, то загружаем координаты. Загрузили – создаем объекты с такими координатами.

·················································· ··········
[blitz]
Function Bl_SaveMap ()

'Запись в файл.
Out:TStream = OpenStream("Map1.map",False,True)
WriteLine(out, CountList(sObject) )

For Object:TObject = EachIn sObject
WriteLine(Out,Object.x)
WriteLine(Out,Object.y)

Next


CloseStream(Out)
End Function
[/blitz]

Запись данных в карту.
Записываем количество объектов и их координаты.

·················································· ··········
Вот 9 функций, которые бы помогли сократить количество кода. Далее, возможно, добавлю еще.


Вот сам файл. С помощью include присоедените его к игре и сможете использовать все эти функциию

bl_mod.bmx
Функции.doc
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо Данил за это полезное сообщение:
Nex (07.05.2009), Randomize (27.01.2009)
Старый 26.10.2007, 11:40   #2
Данил
Модератор
 
Аватар для Данил
 
Регистрация: 11.07.2007
Сообщений: 2,910
Написано 686 полезных сообщений
(для 1,694 пользователей)
Re: Некоторые полезные функции

второй вариант функции Bl_drawFPS() :

[blitz]
Global FPS, FPS2, FPS_T 'Для отображения фпс.
[/blitz]
Переменные необходимые
[blitz]
Function Bl_GetFPS()
fps=fps+1
If fps_t<MilliSecs()
fps2=fps
fps_t=1000+MilliSecs()
fps=0
EndIf
Return fps2
End Function
[/blitz]
Функция, возвращающая кол-во фпс.
[blitz]
Bl_DrawText "FPS: " + GetFPS(),x,e,255,255,255
[/blitz]
Рисуем фпс. Ставим где-нибудь в цикле игры.
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Полезные функции pax FAQ 26 22.11.2008 17:35
некоторые вопросы по с++ Timon C++ 10 12.08.2007 02:16
Полезные функции: Работа с Углами, Отрезками, Окружностями (Физика) moka 2D-программирование 0 12.06.2007 21:01
Полезные процедуры и функции к MP (СЮДА КИДАЕМ) Kurdt Основной форум 3 29.03.2007 00:26
полезные советы jimon Болтовня 28 23.11.2005 21:31


Часовой пояс GMT +4, время: 12:55.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com