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)

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) определить прикрепляемый тип?


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

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