forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Blitz3D (http://forum.boolean.name/forumdisplay.php?f=45)
-   -   Круглый радар (http://forum.boolean.name/showthread.php?t=16683)

tirarex 22.04.2012 16:59

Круглый радар
 
Вложений: 2
делал я дальше один из своих проектов и нашёл новую проблему

это радар мне он нужен не квадраный а круглый
как тут (оттуда и взял текстуры)
пикча в аттаче
но я таки ничего непридумал как сделать такой радар
для рисовки пользуюсь Fastimage

Gector 22.04.2012 17:25

Ответ: Круглый радар
 
Цитата:

Сообщение от tirarex (Сообщение 226152)
делал я дальше один из своих проектов и нашёл новую проблему

это радар мне он нужен не квадраный а круглый
как тут (оттуда и взял текстуры)


но я таки ничего непридумал как сделать такой радар
для рисовки пользуюсь Fastimage

Первая картинка не грузится.
Юзай синусы и косинусы и угол поворота игрока.

tirarex 22.04.2012 17:27

Ответ: Круглый радар
 
мне нужно идею как реализовать круглый радар вот и всё

mauNgerS 22.04.2012 18:15

Ответ: Круглый радар
 
Делай квадратный и используй маску чтобы скрыть лишнее

Igor 22.04.2012 18:15

Ответ: Круглый радар
 
А у тебя есть идея как сделать радар квадратным?

Gector 22.04.2012 18:40

Ответ: Круглый радар
 
Цитата:

Сообщение от Igor (Сообщение 226159)
А у тебя есть идея как сделать радар квадратным?

Это тоже просто. Только обработка будет с учетом не дистанции, а с учетом нахождения в площади радара.
Как я понял у автора проблема не столько с радаром сколько с поворотом карты. Принцип будет тот же. Только вместо точки будет центр-начало координат от которого будет отчитываться перемещение на экране.
Подробнее распиши проблему.

tirarex 22.04.2012 18:45

Ответ: Круглый радар
 
мне надо чтоб по середине была стрелка - игрок
на фоне была карта и всё
карта некрутится
крутится сама стрелка на ней

Gector 22.04.2012 18:54

Ответ: Круглый радар
 
Цитата:

Сообщение от tirarex (Сообщение 226161)
мне надо чтоб по середине была стрелка - игрок
на фоне была карта и всё
карта некрутится
крутится сама стрелка на ней

Поворачиваешь стрелку на угол поворота перса в мире. Карту двигаешь относительно перса (его смещение в мире передаешь карте). Вот и все. Остальное прячешь с помощью маски.

tirarex 22.04.2012 19:55

Ответ: Круглый радар
 
а можно поподробнее как двигать карту и неоткожусь от маленького примера с текстурой из первого поста

Halk-DS 22.04.2012 21:11

Ответ: Круглый радар
 
В Блице есть оператор:
DrawImageRect image,x,y,rect_x,rect_y,rect_width,rect_height,[frame]
Изучи его и посмотри в FastImage есть аналог. Потом берешь рисуешь в фотошопе карту (или генерируешь рисунок программно, это как сам задумаешь) загружаешь рисунок в оперативу, и рисуешь необходимый кусок карты используя тот оператор что я тебе дал. Все просто как дверь, а как говорили парни, хочешь круглую карту делай маской.
Пример:
111111111111111
111111101111111
111111000111111
111110000011111
111100000001111
111000000000111
111100000001111
111110000011111
111111000111111
111111101111111
111111111111111
Представь что это рисунок, теперь представь что нарисован не ромбик а круглешок. Пикселы под цифрой 1 - белый цвет. Пикселы под номером 0-черные. Маскируешь в рисунке 0 (черный) цвет. И рисунок начинает быть похожим на белую рамку. Накладываешь эту белую рамку на рисунок с картой, а на рисунке с картой маскируешь белый цвет. Вуаля - круглая белая рамка исчезает на рисунке с картой и мы имеем круглую карту.
п.с. Не вздумай юзать EntityDistance для проверки радиуса около перса. Это ш проекция в которой ось У игнорится, а в команде EntityDistance она учитывается. Напиши сам функцию:
Function Distance#(X1#,Z1,X2#,Z2#)
Return Sqr((X2-X1)^2+(Z2-Z1)^2)
End Function
И будет тебе счастье!

Gector 22.04.2012 21:15

Ответ: Круглый радар
 
Код:

Graphics3D 1024,768,32,1
SetBuffer BackBuffer()

Global Player=CreateCube()
Cam=CreateCamera(Player): PositionEntity Cam,0,3,-5
Global Cube=CreateCube(): PositionEntity Cube,2,0,10: EntityColor Cube,255,0,0

Global RadarMap=CreateImage(512,512)
SetBuffer ImageBuffer(RadarMap)
        For i=0 To 10
                Color Rand(255), Rand(255), Rand(255)
                Rect Rand(0,512),Rand(0,512), Rand(0,512),Rand(0,512)
        Next
SetBuffer BackBuffer()
MidHandle RadarMap

Global RadarMask=CreateImage(256,256)
SetBuffer ImageBuffer(RadarMask)
        Color 0,0,0
        Rect 0,0,256,256
        Color 255,255,255
        Oval 0,0,256,256
SetBuffer BackBuffer()
MaskImage RadarMask,255,255,255

Function Radar()
        Local Image=CreateImage(256,256)
        SetBuffer ImageBuffer(Image)
                Cls
                DrawImage RadarMap,-(512/400)*EntityX(Player),(512/400)*EntityZ(Player)
                Color 255,0,0
                ; Куб впереди игрока на радаре определяется относительно самого игрока
                Rect (256/2)+(512/400)*(EntityX(Cube)-EntityX(Player)),(256/2)-(512/400)*(EntityZ(Cube)-EntityZ(Player)),5,5
                ;Линия указывающая направление. В твоем случае нужно просто установить угол.
                Line 256/2,256/2,(256/2)+Cos(-1*(EntityYaw(Player)+90))*10,(256/2)+Sin(-1*(EntityYaw(Player)+90))*10
                DrawImage RadarMask,0,0
        SetBuffer BackBuffer()
        DrawImage Image,(GraphicsWidth()/3)*2,(GraphicsHeight()/3)*2
End Function

Repeat
If KeyDown(17) MoveEntity Player,0,0,.5
If KeyDown(31) MoveEntity Player,0,0,-.5
If KeyDown(30) TurnEntity Player,0,1,0
If KeyDown(32) TurnEntity Player,0,-1,0
UpdateWorld
RenderWorld
Text 10,10,EntityYaw(Player)
Radar()
;DrawImage RadarMap,0,0
;DrawImage RadarMask,0,0
Flip
Until KeyHit(1)
End

Пояснения: 400- реальный размер карты, 512 ее рисунка.

ABTOMAT 23.04.2012 00:03

Ответ: Круглый радар
 
При помощи DrawPoly делаешь круг из полигонов, на него вешаешь текстуру карты. Смещением текстурных координат делаешь соответственно смещение (да можно и поворот) карты на радаре.
Значки - поверх уже обычным способом.

Randomize 23.04.2012 01:29

Ответ: Круглый радар
 
Цитата:

Сообщение от ABTOMAT (Сообщение 226188)
При помощи DrawPoly делаешь круг из полигонов, на него вешаешь текстуру карты. Смещением текстурных координат делаешь соответственно смещение (да можно и поворот) карты на радаре.
Значки - поверх уже обычным способом.

Только если у тебя FastImage

tirarex 23.04.2012 10:47

Ответ: Круглый радар
 
спасибо всем
особенно
Hulk-DS за описание способа
и
Gector за пример

ABTOMAT 23.04.2012 11:40

Ответ: Круглый радар
 
Цитата:

Сообщение от Randomize (Сообщение 226194)
Только если у тебя FastImage

ОП-пост: для рисовки пользуюсь Fastimage


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

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot