forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   3D-программирование (http://forum.boolean.name/forumdisplay.php?f=12)
-   -   Как сделать в 3ds MAX карту с настроенной физикой и партиклами? (http://forum.boolean.name/showthread.php?t=15638)

Markova 11.10.2011 20:58

Как сделать в 3ds MAX карту с настроенной физикой и партиклами?
 
Подскажите пожалуйста, как он так всё заскриптовал http://uart.nxt.ru/ZQCODEDEMO.rar
как мне также сделать, чтобы через 3d max сделал карту для игры, и оп она уже с физикой
и со всеми примочками типа партикли.:4to:

H@NON 11.10.2011 21:25

Ответ: Подскажите пожалуйста
 
В названии мешей в 3дМаксе пишешь что ты от них хочешь(например эмиттер огня или боди-коробка). А потом расшифровываешь это в блитце и применяешь нужные команды.

Nerd 11.10.2011 21:33

Ответ: Подскажите пожалуйста
 
Используй тэги в названиях объектов.
Код:



Function CheckTag$(var$,tag$)
Local tmp_l1,tmp_l2
If Not Instr(var,"["+tag+"]") Then Return "0"
If Not Instr(var,"[/"+tag+"]") Then
Return "1"
Else
tmp_l1 = Instr(var,"["+tag+"]") + Len("["+tag+"]")
tmp_l2 = Instr(var,"[/"+tag+"]") - tmp_l1
Return Mid(var,tmp_l1,tmp_l2)
End If
End Function

Понимает тэги вида [test] (возвращает "0" или "1") и [test]10[/test] (возвращает то, что внутри тэга)

Markova 11.10.2011 21:37

Цитата:

В названии мешей в 3дМаксе пишешь что ты от них хочешь(например эмиттер огня или боди-коробка). А потом расшифровываешь это в блитце и применяешь нужные команды.
это я понял, а вот скрипы как сделаны я не понял и как он команды размножает?
Enter_JointBall]Auto]Celind1]Celind2]0]-1]0]
\\
Enter_JointBall]Auto]Celind2]Celind3]0]-1]0]
\\
Enter_JointBall]Auto]Celind3]Celind4]0]-1]0]
как это вообще работает “скрипы”

UPD:
Используй тэги в названиях объектов. что это?

Randomize 11.10.2011 21:51

Ответ: Подскажите пожалуйста
 
Вот тут есть некоторое количество информации
http://forum.boolean.name/showpost.p...83&postcount=6

LLI.T.A.L.K.E.R. 11.10.2011 22:02

Ответ: Подскажите пожалуйста
 
Я поясню так (человеческими, детскими понятиями):

Цитата:

Допустим ты в 3ДМаксе нарисовал пол (назвал его Plane)
Добавил 30 шариков (назвал их Ball)

В Blitz3D предоставленным кодом можно, например, закрасить как хочешь.

Ищешь в загруженной модели своей игры:
Plane - закрашиваешь зелёным цветом (это будет пол, земля)

Ищешь все шарики:
Ball - закрашиваешь серым цветом (это будут камни)

Можно также применять текстуры на них. Можно что угодно.
Дата рождения:
1 January 1965
Возраст:
46

Хотя я наверное это зря... детскими...


Я хотел вот что спросить.. Входит ли в полномочия модераторов - переименовывать названия тем на более подходящее к вопросу темы?
Или это уже вроде как "нарушение конституционных прав пользователей" или "за каждой темой следить - запаришься"?

Randomize 11.10.2011 22:09

Ответ: Подскажите пожалуйста
 
Теоретики. Ни какой конкретики.

Вот же: http://forum.boolean.name/showpost.p...15&postcount=5

LLI.T.A.L.K.E.R. 11.10.2011 22:12

Ответ: Подскажите пожалуйста
 
Цитата:

Сообщение от Randomize (Сообщение 205521)
Теоретики. Ни какой конкретики.

Вот же: http://forum.boolean.name/showpost.p...15&postcount=5

Ну не знаю.. Каждый ли осилит (с 2мя сообщениями, скорее всего новичок) такое вот:
Рекурсивный пробег по чилдам:
2-3 года назад я бы оXY.. :4to:

Markova 11.10.2011 22:13

Ответ: Подскажите пожалуйста
 
То есть мне надо делать так
Код:

Function ApplyChild(child)
    Local name$=Lower(EntityName(child))
    If Instr(name$,"startplaer")>0 Then
  filein = ReadFile("startpaer.dat")
    x# = ReadFloat( filein )
    y# = ReadFloat( filein )
    z#= ReadFloat( filein )
PositionEntity plaer,x#,y#,z#
CloseFile( filein )
    EndIf
    If Instr(name$,"shield")>0 Then
        ; ставим броню в месте этого чилда
    EndIf
    If Instr(name$,"enemy")>0 Then
        ; ставим врага в месте этого чилда
    EndIf
End Function


Randomize 11.10.2011 22:19

Ответ: Подскажите пожалуйста
 
Примерно так:

PHP код:

Тут грузим модель твоего уровня
Обрати внимание что тут используется LoadAnimMesh
Если грузить через LoadMesh то у нас весь уровень будет единой модельюа нам надо другое

Global LEVEL LoadAnimMesh("MyLevel.b3d")

Наш уровень загружен и теперь можно пробежаться по его кускам (Чилдам)
SeekChilds(LEVEL)


Эта ф-ция перебирает все куски уровня
Function SeekChilds(ent)  
    
Local ichild 
     
    
For i=1 To CountChildren(ent)  
        
child=GetChild(ent,i)  
        If 
child<>0  
            
If CountChildren(child)>0 Then SeekChilds(child)
           
            ; 
Выполняем операции над чилдом
            
То есть вызывается та самая нужная нам ф-ция ApplyChild
            
Которая ставит бронюоружие и тд
            ApplyChild
(child
        
           EndIf  
    
Next  
End 
Function 


Вот сама эта ф-ция
Function ApplyChild(child)
    
Local name$=Lower(EntityName(child))
    If 
Instr(name$,"startplaer")>0 Then 
   filein 
ReadFile("startpaer.dat")
    
x# = ReadFloat( filein )
    
y# = ReadFloat( filein )
    
z# = ReadFloat( filein )
PositionEntity plaer,x#,y#,z# 
CloseFilefilein )
    EndIf
    If 
Instr(name$,"shield")>0 Then 
        
ставим броню в месте этого чилда
    
EndIf
    If 
Instr(name$,"enemy")>0 Then 
        
ставим врага в месте этого чилда
    
EndIf
End Function

Всё это делаем до главного цикла 


Hurrit 11.10.2011 23:15

Ответ: Подскажите пожалуйста
 
Нюхай баба тыкай мужик

Markova 12.10.2011 01:14

Ответ: Как сделать в 3ds MAX карту с настроенной физикой и партиклами?
 
Цитата:

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

Hurrit

Я тебя понял, к этому ко всему ещё бы парсер хороший найти на чистом Blitze написанный.

Markova 12.10.2011 07:22

Ответ: Как сделать в 3ds MAX карту с настроенной физикой и партиклами?
 
Вложений: 1
Я вижу это вот так:
Код:

Type LoadMap
  Field ChildMaps
  Field ChildName$
End Type

Global Maps

Function LoadMap(Maps_File$)

    Maps=LoadAnimMesh(Maps_File$)

For ChildN=1 To CountChildren(Maps)-1
  LM.LoadMap=New LoadMap
      Getemp=GetChild(Maps,ChildN)
          LM\ChildName$=EntityName(Getemp)
            LM\ChildMaps=FindChild(Maps,LM\ChildName$)
Next

End Function

Graphics3D 640,480,32,2
SetBuffer BackBuffer()

camera=CreateCamera()
  light=CreateLight()

LoadMap("MapsZ4.b3d")

For LM.LoadMap=Each LoadMap
  If LM\ChildName$="Celind1_Sfera_Body_0_1"
        PositionEntity camera,EntityX(LM\ChildMaps),EntityY(LM\ChildMaps),EntityZ(LM\ChildMaps)-150 
  EndIf
Next

While Not KeyDown( 1 )

For LM.LoadMap=Each LoadMap
  If LM\ChildName$="Celind1_Sfera_Body_0_1"
        EntityColor  LM\ChildMaps,Rnd(255),0,0
  EndIf
Next

RenderWorld
Flip
Wend
End

Карта та же у меня нечем в .b3d конвертировать.

Markova 16.10.2011 11:35

Ответ: Как сделать в 3ds MAX карту с настроенной физикой и партиклами?
 
Вложений: 1
Пообщавшись с автором выше изложенной демки, я понял, что мало чего понимаю в оптимизации кода, но он дал мне парсер тот самый который он сам использовал в демке.
Function parser$(txt$,index,delim$=" ")

Local search$
Local searched
Local lendelim%

txt$=txt$+delim$
lendelim=Len(delim$)

For i=1 To index
searched=Instr(txt$,delim$)
If searched<>0 Then

If i = index Then
txt$=Mid(txt$,1,searched-1)
Return txt$
Else
txt$=Mid(txt$,searched+lendelim)
EndIf

Else
Return ""
EndIf
Next

End Function

Я его сразу задействовал в своём проекте, вот полный исходный код:
; Graphics3D Example
; ------------------
Global FL_Pitch2#,FL_Yaw2#,FL_Roll2#,FL_XSpeed2#,FL_YSpee d2#,FL_ZSpeed2#,pp1$,aa1,p1$,Trik2$,Forror=1,gRAVI TY#=-1.6
Function FreeLook2(FL_Cam2)
FL_Pitch2#=FL_Pitch2#-(-MouseYSpeed()*0.02) : FL_Pitch2#=FL_Pitch2#/1.2
FL_Yaw2#=FL_Yaw2#+-(MouseXSpeed()*0.02) : FL_Yaw2#=FL_Yaw2#/1.2
MoveMouse (GraphicsWidth()/2,GraphicsHeight()/2)
FL_ZSpeed2#=FL_ZSpeed2#+Float(KeyDown(17)-KeyDown(31))*0.12 : FL_ZSpeed2#=FL_ZSpeed2#/1.14; w &amp; s
FL_XSpeed2#=FL_XSpeed2#+Float(KeyDown(32)-KeyDown(30))*0.12 : FL_XSpeed2#=FL_XSpeed2#/1.14 ; a &amp; d
FL_YSpeed2#=FL_YSpeed2#+Float(KeyDown(19)-KeyDown(33))*0.12 : FL_YSpeed2#=FL_YSpeed2#/1.14 ; r &amp; f
FL_Roll2#=(FL_Yaw2#*1.1)-(FL_XSpeed2#*2.3)
MoveEntity FL_Cam2,FL_XSpeed2#,FL_YSpeed2#+Abs(FL_Roll2#*FL_X Speed2#)/50,FL_ZSpeed2#
Local cp2#=EntityPitch(FL_Cam2,True)+FL_Pitch2#
If cp2<-89 Then cp2=-89
If cp2>89 Then cp2=89
RotateEntity FL_Cam2,cp2,EntityYaw(FL_Cam2)+FL_Yaw2#,FL_Roll2#
End Function

Global fpsindex#, fpstime#, fpsfold_millisecs#, fpsfps#, fpsfold2_Millisecs#
Function fps2#(time=1000)
fpsindex=fpsindex+1
fpstime=fpstime+MilliSecs()-fpsfold_millisecs
If fpstime=>time
fpsfps=fpsindex
fpstime=0
fpsindex=0
EndIf
fpsfold_Millisecs=MilliSecs()
Return fpsfps
End Function

Function parser$(txt$,index,delim$=" ")
Local search$
Local searched
Local lendelim%
txt$=txt$+delim$
lendelim=Len(delim$)
For i=1 To index
searched=Instr(txt$,delim$)
If searched<>0 Then

If i = index Then
txt$=Mid(txt$,1,searched-1)
Return txt$
Else
txt$=Mid(txt$,searched+lendelim)
EndIf

Else
Return ""
EndIf
Next
End Function

Global Maps,delet,deletStart,Start

Type LoadM
Field ChildMaps
Field ChildName$
Field AutoHide$
End Type

Function LoadMap(Maps_File$)
Maps=LoadAnimMesh(Maps_File$)
For ChildN=1 To CountChildren(Maps)
LM.LoadM=New LoadM
Getemp=GetChild(Maps,ChildN)
LM\ChildName$=EntityName(Getemp)
LM\ChildMaps=FindChild(Maps,LM\ChildName$)
LM\AutoHide$=parser(LM\ChildName$,1,".");Âûäèëÿåì òî÷üêè ñòàðòà èç îáùåãî èìåíè ÷èëäà. ÷èëäû äåéñòâèÿ Pick, GizmoBox...
EntityPickMode LM\ChildMaps,2
If LM\AutoHide$="Start" Or LM\AutoHide$="Exid" Or LM\AutoHide$="Pick" Or LM\AutoHide$="GizmoBox" Then HideEntity LM\ChildMaps;Ñêðûâàåì ÷èëäû ñòàðòà è äåéñòâèÿ

If Not Instr(RSet(LM\ChildName$,1),"@")>0 Then Delete LM;Óäàëÿåì èç ñïèñêà ÷èëäîâ íå èñïîëüçóåìûå èìåíà ÷èëäîâ
Next
End Function


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

Global camera=CreateCamera()
light=CreateLight()

MapsStarted$="Testmap.b3d|Start.@|";Ïðîãðàììíûé ñêðèïò


LoadMap(parser(MapsStarted$,1,"|"))

For LM.LoadM=Each LoadM
If Instr(LM\ChildName$,parser(MapsStarted$,2,"|"))>0 Then
PositionEntity camera,EntityX(LM\ChildMaps),EntityY(LM\ChildMaps) +20,EntityZ(LM\ChildMaps)
EndIf
Next

deletStart=1

While Not KeyDown( 1 )
FreeLook2(camera)
Mouse_Hit1=MouseHit(1)
pick=CameraPick(camera,MouseX(),MouseY())

For LM.LoadM=Each LoadM
;Îáðàáîòêà ïðîãðàììíîãî ñêðèïòà
If Instr(LM\ChildName$,"Pick.DoorLabEnt@")>0
If PickedEntity()=LM\ChildMaps And Mouse_Hit1
MapsStarted$="Testmap2.b3d|Start.Lab@|"
delet=1
EndIf
EndIf

If Instr(LM\ChildName$,"Pick.DoorLab@")>0
If PickedEntity()=LM\ChildMaps And Mouse_Hit1
MapsStarted$="Testmap.b3d|Exid.Lab@|"
delet=1
EndIf
EndIf

If Instr(LM\ChildName$,"Pick.DoorLab1@")>0
If PickedEntity()=LM\ChildMaps And Mouse_Hit1
MapsStarted$="Testmap.b3d|Start.|"
delet=1
EndIf
EndIf

Next

If Start=1
LoadMap(parser(MapsStarted$,1,"|"))
For LM.LoadM=Each LoadM
If Instr(LM\ChildName$,parser(MapsStarted$,2,"|"))>0 Then
PositionEntity camera,EntityX(LM\ChildMaps),EntityY(LM\ChildMaps) +20,EntityZ(LM\ChildMaps)
EndIf
Next
deletStart=1
Start=0
EndIf

For LM.LoadM=Each LoadM
If Instr(LM\AutoHide$,"Pick")>0
;EntityAlpha LM\ChildMaps,0
Dis#=EntityDistance(camera,LM\ChildMaps)
If Dis#<9
ShowEntity LM\ChildMaps
Else
HideEntity LM\ChildMaps
EndIf
EndIf
Next

If deletStart=1
For LM.LoadM=Each LoadM
If LM\AutoHide$="Start" Or LM\AutoHide$="Exid" Then Delete LM;Óäàëÿåì èç ñïèñêà èìåíà òî÷åê ñòàðòà, ïîñëå ñòàðòà îíè íàì áîëüøå íå íóæíû!
Next
deletStart=0
EndIf

If delet=1 ;Óäàëÿåì âñ¸ ïåðåä çàãðóçêîé ñëåäóþùåé êàðòû
For LM.LoadM=Each LoadM
Delete LM
Delete Each LoadM
Next
FreeEntity Maps
Start=1
delet=0
EndIf

UpdateWorld()
RenderWorld()

;For LM.LoadM=Each LoadM
;Print LM\ChildName$
;Next

Text 0,0,"Current FPS: "+fps2#(1000)
Flip

Wend
For LM.LoadM=Each LoadM
Delete LM
Delete Each LoadM
Next
FreeEntity Maps
End

Если я буду делать так переход с карты на карту, это будет правильно?
или лучше использовать команды Handle() и Object ну типа
If Mouse_Hit1 Then
CurrObj=Object.LoadM(EntityName(pick))
If PickedEntity()=CurrObj\ChildMaps And Mouse_Hit1
MapsStarted$="Testmap2.b3d|Start.Lab@|"
delet=1
EndIf
EndIf
Вот для наглядности с тест картами, подлетаем к двери, кликаем по кваду, переходим.;)


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

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