Function ParseChilds(ent)
For i=1 To CountChildren(ent)
Local child=GetChild(ent,i)
If child<>0
If CountChildren(child)>0 Then ParseChilds(child)
; Тут делаем чтото полезное
EntityAlpha(child,.5)
EndIf
Next
End Function
Сообщений: 31
Написано 10 полезных сообщений (для 29 пользователей)
Ответ: Вопрос-Ответ (для новичков)
Работаю тут потихонку (когда настроение) над свойм GTA2 и проблема человеками.
В GTA2 они просто ходят по своей дороги и когда уже им навстречу идет стена дома например, тогда они уже об этом знают и плавно переворачиваются.
Не доходя до стенки.
А у меня если с стеной или чем угодно "collision" тогда реско поворот на 360 градусов.
Вообще не реально, ходят как столбы.
Как сделать плавный поворот и предсказать что вот уже стенка или конец дороги идет и пора переворачивать??
Сообщений: 68
Написано 4 полезных сообщений (для 5 пользователей)
Ответ: Вопрос-Ответ (для новичков)
Сообщение от cancel
Работаю тут потихонку (когда настроение) над свойм 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
__________________
-Я умею общаться с трудными детьми. Моя мама в подвале держала подпольный детский сад! (С) "Теория большого взрыва"
Видимо, это происходит в случае, когда кубик повёрнут точно перпендикулярно стенке, и прога не может никак решить, поворачивать его влево или вправо.
Значит, тебе нужно додумать и обработать это условие.
А вообще в том примере не очень хороший способ обхода препятствий, жрущий. Имеет смысл только при непредсказуемом изменении геометрии уровня во время игры.
Если этого не планируется, то лучше задуматься над вейпойнтами
Такой вопрос:
Есть модель игрока, когда бежит анимация бега,когда прыгает
анимация прыжка и т.д. Все работает!
Но тут я начал делать анимацию бега с оружием, анимацию прыжка с оружием и т.д.
Можно ли привязать модель оружия к кости Игрока, тоесть
допустим к кости ладошки, чтоб оружие следовало за анимацией ладошки и игрок какбы держал его??
Сообщений: 3,639
Написано 832 полезных сообщений (для 2,013 пользователей)
Ответ: Вопрос-Ответ (для новичков)
можна !!
- находиш ладошку (команда финдчилд)
- парентиш оружие (парентентити или ентитипарент непомню уже)
Вот и все !!
Если же ты хочеш что бы допустим при прижке с оружием проигровалась специфическая анимка ну тип там оружие в сторону отвел или типа того то нужно использовать блендинг анимаций !! На блице есть решения этого, хоть и не совсем суперовые но вполне работоспособные !!
Сообщений: 1,376
Написано 491 полезных сообщений (для 886 пользователей)
Ответ: Вопрос-Ответ (для новичков)
Сообщение от shyrikkk
неполучаеться !!! не выходит !!!! код у тебя не правельный !!!
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