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=16198)

Krep_Kospit 16.01.2012 11:22

Вопрос про пошаговость...
 
Добрый день.

Решил попробовать сделать простенькую пошаговую стратегию, приготовил модельки, камеру, движение, стрельбу и т.п., но никак не смог придумать алгоритм отображения на террайне гексагонов или квадратов, по которым могли бы перемещаться юниты. Полистал примеры и страницы - не отыскал.
Единственной идеей стало засеивание террайна Pivot'ами... Но это, скорее всего, не выход.
Прошу знатоков подсказать, с помощью чего делается требуемое, или же ткнуть, где лежит пример.

SBJoker 16.01.2012 12:33

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

З.Ы. недумали ник по-проще сделать?

Krep_Kospit 16.01.2012 13:12

Ответ: Вопрос про пошаговость...
 
Цитата:

Сообщение от SBJoker (Сообщение 216941)
обычно это делается текстурой с нарисованной сеткой, накладываемой вторым слоем.

З.Ы. недумали ник по-проще сделать?

Хм, про вторую текстуру я как-то не допетрил... Спасибо.

Тогда второй вопрос: положил вторую текстуру с квадратами, а теперь мне надо, чтобы юнит двигался только через стороны квадрата, а не пересекал их по кратчайшему расстоянию. Это делается по типу вейпоинтов? Или есть иные способы?

Ник, конечно же, надо другой :) Но, видимо, я настолько слоупок, что в личном кабинете не нашёл этой опции :(

Dream 16.01.2012 14:03

Ответ: Вопрос про пошаговость...
 
От центра одного квадрата до центра другого квадрата, который соседний с первым, полюбому путь будет проходить посредине через грань

Krep_Kospit 16.01.2012 14:36

Ответ: Вопрос про пошаговость...
 
Цитата:

Сообщение от Dream (Сообщение 216943)
От центра одного квадрата до центра другого квадрата, который соседний с первым, полюбому путь будет проходить посредине через грань

так, уже яснее, спасибо :) Только непонятно пока, что может являться центром квадрата?

FireOwl 16.01.2012 15:12

Ответ: Вопрос про пошаговость...
 
Цитата:

Сообщение от [email protected] (Сообщение 216942)
Ник, конечно же, надо другой :) Но, видимо, я настолько слоупок, что в личном кабинете не нашёл этой опции :(

Запости сюда заявку: http://forum.boolean.name/showthread.php?t=4658&page=6


А зачем в игру, где все изначально создается не по сетке, вводить ее для персонажей?

Krep_Kospit 16.01.2012 16:03

Ответ: Вопрос про пошаговость...
 
Цитата:

Сообщение от FireOwl (Сообщение 216948)
А зачем в игру, где все изначально создается не по сетке, вводить ее для персонажей?

эмм... можно тогда хотя бы словесный алгоритм создания сетки и привязки к ней объектов? Как бы в двиге я нуб, и делать, наверно, не с того начал...

Krep_Kospit 17.01.2012 15:18

Ответ: Вопрос про пошаговость...
 
Полистал темы в других редакторах, нашёл идею - создание плоскости и разбивка её на квадраты. Кто-нибудь может рассказать подробнее, какими командами производить разбивку и как располагать разбитую на квадраты плоскость на ландшафте?

Nex 17.01.2012 15:51

Ответ: Вопрос про пошаговость...
 
width - количество клеток в ширину
height - количество клеток в высоту (глубину).
Код:

Function CreatePlane2 (width=1,height=1)
        mesh = CreateMesh ()
                surface=CreateSurface (mesh)
                        For z=-width/2 To width/2
                                u#=z/Float (width)*20
                                For x=-height/2 To height/2
                                        v#=x/Float (height)*20
                                        vx=AddVertex (surface,x*2.0,0,z*2.0,u,v)
                                Next
                        Next

                        For z=0 To height-1
                        For x=0 To width-1
                                start = x+z*(width+1)
                                        v0=start
                                        v1=start+1
                                        v2=start+(width+1)
                                        v3=start+(width+1)+1
                                                  AddTriangle surface,v2,v1,v0
                                                  AddTriangle surface,v2,v3,v1
                        Next
                        Next
        Return mesh
End Function


DStalk 17.01.2012 16:05

Ответ: Вопрос про пошаговость...
 
Да в принципе пофиг на модельку поверхности и пофиг какими методами ее делать. Главное что юниты будут перемещатся по координатам (сетка квадратная, то есть X и Y) - тут все просто. А положение модельки юнита считаешь от масштаба, например если клетка размером 10х10, то значит реальные координаты юнита будут типа того:
Код:

x=unit\x*10+5
y=unit\y*10+5
PositionEntity unit\entity,x,0,y

Unit - это тип с информацией о юнитах, +5 для того чтобы юнит был всегда посередине клетки (если поле начинается с координат 0,0)

В данном случае модель террейна можно брать любую, а можно и вообще без нее))

Krep_Kospit 17.01.2012 19:25

Ответ: Вопрос про пошаговость...
 
Не понимаю :(

сделал так:

Код:

CreatePlane2#() ;то есть вызвал функцию

Global amount = 5
For i = 0 To amount
tank.tank_platform = New tank_platform
tank\tank_model = LoadAnimMesh("..\..\..\media\textures\123.fbx") ; создал танк

tank\tank_chassi = xFindChild(tank\tank_model, "platform001")
 
  rx=rx+40 ; размещаю его в мире
    x# = 10+rx
          z# = 50
        PositionEntity(tank\tank_model, x,90, 100)
        MoveEntity(tank\tank_model, 40, 0,0)

А как разместить/привязать его по/к сетке? перебирать вертексы и от них как-то отталкиваться?:crazy:
Делать EntityParent? Да вроде без толку... Поверхности доходят до меня медленнее, чем типы:SOS:

FireOwl 17.01.2012 19:33

Ответ: Вопрос про пошаговость...
 
А зачем его как-то по особому привязывать?
Танк размещен в координатах ячейки, все хорошо.
В любой момент можно по координатам танка вычислить и положение ячейки.

Krep_Kospit 17.01.2012 20:18

Ответ: Вопрос про пошаговость...
 
Цитата:

Сообщение от FireOwl (Сообщение 217085)
А зачем его как-то по особому привязывать?
Танк размещен в координатах ячейки, все хорошо.
В любой момент можно по координатам танка вычислить и положение ячейки.

ага... то есть мы берём EntityX, У и Z танка, а потом VertexX или TriangleVertex? то есть через взятые точки треугольника мы вычисляем, что танк между ними и его уже окончательно позиционируем как надо?
Или я не так понял "вычислить и положение ячейки"?:dontknow:

FireOwl 17.01.2012 20:50

Ответ: Вопрос про пошаговость...
 
Задача - разместить юнитов по клеткам?

Можно представить, что существует некая сетка,
середина нулевой ячейки - в координатах (0,0), а далее каждая воображаемая ячея занимает приблизительно 10 на 10 едениц (в чем там пространство трехмерное меряют).

Есть танк. Его надо поставить в ячейку (4,-2). Например.
Берем и через PositionEntity ставим его в такие координаты:
(x*width; y*height), где width и height - ширина и высота клеток.
(4*10; -2*10)
т.е.
(40, -20)
Готово. Танк в ячейке.

Обратный процесс обратен.
Есть танк, который болтается в мировом пространстве по координатам (-100, 40), например.
Берем и вычисляем, что это за ячейка:
(x/width; y/height)
(-10, 4)

А террайн, вместе с приляпаной к нему текстурой сетки, служит задником для математики.
Чисто для красоты и удобства зрителей.
Зачем привязывать модели танков к модели террайна?

Krep_Kospit 17.01.2012 21:33

Ответ: Вопрос про пошаговость...
 
Спасибо большое! логика стала понятной:)

Krep_Kospit 18.01.2012 00:56

Ответ: Вопрос про пошаговость...
 
Вот такой вопрос по поводу Pick террайна. В том месте, где я делаю CameraPick, создаётся конус и танк едет к нему.
http://rghost.ru/35961022/image.png (извините за вид:( )

Однако, если щёлкнуть в другом месте, например, у правого края окна, то конус создаётся на краю карты.
Кроме того, конус не хочет появляться во впадинах, а только над ними.

Код:

Function Cursor#(target,camera);cursor
xCursor= MouseX();
yCursor = MouseY()
DrawImage target,xCursor ,yCursor

If MouseHit(1) Then         
CameraPick (camera, xCursor ,yCursor)
Local pick=PickedEntity()

For tank.tank_platform = Each tank_platform;
tank\is_bot_active = 0

If pick>0 And tank\tank_chassi=pick And tank\is_player = 0 Then tank\is_bot_active = 1
If pick>0 And tank\is_player = 1 Then tank\is_player_active = 0 on_player=0
If pick>0 And tank\tank_chassi=pick And tank\is_player = 1 Then tank\is_player_active = 1 on_player=1; это неважно тут...
Next

ElseIf MouseHit(2) Then
CameraPick (camera, xCursor ,yCursor)
Local pickq=xPickedEntity()
For tank.tank_platform = Each tank_platform;
If tank\is_bot_active = 1 Then
If pickq>0 And pickq=terrain Then PositionEntity(tank\target_way, PickedX(),TerrainY(terrain, x,y,z),PickedZ()); вот тут идёт позиционирование конуса...
EndIf
Next


Nex 18.01.2012 07:10

Ответ: Вопрос про пошаговость...
 
Наверно так?
Код:

PositionEntity (tank\target_way, PickedX(),TerrainY (terrain,EntityX (tank\target_way,1),EntityY (tank\target_way,1),EntityZ (tank\target_way,1)),PickedZ())

Krep_Kospit 18.01.2012 16:06

Ответ: Вопрос про пошаговость...
 
Цитата:

Сообщение от Nex (Сообщение 217129)
Наверно так?
Код:

PositionEntity (tank\target_way, PickedX(),TerrainY (terrain,EntityX (tank\target_way,1),EntityY (tank\target_way,1),EntityZ (tank\target_way,1)),PickedZ())

Кстати да, только я её разложил на две части, так как тут выходило, что высота террайна бралась на старом месте. Спасибо, теперь танк едет в ямы :)
Правда, вопрос с непонятным перебросом конуса к краям террайна так и не решён, но это, скорее всего, из-за самого террайна... У меня поставлен EntityPick = 3, то есть по полигонам, а сам террайн загружен из карты высот. Может, тут-то и есть основа проблемы.

Nex 18.01.2012 16:17

Ответ: Вопрос про пошаговость...
 
3- это куб
2 - это полигоны
Код:

EntityPickMode terrain,2

Krep_Kospit 18.01.2012 20:57

Ответ: Вопрос про пошаговость...
 
Nex, я, это... Хорс подключил... в справке хорса наоборот стоит. 2 - куб, 3 - полигоны... В любом случае, с хорсом или в блитце такой косяк идёт :(
Если камера сверху поставлена, то такого нет, если перемещаю "перпендикулярно" террайну, то случается.


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

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