|
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 пользователя(ей) сказали Спасибо Данил за это полезное сообщение:
|
|
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)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 22:33.
|