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

Dzirt 12.09.2010 17:20

Ответ: Вопрос-Ответ (для новичков)
 
Не совсем понял какая именно игра, но если звезды маленькие - то можно и двума - тремя тайлами все сделать. Если уже чето там посложней нужно, а не только ради декорации...то делай как уже задумал..там ничего сложного нету.
1.Делишь всю карту на сектора.
2.Присваиваешь каждому сектору определенное число сида.(если нужен организованый порядок, то растваляй сам и создавай банк данных)
3.Записываешь все это дело в нужный тебе документ(карта.тхт к примеру)
4.При потребности загружаешь все(ну к примеру звездолет, или че там у тебя, когда оказался в нужном секторе - программа загружает нужное расположение звезд. )

Sashka007 13.09.2010 21:06

Ответ: Вопрос-Ответ (для новичков)
 
Всем добрый вечер)

У меня есть вопрос вот, в командах ладшафта есть terrainheight, вроде так, которая возащает высоту террейна в точках X и Y. Допустим я сделал в максе ладшафт, экспортировал в б3д, загрузил, как мне узнать высоту ладшафта в точке Х и Y?

Sashka007 13.09.2010 21:20

Ответ: Вопрос-Ответ (для новичков)
 
Бльо, печатал с кпк в предыдущем посте, переведу на русский, допустим я сделал модель ладшафта в максе, загрузил в блитц, как мне узнать высоту ландшафта в точка Х и Y? Я знаю что в командах тиррейна есть terrainheight, но оно только для террейна...

Dzirt 14.09.2010 18:12

Ответ: Вопрос-Ответ (для новичков)
 
Ну можешь колизиями узнавать его высоту.

Ganociy 14.09.2010 20:24

Ответ: Вопрос-Ответ (для новичков)
 
Как отскалить Trimesh (PhysX)? Привычные Scale, MeshWidth... не помогают.

EvilChaotic 14.09.2010 21:06

Ответ: Вопрос-Ответ (для новичков)
 
Цитата:

Сообщение от Ganociy (Сообщение 162084)
Как отскалить Trimesh (PhysX)? Привычные Scale, MeshWidth... не помогают.

И не поможет.
Скейли тот меш, из которого считаешь тримеш.

Ganociy 14.09.2010 22:19

Ответ: Вопрос-Ответ (для новичков)
 
Блин... У меня блитцевский куб (CreateCube). СОздал куб, ScaleEntity cube... А потом (из учебника автомата по физ-х' у брал функцию создания тримеша) BodyCreateMesh(cube, 30). И (_|_) ...
Качу динамический шарик на на тримеш-куб, а шарик проходит через куб. Без маштабирования всё коллизится. Я через RemoteDebugger проверял в чём собака зарыта, так физ. оболочка меньше оболочки куба.

tormoz 15.09.2010 01:01

Ответ: Вопрос-Ответ (для новичков)
 
Цитата:

Сообщение от Ganociy (Сообщение 162114)
Блин... У меня блитцевский куб (CreateCube). СОздал куб, ScaleEntity cube... А потом (из учебника автомата по физ-х' у брал функцию создания тримеша) BodyCreateMesh(cube, 30). И (_|_) ...
Качу динамический шарик на на тримеш-куб, а шарик проходит через куб. Без маштабирования всё коллизится. Я через RemoteDebugger проверял в чём собака зарыта, так физ. оболочка меньше оболочки куба.

Цитата:

Скейли тот меш,
:wild:

Darksoul 26.09.2010 14:29

Ответ: Вопрос-Ответ (для новичков)
 
Перечитал эту тему, но ответа не нашел. Расскажите пожалуйста попунктно. Зд уровень для блитцЗд. Делаю отрезок улицы.

Я в максе сделал отдельно несколько домиков.
Конвертнул через пепилин в блиц. (b3d)
Там собрал воедеино.
Не очень удобно. Куча файов, куча текстур, бардак.

Теперь чел, который пишет код, сказал, что есть прога Cartography Shop. в которой можно раставить флаги на объекты (пол, стена, дверь)
Скачал прогу, она не поддержывает импорт из макса.. она вообще не поддержывает импорт...

Теперь вопрос, если я слеплю весь уровень в максе, как мне поставить галочки на обьектах (так же как Cartography Shop)?

Или, мы с челом, вообще все не правильно делаем?:4to:

Program23 26.09.2010 15:00

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

Kudesnic 28.09.2010 04:07

Ответ: Вопрос-Ответ (для новичков)
 
Darksoul
Чтобы импортировать объекты в CartographyShop используй прогу PrefabMaker

RlexGm 28.09.2010 18:45

Ответ: Вопрос-Ответ (для новичков)
 
У меня с прогой был конвертер моделей в .csm(название сказано выше) , а вообще имхо динамические объекты отдельно делать, а не динамические как единый объект, а если загружать как аниммеш то будет хуже(не динамические объекты будут грузиться по одному вроде как)

baton4ik 28.09.2010 19:20

Ответ: Вопрос-Ответ (для новичков)
 
Цитата:

Сообщение от Darksoul (Сообщение 163240)
Перечитал эту тему, но ответа не нашел. Расскажите пожалуйста попунктно. Зд уровень для блитцЗд. Делаю отрезок улицы.

Я в максе сделал отдельно несколько домиков.
Конвертнул через пепилин в блиц. (b3d)
Там собрал воедеино.
Не очень удобно. Куча файов, куча текстур, бардак.

Теперь чел, который пишет код, сказал, что есть прога Cartography Shop. в которой можно раставить флаги на объекты (пол, стена, дверь)
Скачал прогу, она не поддержывает импорт из макса.. она вообще не поддержывает импорт...

Теперь вопрос, если я слеплю весь уровень в максе, как мне поставить галочки на обьектах (так же как Cartography Shop)?

Или, мы с челом, вообще все не правильно делаем?:4to:

Давай объектам на сцене уникальные имена. Допустим у меня на сцене есть объект - лопасть мельницы. Я называю её rot+2+0+0
А код разделяет модель на чайлды, видит имя "rot+2+0+0" и записывает модель в тип rotate. И каждый проход цикла поворачивает лопасть на +2 +0 +0

RlexGm 06.10.2010 14:08

Ответ: Вопрос-Ответ (для новичков)
 
тупой вопрос, как грузить шрифты:-D
смотрел в хелпе типа

fntArial=LoadFont("Arial",15)
SetFont fntArial
Раньше мне это было не надо и я не обращал внимания...

Но не давно я менял название шрифта, причем какое название не поставишь шрифт тотже:-D

IGR 08.10.2010 18:26

Ответ: Вопрос-Ответ (для новичков)
 
Цитата:

Но не давно я менял название шрифта, причем какое название не поставишь шрифт тотже
перед текстом вызывай SetFont NEWfnt - т.е. тот фонт который те нужен !! а то ты 1 раз активировал фонт и ним все пишется !!

RlexGm 08.10.2010 20:50

Ответ: Вопрос-Ответ (для новичков)
 
да я так и делаю
Graphics3D 800,600,32,1
SetBuffer BackBuffer()
Global ArialCyr=LoadFont("ArialCyr",15)
Global Arial=LoadFont("Arial",15)

Global Block=LoadFont("42854.ttf",15)
While Not KeyDown(1)
SetFont Arial
Text 10,25,"Arial "+"english "+"русский"
SetFont ArialCyr
Text 10,45,"ArialCyr "+"english "+"русский"

SetFont Block
Text 10,65,"Block "+"english "+"русский"
Flip
Wend
End

Arles 09.10.2010 08:38

Ответ: Вопрос-Ответ (для новичков)
 
А ты уверен что ArialCyr есть в твоих шифтах?
К тому же так делать нельзя: LoadFont("42854.ttf",15)

RlexGm 09.10.2010 09:35

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

Arles 09.10.2010 10:08

Ответ: Вопрос-Ответ (для новичков)
 
таким образом, в б3д, шрифты подключать вообще нельзя, он обязательно должен находиться в папке "fonts"

tormoz 09.10.2010 17:30

Ответ: Вопрос-Ответ (для новичков)
 
Цитата:

Сообщение от Arles (Сообщение 164123)
таким образом, в б3д, шрифты подключать вообще нельзя, он обязательно должен находиться в папке "fonts"

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

шрифт не будет грузится:
если его имя совпадает с уже существующим
если шрифт не подходит к блитцу по структуре

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

Arles 09.10.2010 22:51

Ответ: Вопрос-Ответ (для новичков)
 
Цитата:

Сообщение от tormoz (Сообщение 164140)
Наверно я что то делаю непрально
у меня все нормально грузится из папки игры

Черт, все время считал иначе.. жаль в хелпе про это ничего не сказано((

Kudesnic 10.10.2010 05:49

Ответ: Вопрос-Ответ (для новичков)
 
Как определить, находится ли объект внутри заданного бокса (в 3D) ?
То есть моем случае мне нужно определить, находится ли игрок в нужном мне помещении. Действие происходит в невесомости.

KOPCAP 11.10.2010 05:01

Ответ: Вопрос-Ответ (для новичков)
 
ну координатный метод подойдет =) if EntityX(player) > EntityX(box)+widthbox/2 And ... и так далее где player игрок, box - область, widthbox соответсвенно ширина коробки, потом еще 5 проверок и все.
Это конечно, если бокс не повернут..


Кстати у меня вопрос, можно ли стандартными методами b3d сделать коллизию box and box? а то у них все сфера да сфера...Я просто дня 2-3 назад снова сел за программирование, и решил для разминки написать что-то типа езды по городу машинкой, а вот столкновения тупые получились машина ну ни как на сферу не подходит, а метод "сфера - полигон"...

Nex 11.10.2010 08:18

Ответ: Вопрос-Ответ (для новичков)
 
А EntityBox?

KOPCAP 11.10.2010 16:17

Ответ: Вопрос-Ответ (для новичков)
 
Хм.. Не знал, спасибо! Помогло.

Nex 11.10.2010 17:06

Ответ: Вопрос-Ответ (для новичков)
 
Как к кваду прицепить коллизию?
EntityRadius пытался, но не работает. :)

KOPCAP 11.10.2010 18:50

Ответ: Вопрос-Ответ (для новичков)
 
Значит не робит? Я просто понадеялся на ваш опыт))) не проверял, к квадрату я цеплял колизию по углам, напихал на них пивот и настроил чтоб пивоты постоянно на углах держались... ух намучался с этим быдлокодом, но по другому пока не умею...

Nex 12.10.2010 07:23

Ответ: Вопрос-Ответ (для новичков)
 
квад - это не квадрат. Это плоскость состоящая из двух треугольников
Код:

Function CreateQuad (tex$,flag%=1)
    quad = CreateMesh()
          b = LoadBrush (tex,flag)
          s = CreateSurface (quad,b)
        v0 = AddVertex (s,-4,0,4,0,0)
        v1 = AddVertex (s,4,0,4,1,0)
        v2 = AddVertex (s,4,0,-4,1,1)
        v3 = AddVertex (s,-4,0,-4,0,1)
                AddTriangle (s,v0,v1,v2)
                AddTriangle (s,v0,v2,v3)
        Return quad
End Function


KOPCAP 13.10.2010 15:47

Ответ: Вопрос-Ответ (для новичков)
 
Хм.. ясно, слушай я не разобрался с EntityBox указываю параметры куба, а в итоге получаю сферу с радиусом 1 =( вот код создания энтити:
Код:

Function new_car(mes$, speed#, startx#, startz#, startangle, rk#, acs#)
  Local cx.car
  cx = New car
  cx\mesh=LoadMesh(mes)
  cx\spd=speed
  cx\angle=startangle
  cx\kofang=rk
  cx\acselerate=acs
  cx\cspd=0
  MoveEntity cx\mesh, startx,0,startz
  ScaleEntity cx\mesh, .2,.2,.2
  EntityColor cx\mesh, Rnd(1,255),Rnd(1,255),Rnd(1,255)
  RotateEntity cx\mesh, 0, startangle, 0
  EntityType cx\mesh, CAR_COL
  EntityBox cx\mesh, -1,0,2,4,2,3
End Function


Kudesnic 14.10.2010 23:42

Ответ: Вопрос-Ответ (для новичков)
 
Цитата:

ну координатный метод подойдет =) if EntityX(player) > EntityX(box)+widthbox/2 And ... и так далее где player игрок, box - область, widthbox соответсвенно ширина коробки, потом еще 5 проверок и все.
Это конечно, если бокс не повернут..
Именно таким способом воспользовался.Спасибо
Бокс может быть повернут, но тогда игрока к нему нужно "привязывать", на время вычисления :)

Colossus 15.10.2010 05:13

Ответ: Вопрос-Ответ (для новичков)
 
киньте кто нить пример с контурированием обьектов...

Randomize 15.10.2010 16:25

Ответ: Вопрос-Ответ (для новичков)
 
Цитата:

Сообщение от Colossus (Сообщение 164684)
киньте кто нить пример с контурированием обьектов...

PHP код:

