Некоторые полезные функции
Функции. В этом туториале я вам расскажу о некоторых необходимх функциях, которые бы потребовались при создании игры. Первая функция, это, конечно же, вывод простой картинки. [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 |
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] Рисуем фпс. Ставим где-нибудь в цикле игры. |
Часовой пояс GMT +4, время: 18:03. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot