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 23.04.2012 18:11

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

Сообщение от Gector (Сообщение 226170)
Код:

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 ее рисунка.

нашлась проблемка -
у меня карта просто огромная а если тут писать размеры карты они больше размеров картинки и тогда карта перестаёт двигаться просто стоит в центре

Gector 23.04.2012 19:08

Ответ: Круглый радар
 
Если я все правильно понял: Меняй размер изображения нарисованной карты в соответствии с реальным размером карты (можно найти с помощью meshwidth и т.д.). В примере он ищет считает соотношение: карта больше нарисованной - карта скроллится медленней, рисунок больше - наоборот быстрее.
Код:

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

Global levelsize#=4000
Global map_imagesize=512
Function Radar()
        Local Image=CreateImage(256,256)
        SetBuffer ImageBuffer(Image)
                Cls
                DrawImage RadarMap,-(map_imagesize/levelsize)*EntityX(Player),(map_imagesize/levelsize)*EntityZ(Player)
                Color 255,0,0
                ; Куб впереди игрока на радаре определяется относительно самого игрока
                Rect (256/2)+(map_imagesize/levelsize)*(EntityX(Cube)-EntityX(Player)),(256/2)-(map_imagesize/levelsize)*(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


tirarex 23.04.2012 19:33

Ответ: Круглый радар
 
угу изображение размером 10245x1050

burovalex 23.04.2012 20:07

Ответ: Круглый радар
 
Я предлагаю для меньшего гемороя (сам правда не реализовал)
- создать дополнительную камеру
- расположить ее над персом на нужной высоте и повернуть на перса
- отображать на этой камере нужные тебе фигуры вместо Entity
- рендерить это хозяйство и ложить в Image
- наложить нужную маску на Image или (как предлагали) DrawImageRect
Всё :)

Gector 23.04.2012 20:09

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

Сообщение от tirarex (Сообщение 226241)
угу изображение размером 10245x1050

А нафига тебе карта таких размеров? Сожми ее до 1000х100 и регулируй размеры по двум осям а не по одной как в примере. Ну или до 1000х1000 подкрути.
Цитата:

Сообщение от burovalex (Сообщение 226244)
Я предлагаю для меньшего гемороя (сам правда не реализовал)
- создать дополнительную камеру
- расположить ее над персом на нужной высоте и повернуть на перса
- отображать на этой камере нужные тебе фигуры вместо Entity
- рендерить это хозяйство и ложить в Image
- наложить нужную маску на Image или (как предлагали) DrawImageRect
Всё :)

Угу. И получить еще один рендер).

tirarex 23.04.2012 20:50

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

Сообщение от Gector (Сообщение 226245)
А нафига тебе карта таких размеров? Сожми ее до 1000х100 и регулируй размеры по двум осям а не по одной как в примере. Ну или до 1000х1000 подкрути.

Угу. И получить еще один рендер).

яб с радостью тоько придётся менять размер и у афто динамических обьектов и кучи всего это тоже очень сложно будет + у меня 15 авто у каждого 4 колеса у каждого колеса 3 настройки подумай сколько надо менять 180 настроек :''((

Gector 23.04.2012 21:03

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

Сообщение от tirarex (Сообщение 226251)
яб с радостью тоько придётся менять размер и у афто динамических обьектов и кучи всего это тоже очень сложно будет + у меня 15 авто у каждого 4 колеса у каждого колеса 3 настройки подумай сколько надо менять 180 настроек :''((

Ээээ... Я про размеры картинки карты).

tirarex 23.04.2012 21:24

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

Halk-DS 23.04.2012 21:47

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

Сообщение от burovalex (Сообщение 226244)
Я предлагаю для меньшего гемороя (сам правда не реализовал)
- создать дополнительную камеру
- расположить ее над персом на нужной высоте и повернуть на перса
- отображать на этой камере нужные тебе фигуры вместо Entity
- рендерить это хозяйство и ложить в Image
- наложить нужную маску на Image или (как предлагали) DrawImageRect
Всё :)

У меня в игре рендер бывает жрет 5-15 миллисекунд. Цикл 1000/30=33 миллисекунды. Если я включу 2-й рендер мой фпс накроется медным тазом. Такое можно реализовывать только в крайне редких случаях, и то я б сказал не самое качественное решение. Намного лучше сгенерировать миникарту программно во время загрузки раунда, но это тоже не всегда получится.

tirarex 23.04.2012 21:52

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

Gector 23.04.2012 22:02

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

Сообщение от tirarex (Сообщение 226272)
ну думаю генерировать карту это если ты делаеш поуровневую игру да и то лучше сделать рендер карты в максе потом обрисовать углы дороги и вставить в игру
в блитзе так неполучится

Есть способ, но годится больше для стратежек. Генерировать с помощью linepick карту которая будет строиться на том какой объект карты был пикнут.


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

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