Function Cel_Shade(Shaded_EntityOutlineScale#=0.025, r#=0, g#=0, b#=0)
    
Local Outline_Entity CopyMesh(Shaded_Entity)         
    
UpdateNormals(Outline_Entity
    
EntityFX(Outline_Entity1+8)
    
    
    
Local i
    
For 1 To CountSurfaces(Outline_Entity)
        
        
Local surf GetSurface(Outline_Entityi)
        
Local j
        
        
For 0 To CountVertices(surf) - 1
            Local Vx
#  = VertexX#(surf, j)
            
Local Vy#  = VertexY#(surf, j)
            
Local Vz#  = VertexZ#(surf, j)
            
Local VNx# = VertexNX#(surf, j)
            
Local VNy# = VertexNY#(surf, j)
            
Local VNz# = VertexNZ#(surf, j)
            
VertexCoords (surfjVx#+(VNx#*OutlineScale#), Vy#+(VNy#*OutlineScale#), Vz#+(VNz#*OutlineScale#))
        
Next
        
    Next
    
    FlipMesh Outline_Entity
    EntityColor Outline_Entity
rgb
    PositionEntity Outline_Entity
EntityX#(Shaded_Entity, True), EntityY#(Shaded_Entity, True), EntityZ#(Shaded_Entity, True)
    
EntityParent Outline_EntityShaded_Entity
End 
Function 


Nex 16.10.2010 15:58

Ответ: Вопрос-Ответ (для новичков)
 
Randomize, еще желательно добавить. :)
Код:

RotateEntity Outline_Entity,EntityPitch (Shaded_Entity, True),EntityYaw (Shaded_Entity, True),EntityRoll (Shaded_Entity, True)

KOPCAP 23.10.2010 06:39

Ответ: Вопрос-Ответ (для новичков)
 
Народ, у меня проблема с рандомом, короче вот код:
в офтопе, по тому что большой..
Код:

Graphics3D 800,600,16, 1
SetBuffer BackBuffer()

MoveMouse GraphicsWidth()/2, GraphicsHeight()/2
camera=CreateCamera()
CameraViewport camera,0,0,800,600
MoveEntity camera, 0, 10,-10
TurnEntity camera, 50,0,0
light=CreateLight()
RotateEntity light, 23,127,98
plane=CreatePlane()
cur=LoadImage("cursor.png")

Global unid#=1

Type unit
        Field tip$, team, dmg, range, mesh, state, oldx#, oldz#, speed#, rel#, rx#, rz#, sel, id
End Type
; type of insect, team of ins., damage of ins., model of ins., state(0=stay, 1=run, 2=attack, 3=death),
; last position of ins(x,z), reload speed, real position of ins(x,z), select of unit 0/1
Type mur
  Field team, tip, mesh, dmg, rel#, range, sel, id
End Type

Function make_mur(x#, z#, ty, te, id)
  m.mur = New mur
  m\team=te
  m\id=id
  If (ty=1) Then
    m\mesh=LoadMesh("mur_01.3ds")
    PositionEntity m\mesh, x,0,z
    m\dmg=10
    m\range=7
    m\rel=0.5
  EndIf
  If (te=1) Then
    EntityColor m\mesh, 255,0,0
  EndIf
End Function

Function make_unit(x#, z#, te, ty, tx#, tz#, id)
  unid=unid+1
  un.unit = New unit
  un\tip=ty
  un\id=id
  un\team=te
  un\mesh=CreateCube()
  PositionEntity un\mesh, x, 0, z
  un\oldx=x
  un\oldz=z
  un\rx=tx
  un\rz=tz
  If(ty=1) Then
    ScaleEntity un\mesh, 1,0.5,0.25
    un\dmg=2
    un\range=3
    un\speed=0.2
    un\rel=0.5
  EndIf
  If(te=1) Then
    EntityColor un\mesh, 255,0,0
  EndIf
  If x<>tx Or z<>tz Then
  un\state=1
  Else
  un\state=0
  EndIf
End Function

Function move_unit()
  For un.unit = Each unit
    pivot=CreatePivot()
    MoveEntity pivot, un\rx,0,un\rz
    If (EntityDistance(un\mesh, pivot)>1) Then
      If (un\rx-un\oldx)<0 Then
        ang=180
      Else
        ang=0
      EndIf
      sn#=un\rz-un\oldz
      cn#=un\rx-un\oldx
      RotateEntity un\mesh, EntityPitch(un\mesh),ATan(sn/cn)+ang,EntityRoll(un\mesh)
      MoveEntity un\mesh, un\speed, 0,0
      un\oldx=EntityX(un\mesh)
      un\oldz=EntityZ(un\mesh)
    Else
      un\oldx=un\rx
      un\oldz=un\rz
      un\state=0
    EndIf
    FreeEntity pivot
  Next
End Function

Function produse_unit(id, ty)
  For m.mur = Each mur
    If (m\id=id) Then
      make_unit(EntityX(m\mesh),EntityZ(m\mesh), m\team, ty, EntityX(m\mesh)-5, EntityZ(m\mesh), unid)
    EndIf
  Next
End Function

While Not KeyHit(1)

SeedRnd MilliSecs()

If (MouseX()<5) Then
  MoveEntity camera, -0.2,0,0
  MoveMouse 4, MouseY()
EndIf

If (MouseX()>GraphicsWidth()-5) Then
  MoveEntity camera, 0.2,0,0
  MoveMouse GraphicsWidth()-4, MouseY()
EndIf

If (MouseY()<5) Then
  PositionEntity camera, EntityX(camera),EntityY(camera),EntityZ(camera)+0.2
  MoveMouse MouseX(), 4
EndIf

If (MouseY()>GraphicsHeight()-5) Then
  PositionEntity camera, EntityX(camera),EntityY(camera),EntityZ(camera)-0.2
  MoveMouse MouseX(), GraphicsHeight()-4
EndIf

If KeyDown(17) Then
  PositionEntity camera, EntityX(camera),EntityY(camera),EntityZ(camera)+0.1
EndIf

If KeyDown(30) Then
  MoveEntity camera, -0.1,0,0
EndIf

If KeyDown(31) Then
  PositionEntity camera, EntityX(camera),EntityY(camera),EntityZ(camera)-0.1
EndIf

If KeyDown(32) Then
  MoveEntity camera, 0.1,0,0
EndIf

If KeyHit(18) Then
  make_mur(0,0,1,1,1)
EndIf

If KeyHit(16) Then
  produse_unit(1,1)
EndIf

move_unit()

For un.unit = Each unit
 If(Rnd(1,1000)<=2)  And (un\state=0) Then
  If un\state=0 Then
  un\rx=un\oldx+Rnd(-5,5)
  un\rz=un\oldx+Rnd(-5,5)
  If (un\rx+un\rz)*(un\rx*un\rz)<>0 Then
    un\state=1
  EndIf
  EndIf
 EndIf
Next

For un.unit = Each unit
  For un2.unit= Each unit
    If EntityDistance(un\mesh, un2\mesh)<1 And un\id<>un2\id And un\state=0 Then
      un\rx=un\oldx+Rnd(-2,2)
      un\rz=un\oldx+Rnd(-2,2)
      un\state=1
    EndIf
  Next
  For m.mur = Each mur
    If EntityDistance(un\mesh, m\mesh)<2 And un\state=0 Then
      un\rx=un\oldx+Rnd(-5,5)
      un\rz=un\oldx+Rnd(-5,5)
      un\state=1
    EndIf
  Next
Next

Cls
UpdateWorld
RenderWorld
DrawImage cur,MouseX(),MouseY()
Flip
Wend
End


В чем вообще суть, пока что есть немного, нужно нажать "У" , создастся новый типа муравейник, нажать "Й" из него выйдет юнит. Если юниты слижком близко друг к другу то передвигаться в в рандомную точку области 4х4 с центром где находится юнит, короче юнит в центре этой области. суть в чем, когда я закликиваю "й" то юниты толкаются, стараются распредилиться равномрно, только вот распределяются они почему-то по линии ну примерно по линии под 45 градусов, линия проходит через 0,0 на координатной плоскости, подскажите в че тут казус? или альтернативный спосо выбора рандомного направления...
Заранее извиняюсь за быдлокод))) т.к. в Блитце сравнительно недавно...

LLI.T.A.L.K.E.R. 23.10.2010 14:38

Ответ: Вопрос-Ответ (для новичков)
 
Цитата:

un\rx=un\oldX+Rnd(-5,5)
un\rz=un\oldX+Rnd(-5,5)
на rz стоит тоже oldX
верно будет так
Цитата:

un\rx=un\oldX+Rnd(-5,5)
un\rz=un\oldZ+Rnd(-5,5)
SeedRnd (MilliSecs()) тоже пригодится

KOPCAP 25.10.2010 11:33

Ответ: Вопрос-Ответ (для новичков)
 
Спасибо) при копировании видать поменять забыл.. Теперь все работает. Да,SeedRnd (MilliSecs()) ставил, результат один и тотже, оставлю так...

Colossus 25.10.2010 20:35

Ответ: Вопрос-Ответ (для новичков)
 
Рандомиз, а если перевести код в Ксорс то ругается на строчку

Код:

For j = 0 To xCountVertices(surf) - 1
МаВом ругается...:(

EvilChaotic 25.10.2010 21:25

Ответ: Вопрос-Ответ (для новичков)
 
Цитата:

Сообщение от Colossus (Сообщение 165994)
Рандомиз, а если перевести код в Ксорс то ругается на строчку

Код:

For j = 0 To xCountVertices(surf) - 1
МаВом ругается...:(

Найт выражает то, что думает о тебе через ксорс!
Ну и правильно, я бы тоже тебя послал вот за это:
Код:

For i = 1 To xCountSurfaces(Outline_Entity) ??
Ты передаешь в функцию xCountVertices несуществующий сюрфейс!
В ксорсе все порядковые номера начинаются не с 1цы, как в б3д - а с 0.

Colossus 25.10.2010 22:37

Ответ: Вопрос-Ответ (для новичков)
 
спасибо доктор, мне уже полегчало

DeeJex 27.10.2010 23:38

Ответ: Вопрос-Ответ (для новичков)
 
У меня такая проблема: гружу аним меш, ставлю ему EntityOrder -1, ничего не происходит, ставлю его чилдам рекурсивно это значение:
Код:

Function EntityOrderCh(ent,ord)
EntityOrder ent,ord
For i = 1 To CountChildren(ent)
tmp_ch = GetChild(ent,i)
EntityOrder tmp_ch,ord
If CountChildren(tmp_ch) Then EntityOrderCh tmp_ch,ord
Next
End Function

Но вот в чем проблема: чилды не пересекаются друг с другом, они тупо перекрывают друг друга. Что делать?
upd
Мда, в справке написано, что у кого order<>0, у того не работает z-буфферизация... мб есть какой-то выход?
upd2
Решил проблему вот как: разделил интити на слои, которые рендерятся по очереди (да, немного теряется производительность, но других вариантов нет)
Код:

Type TIOrder
Field ent,layer
Field hided
End Type

Function IOM(entity,layer=0) ;Запоминает интити
IOrder.TIOrder = New TIOrder
IOrder\ent = entity : IOrder\layer = layer
End Function

Function RenderWorldZ()
For IOrder.TIOrder = Each TIOrder
        IOrder\hided = BB_EntityHidden(IOrder\ent) ;ACHTUNG! Требуется библиотека blitz3d.dll, выкладывать не буду, ищите на 3dcom.3dn.ru
Next
For i = 0 To 1
For IOrder.TIOrder = Each TIOrder
        If IOrder\layer<>i Then HideEntity IOrder\ent
        If IOrder\layer=i And IOrder\hided=0 Then ShowEntity IOrder\ent
Next
RenderWorld
Next

For IOrder.TIOrder = Each TIOrder
If IOrder\hided = 1 Then HideEntity IOrder\ent Else ShowEntity IOrder\ent
Next

End Function


LLI.T.A.L.K.E.R. 28.10.2010 17:57

Ответ: Вопрос-Ответ (для новичков)
 
Создал для врагов и пулей - типы с фиелдом для мешей
PHP код:

Type EnemyType
Field Model
End Type

Type ShotsType
Field Model
End Type 

For i=1 To 2
Enemy.EnemyType=New EnemyType
Enemy\Model=CreateCube()
Next

Создал врагов и пули (при стрельбе)
Настроил Collisions-ы: SolidEnemy и т.п.

; -код проги-
; **************

For Shot.ShotsType=Each ShotsType
If EntityCollided(Shot\Model,SolidEnemy)
FreeEntity EntityCollided(Shot\Model,SolidEnemy) ; - удаляет модель врага с которой столкнулась пуля... отсюда вопрос
; так же ошибка выходит при привязке TempCollidedEnt=EntityCollided(Shot\Model,SolidEne my) - пробел ошибка форума
; а это помогло бы, например для: FreeEntity TempCollidedEnt
EndIf
Next

Вопрос:
В том месте удаляется модель (Enemy\Model), а как удалить тот Enemy, чья эта модель..
Знаю, что - Delete Enemy
Но как у модели EntityCollided(Shot\Model,SolidEnemy) определить прикрепляемый тип?

Артем Валерьевич 28.10.2010 18:02

Ответ: Вопрос-Ответ (для новичков)
 
еще один перебор, только теперь тип енеми перебирать
Код:

For Shot.ShotsType=Each ShotsType
For Enemy.EnemyType=Each EnemyType

If EntityCollided(Shot\Model,SolidEnemy)
FreeEntity EntityCollided(Shot\Model,SolidEnemy) ; - удаляет модель врага с которой столкнулась пуля... отсюда вопрос

EndIf
Next
Next


Program23 28.10.2010 18:03

Ответ: Вопрос-Ответ (для новичков)
 
Бредовый *овнокод.Надо тем более лучше Hideentity делать.Я в не состоянии разобрать далее...

Randomize 28.10.2010 18:31

Ответ: Вопрос-Ответ (для новичков)
 
EntityCollided? Неееет! Да вычто? Этож мега лаг.
Юзайте тупо EntityDistance и тормозов не будет.

LLI.T.A.L.K.E.R. 28.10.2010 18:34

Ответ: Вопрос-Ответ (для новичков)
 
HideEntity - оставляет "прах" данных в памяти??

Мне нужно очищать от временно (а может и нет) не нужных данных.

Сделал так:

For Shot.ShotsType=Each ShotsType ; проверка каждой Пули
If EntityCollided(Shot\Model,SolidEnemy) ; если Пуля столкнулась с Врагом
CollidedModel=EntityCollided(Shot\Model,SolidEnemy ) ; привязка столкнувшегося Нужнего Врага
For Enemy.EnemyType=Each EnemyType ; проверка на каждого врага
If CollidedModel=Enemy\Model Then ; если Нужный Враг = переборный Враг
FreeEntity Enemy\Model ; удаляем модель Врага
Delete Enemy ; очищаем, удаляеам данные Врага
Exit
; сделано - выходим из перебора

EndIf
Next
EndIf
Next

Попробую исправлять на EntityDistance.

moka 29.10.2010 20:49

Ответ: Вопрос-Ответ (для новичков)
 
Перебор в переборе.
Получается чем больше пуль, и чем больше врагов, тем больше переборов и проверок на поподание.
Если у нас 10 пуль, и 10 врагов, это 100 переборов. А если я на пулемёте и стреляю сдалека по кучке врагов, 350 пулей, многие из них уже давно пролетели и промахнулись, а врагов 40, то это 14,000 переборов!
Внедряй разделения по местности и не используй глобальных списков.
В Блице хотябы храни локации как массив, и проверяй локацию которая разделена на квады, пули, с той же и прилегающих локаций монстрами. Таким образом не нужно держать всё.
К сожалению в Блице списков как таковой нету (загнать хандлы в массив? геморой).
И подобные вещи реализовать большая головная боль..
ЗЫ, если новичёк не слушайте всё что написал в этом посте ;)

is.SarCasm 29.10.2010 23:32

Ответ: Вопрос-Ответ (для новичков)
 
Цитата:

EntityCollided? Неееет! Да вычто? Этож мега лаг.
Юзайте тупо EntityDistance и тормозов не будет
Я бы переделал:
Blitz3d? Неееет! Да вычто? Этож мега лаг.
Юзайте тупо НЕ Blitz3d и тормозов не будет

baton4ik 29.10.2010 23:38

Ответ: Вопрос-Ответ (для новичков)
 
Зачем же так критично? Не так давно ты и сам считал блитц классным движком. Но пошли темы "блитц устарел! нужен новый движок". Зачем же так кардинально менять взгляды под влиянием других? Пусть блитц и устарел, он остаётся замечательным средством обучения для новичков. А для казуалок блитц и вовсе не устарел

is.SarCasm 29.10.2010 23:49

Ответ: Вопрос-Ответ (для новичков)
 
Не хочу устраивать дискуссии на эту тему здесь. (хотя сейчас у меня такой инет, что я не могу позволить себе скайп или асю :)))

DeeJex 30.10.2010 01:34

Ответ: Вопрос-Ответ (для новичков)
 
Цитата:

Blitz3d? Неееет! Да вычто? Этож мега лаг.
Юзайте тупо НЕ Blitz3d и тормозов не будет
В умелых руках блиц творит чудеса, кто жалуется на глюки/лаги просто не умеет им пользоваться/не знает его особенностей.

Gector 30.10.2010 15:12

Ответ: Вопрос-Ответ (для новичков)
 
Частично согласен с DeeJex. Блиц конечно чудес не творит и особенности у него, надо сказать, весьма сомнительные. Просто надо понимать, что не для каждой игры он сгодиться. Выбирать движок-то нужно исходя из дизайна. К примеру Stone Of Destiny. Тот же блиц. А игра висела в топах бигфиша. Для стрелялок он не очень. А вот пошаговые какие-нибудь или казуалки вполне потянет.


LLI.T.A.L.K.E.R.
Делал такие вещи. Слушай Moka). Только так и возможно. Hideentity - лесом. Проверка к дистанцией тоже норм способ. Только если хочешь чтобы пуля пролетала "подмышкой" (к примеру))) здесь он не подойдет.

DeeJex 04.11.2010 00:27

Ответ: Вопрос-Ответ (для новичков)
 
За меня все скажет скриншот:

upd
Не понимаю что это за хрень, никак не получается исправить :(

Colossus 04.11.2010 04:53

Ответ: Вопрос-Ответ (для новичков)
 
ну думаю Команда разработчиков Xors3d выпустит Блицу достойную замену)) если сейчас много чего полезного реализовано)) то в дальнейшем думаю Хорс станет самостоятельным движком со всякими полезными фичами ))

moka 04.11.2010 20:16

Ответ: Вопрос-Ответ (для новичков)
 
Он и так вполне самостоятельный.
Но про рост, тут спорно. Развивать ту структуру которая сейчас у Ксорса, я лично не вижу смысла. Нужно двигаться вперёд, и смотреть на более современные структуры построения движков.

LLI.T.A.L.K.E.R. 05.11.2010 00:19

Ответ: Вопрос-Ответ (для новичков)
 
Цитата:

Сообщение от DeeJex (Сообщение 166988)
За меня все скажет скриншот:

upd
Не понимаю что это за хрень, никак не получается исправить :(

Может:
pxBodyCreateHull(tmp_m,4.0) - хрень BodyCreateHull(mesh%,mass# = float)\

% - это целое число
# - число с точкой

Randomize 05.11.2010 00:45

Ответ: Вопрос-Ответ (для новичков)
 
Цитата:

Сообщение от LLI.T.A.L.K.E.R. (Сообщение 167110)
Может:
pxBodyCreateHull(tmp_m,4.0) - хрень BodyCreateHull(mesh%,mass# = float)\

% - это целое число
# - число с точкой

:/ И что? Преобразование Int в Float происходит безболезненно. Всегда. Везде.

DeeJex 05.11.2010 01:03

Ответ: Вопрос-Ответ (для новичков)
 
Какие же мы все слепые - я по ошибке в начале команды px подставил :D

DeeJex 06.11.2010 23:03

Ответ: Вопрос-Ответ (для новичков)
 
Вот есть у меня функция, проверяющяя, находится ли объект ногами на поверхности
Код:

Function GetStayOn(x1,y1,z1,pitch1,yaw1,roll1,x2,y2,z2) ;Где x/y/z2 - коорд. поверхности
tmp_p1 = CreatePivot()
PositionEntity tmp_p1,x1,y1,z1
RotateEntity tmp_p1,pitch1*90,yaw1*90,roll1*90
MoveEntity tmp_p1,0,-1,0

tmp_p2 = CreatePivot()
PositionEntity tmp_p2,x2,y2,z2

If EntityX(tmp_p1)=EntityX(tmp_p2) And EntityY(tmp_p1)=EntityY(tmp_p2) And EntityZ(tmp_p1)=EntityZ(tmp_p2) Then tmp_true=1

FreeEntity tmp_p1
FreeEntity tmp_p2

If tmp_true Then Return 1

End Function

Проверяем:
Код:

GetStayOn(0,1,0,0,0,0,0,0,0)
Результат: 1.
Ставим вверх ногами:
Код:

GetStayOn(0,0,0,2,0,0,0,1,0)
Результат: 0. А должно быть 1. Что не так?

Hurrit 06.11.2010 23:27

Ответ: Вопрос-Ответ (для новичков)
 
Ну всё правильно, стоит головой на поверхности, значит ноль. У тебя моделька?

DeeJex 06.11.2010 23:32

Ответ: Вопрос-Ответ (для новичков)
 
Цитата:

Ну всё правильно, стоит головой на поверхности,
не-а, читай внимательно: GetStayOn(0,0,0,2,0,0,0,1,0), ногами упорот в поверхность. Дебагом выяснил, что при расчетах функции результат получается неадекватный.
Цитата:

У тебя моделька?
Не имеет значения, расчет по клеткам.

EvilOkta 08.11.2010 21:43

Ответ: Вопрос-Ответ (для новичков)
 
Всем привет, у меня такой вопрос. Каким образом можно вставить в Blitz3D (в команду Text) возможность написать символ из таблицы символов имеющий юникод(? если это конечно называется юникодом))).
Скажем обычный текст:
Text 100,100 "Hello Hell!"
То что требуется:
Text 100,100 "╬" (символ под кодом U+256C)

Reks888 08.11.2010 22:22

Ответ: Вопрос-Ответ (для новичков)
 
Text 100,100,Chr(KeyCode), где KeyCode - значение твоего символа в ASCII от 0 до 255. Если в ASCII нету, то не ко мне.
Я точно помню что такая перекрестная фигня в ASCII есть, где-то между 200 и 255, в самом конце.

EvilOkta 08.11.2010 23:07

Ответ: Вопрос-Ответ (для новичков)
 
Идея интересная спасибо ))
Только один минус... в блитце как я понял идет поддержка кодировки 1251, а нужный мне символ (да и другие интересные символы) в кодировке 866
например тот самый злополучный "╬" который имеет chr(206) в блитце переиначивается как "О"
есть идеи как сменить кодировку для выдергивания символов?

Reks888 08.11.2010 23:35

Ответ: Вопрос-Ответ (для новичков)
 
шрифты?
С такой же проблемой сталкивались разрабы Dwarf Fortress. Их решением были картинки, тоесть они имели графический шрифт для всех используемых в игре символов


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

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