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)

Randomize 19.01.2010 22:09

Ответ: Вопрос-Ответ (для новичков)
 
Чилды парсим рекурсией!
У чилдов бывают чилды!
PHP код:

Function ParseChilds(ent
    For 
i=1 To CountChildren(ent
        
Local child=GetChild(ent,i
        If 
child<>
            
If CountChildren(child)>0 Then ParseChilds(child
            ; 
Тут делаем чтото полезное 
            EntityAlpha
(child,.5
        EndIf 
    
Next 
End 
Function 


shyrikkk 20.01.2010 01:31

НАРОД помогите задолбался вспотел !!!
 
Вложений: 1
как астановить анимированный спрайт !!!???????
тоесть что б один раз проигрался до 30го кадра ???

Жека 20.01.2010 06:52

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

Код:

frame=MilliSecs()/50 Mod 30
if(frame > 29) frame = 29


cancel 20.01.2010 20:28

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

В GTA2 они просто ходят по своей дороги и когда уже им навстречу идет стена дома например, тогда они уже об этом знают и плавно переворачиваются.
Не доходя до стенки.

А у меня если с стеной или чем угодно "collision" тогда реско поворот на 360 градусов.

Вообще не реально, ходят как столбы.


Как сделать плавный поворот и предсказать что вот уже стенка или конец дороги идет и пора переворачивать??

Reks888 20.01.2010 20:38

Ответ: Вопрос-Ответ (для новичков)
 
Вэйпоинты... по-моему так было в ГТА 2

cancel 20.01.2010 20:46

Ответ: Вопрос-Ответ (для новичков)
 
В GTA2 каждый TILE или скажем BLOCK имеет свои "флаги": PAVEMENT, ROAD, FIELD, AIR.
Все это можно изменить в редакторе карт.

На FIELD людей и машин нет, на ROAD есть машины, нa PAVEMENT люди. Bообщем по этим "флaгам" игра знает что и где.

Для машин еще указатели напрявления
http://img682.imageshack.us/img682/9606/arrows.png

Blender 20.01.2010 20:46

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

Сообщение от cancel (Сообщение 134171)
Работаю тут потихонку (когда настроение) над свойм GTA2 и проблема человеками.

В GTA2 они просто ходят по своей дороги и когда уже им навстречу идет стена дома например, тогда они уже об этом знают и плавно переворачиваются.
Не доходя до стенки.

А у меня если с стеной или чем угодно "collision" тогда реско поворот на 360 градусов.

Вообще не реально, ходят как столбы.


Как сделать плавный поворот и предсказать что вот уже стенка или конец дороги идет и пора переворачивать??

В примерах физикса есть пример :
вот посмотри может поможет
Код:


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

;Lights
light01=CreateLight()
PositionEntity light01,15,66,15

;Plane
plane=CreatePlane()
text01=LoadTexture("..\media\tile.jpg")
ScaleTexture Text01,2,2
EntityTexture plane,text01

;Camera
cam=CreateCamera()
PositionEntity cam,20,60,-40
RotateEntity cam,60,20,0

;PX
PxCreateWorld(1, "key")                                       
pxSetGravity(0,-10,0)                               


;--------------Wall-----------
cu1=CreateCube();
ScaleEntity cu1,50,2,1
PositionEntity cu1,0,1,50
cu1_body = pxBodyCreateCube(50,2,1,0)
pxBodySetPosition (cu1_body,0,1,50)

cu2=CreateCube();
ScaleEntity cu2,50,2,1
PositionEntity cu2,0,1,-50
cu2_body = pxBodyCreateCube(50,2,1,0)
pxBodySetPosition (cu2_body,0,1,-50)

cu3=CreateCube();
ScaleEntity cu3,1,2,50
PositionEntity cu3,-50,1,0
cu3_body = pxBodyCreateCube(1,2,50,0)
pxBodySetPosition (cu3_body,-50,1,0)

cu4=CreateCube();
ScaleEntity cu4,1,2,50
PositionEntity cu4,50,1,0
cu4_body = pxBodyCreateCube(1,2,50,0)
pxBodySetPosition (cu4_body,50,1,0)

For i=0 To 30
        Create_Px_Cube()
Next

;-------------Trigger---------------
Create_Px_AICube()

;--------------- speed-----------
  ang_speed% = Rand(0,1)
  ang_speed = 1- 2*ang_speed


 ;-------------Main Loop-------
Repeat

If KeyHit(57) Create_Px_AICube()


time=MilliSecs ()
pxRenderPhysic(30,0)
Update_Px_Cube()
Update_Px_AICube()
pxUpdateTriggers()
New_time=MilliSecs ()-time


UpdateWorld()
RenderWorld()
  frames=frames+1 
  If MilliSecs()-render_time=>1000  fps1=frames : frames=0 : render_time=MilliSecs()
 Text 10,50,"FPS: "+fps1+"  dll time: "+New_time
 Text 10,10,"Space - Add Ai Cube"

Flip

Until KeyHit(1)
End

Type Px_Cube
        Field cube_body%
        Field cube_mesh%
        Field red#, green#, blue#
End Type

Type Px_AICube
        Field cube_body%, cube_mesh%
        Field trigger%, triger_mesh%
        Field ang_speed
End Type

 Function Create_Px_AICube()
  acu.Px_AICube = New Px_AICube

        acu\cube_mesh = CreateCube();
        ScaleEntity acu\cube_mesh,2,2,2
        acu\cube_body = pxBodyCreateCube(2,2,2,10)
        pxBodySetPosition (acu\cube_body,0,1,0)
        pxBodySetFrozenRotX(acu\cube_body, 1)
        pxBodySetFrozenRotZ(acu\cube_body, 1)
        pxBodySetRotation(acu\cube_body, 0, Rand(-180,180), 0)

        acu\triger_mesh = CreateCube(acu\cube_mesh)
        ScaleEntity acu\triger_mesh,0.7,0.7,3
        EntityColor acu\triger_mesh,0,200,0
        EntityAlpha acu\triger_mesh,0.5
        PositionEntity acu\triger_mesh,0,0,2.5
        acu\trigger = pxTriggerCreateCube(1.4,1.4,6)
        pxBodySetCollisionGroup(acu\trigger, 1)
        pxBodySetCollisionGroupFlag(1, 1, 0)

  acu\ang_speed% = Rand(0,1)
  acu\ang_speed = 1- 2*acu\ang_speed
 End Function

Function Update_Px_AICube()
        For acu.Px_AICube = Each Px_AICube
                pxBodySetEntity( acu\cube_mesh, acu\cube_body)
                pxTriggerSetPosition(acu\trigger, EntityX#(acu\triger_mesh,1), EntityY#(acu\triger_mesh,1), EntityZ#(acu\triger_mesh,1))
                pxTriggerSetRotation(acu\trigger, 0, EntityYaw#(acu\triger_mesh,1), 0)

                pxBodySetLocalLinearSpeed(acu\cube_body,0, 0, 4)
                If (pxTriggerGetBody(acu\trigger, 1))
                        pxBodySetAngularSpeed(acu\cube_body,0, acu\ang_speed*1, 0)
                        EntityColor acu\triger_mesh,0,0,200
                Else
                  acu\ang_speed = Rand(0,1)
                  acu\ang_speed = 1- 2*acu\ang_speed
                  EntityColor acu\triger_mesh,0,200,0
                EndIf
        Next
End Function



 Function Create_Px_Cube()
  ocu.Px_Cube = New Px_Cube

        y# = Rnd (1,3)
        x# = Rnd (1,3)
        z# = Rnd (1,3)
  ocu\cube_mesh=CreateCube ()
  ScaleMesh ocu\cube_mesh,x,y,z
  ocu\red = Rand(0,100)
  ocu\green = Rand(0,255)
  ocu\blue = Rand(0,255)
  EntityColor ocu\cube_mesh, ocu\red#, ocu\green#, ocu\blue#
  ocu\cube_body=PxBodyCreateCube(x,y,z, 10)

  pxBodySetPosition(ocu\cube_body,Rand(-45,45),30,Rand(-45,45))

 End Function

Function Update_Px_Cube()
        For ocu.Px_Cube = Each Px_Cube
                If pxTriggerGetBodyTrigger(ocu\cube_body)
                        EntityColor ocu\cube_mesh,255,0,0
                Else
                        EntityColor ocu\cube_mesh, ocu\red#, ocu\green#, ocu\blue#
                EndIf
          pxBodySetEntity(ocu\cube_mesh, ocu\cube_body)
        Next
End Function


cancel 20.01.2010 20:59

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

Хотя имеет баги
http://img64.imageshack.us/img64/722/buggyf.png

но это пока самая малая проблема.

А в каком физиксе именно?

Reks888 20.01.2010 21:01

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

Сообщение от cancel (Сообщение 134173)
В GTA2 каждый TILE или скажем BLOCK имеет свои "флаги": PAVEMENT, ROAD, FIELD, AIR.
Все это можно изменить в редакторе карт.

На FIELD людей и машин нет, на ROAD есть машины, нa PAVEMENT люди. Bообщем по этим "флaгам" игра знает что и где.

Для машин еще указатели напрявления
http://img682.imageshack.us/img682/9606/arrows.png

Если все знаешь, то зачем спрашивать?

ABTOMAT 20.01.2010 21:03

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

А вообще в том примере не очень хороший способ обхода препятствий, жрущий. Имеет смысл только при непредсказуемом изменении геометрии уровня во время игры.
Если этого не планируется, то лучше задуматься над вейпойнтами

cancel 20.01.2010 21:05

Ответ: Вопрос-Ответ (для новичков)
 
Reks
Ну этого просто было мало. Не умею еще это использовать для себя.
Алгоритмика понимаете. Учится надо еще всему этому.


А код Blendera помог. Хоть это решено.

KingMaks 21.01.2010 00:01

Ответ: Вопрос-Ответ (для новичков)
 
Такой вопрос:
Есть модель игрока, когда бежит анимация бега,когда прыгает
анимация прыжка и т.д. Все работает!

Но тут я начал делать анимацию бега с оружием, анимацию прыжка с оружием и т.д.

Можно ли привязать модель оружия к кости Игрока, тоесть
допустим к кости ладошки, чтоб оружие следовало за анимацией ладошки и игрок какбы держал его??

IGR 21.01.2010 00:20

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

shyrikkk 21.01.2010 00:57

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

Сообщение от Жека (Сообщение 134136)
Допиши строчку кода тут:

Код:

frame=MilliSecs()/50 Mod 30
if(frame > 29) frame = 29


неполучаеться !!! не выходит !!!! код у тебя не правельный !!!

Жека 21.01.2010 07:31

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

Сообщение от shyrikkk (Сообщение 134209)
неполучаеться !!! не выходит !!!! код у тебя не правельный !!!

1. Ты грузил текстуру в цикле - это косяк.
2. Использованная тобой привязка к миллисекундам будет показывать не с нулевого кадра, а неизвестно с какого.

Вот даю рабочий код, в котором разделил твою функцию на две, загрузка и обновление.
Добавил флаг анимации - надо ли анимировать. Повторный запуск анимации по нажатию на пробел.
Ну и глобальных переменных добавил.


Код:

Graphics3D 640,480
SetBuffer BackBuffer()
camera=CreateCamera()
light=CreateLight()
RotateEntity light,90,0,0
Global sprite=CreateSprite ()
PositionEntity sprite,0,0,5

Global anim_tex
Global onAnimate = True
Global timeStart
Global frame

trLoad()

While Not KeyDown( 1 )

If(KeyHit(57) > 0)
        onAnimate = True
        frame = 0
EndIf

UpdateWorld
trUpdate()
RenderWorld
Flip

Wend

End


Function trLoad()
        anim_tex = LoadAnimTexture( "b.jpg",1,128,128,0,30 )
        EntityBlend sprite ,3
        EntityTexture sprite,anim_tex,0
        timeStart = MilliSecs()
End Function


Function trUpdate()

        If(onAnimate = True)
                If(MilliSecs() - timeStart >= 50)
                        EntityTexture sprite,anim_tex,frame
                        frame = frame + 1
                        If(frame=29) onAnimate = False                       
                        timeStart = MilliSecs()                       
                EndIf
        EndIf
End Function



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

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