problem beim animieren in 3d
Übersicht

![]() |
mas93Betreff: problem beim animieren in 3d |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi Leute,
Ich versuche gerade ein mesh mit verschiedenen sequenzen zu animieren, doch leider funktioniert es noch nicht richtig. Es wird irgendwie nur eine sequenz abgespielt. Habe ich die Befehle überhaupt richtig verwendet, weil das ist das erstemal, dass ich ein mesh animiere... Hier mal der Code: Code: [AUSKLAPPEN] Graphics3D 1024,768,32,2 SetBuffer BackBuffer() Type schuss Field x#,y#,z# Field rotate,start Field entity End Type light=CreateLight() Global mech=LoadAnimMesh("adder2.b3d") MoveEntity mech,0,1,0 ;Animate mech,1,.28 EntityType mech,2 EntityRadius mech,.5,1 pivot=CreatePivot(mech) MoveEntity pivot,-2,0,0 cam=CreateCamera(mech) PositionEntity cam,0,20,-20 plane=CreatePlane() PositionEntity plane,0,0,0 EntityColor plane,64,64,72 EntityType plane,1 For i=0 To 1000 cube=CreateCube() PositionEntity cube,Rnd(0,5000),0,Rnd(0,5000) Next ;----------ANIMATIONS SACHEN--------------- Global seq ;Die Aktuelle Sequenz ;Die Animationssequenzen ExtractAnimSeq(mech,32,32);Stehen ExtractAnimSeq(mech,32,38);Stehen ->Laufen ExtractAnimSeq(mech,1,27); Laufen ExtractAnimSeq(mech,28,32);Laufen ->stehen Global start ;------------------------------------------ Global y# Global sprung# Repeat seq=AnimSeq(mech) anim() updateschuss() ;Der Schuss If KeyHit(28)Then ;Der Linke schuss s.schuss=New schuss TFormVector -4,13,8, mech,0 s\x=TFormedX()+EntityX(mech) s\y=TFormedY()+EntityY(mech) s\z=TFormedZ()+EntityZ(mech) s\rotate=EntityYaw(mech) s\entity=CreateCylinder() RotateMesh s\entity,90,0,0 ;Der Rechte schuss s.schuss=New schuss TFormVector 4,13,8, mech,0 s\x=TFormedX()+EntityX(mech) s\y=TFormedY()+EntityY(mech) s\z=TFormedZ()+EntityZ(mech) s\rotate=EntityYaw(mech) s\entity=CreateCylinder() RotateMesh s\entity,90,0,0 EndIf If KeyDown(57) Then sprung=1 If Not EntityCollided(mech,1) Then sprung=sprung-0.05 If KeyDown(200) Then MoveEntity mech,0,0,1 :start=1 ;Animation startet If KeyDown(203) Then TurnEntity mech,0,1,0 If KeyDown(205) Then TurnEntity mech,0,-1,0 If KeyDown(208) Then MoveEntity mech,0,0,-1 Collisions 2,1,2,2 TranslateEntity mech,0,sprung,0 UpdateWorld RenderWorld Text 20,40,EntityYaw(mech) Text 20,20,seq + " "+start Flip Until KeyHit(1) Function anim() If start=1 Then Animate mech,3,1,2 If seq=38 Then stehen=0 start=0 laufen=1 EndIf EndIf If laufen=1 Then Animate mech,1,1,3 EndIf If anhalten=1 Then laufen=0 Animate mech,3,1,4 If seq=32 Then anhalten=0 stehen=1 EndIf EndIf If stehen=1 Then Animate mech,1,1,1 EndIf End Function Function updateschuss() For s.schuss=Each schuss If s\start=0 Then EntityColor s\entity,255,0,0 ScaleEntity s\entity,0.3,0.3,6 PositionEntity s\entity,s\x,s\y,s\z RotateEntity s\entity,0,s\rotate,0 s\start=1 EndIf If s\start=1 Then MoveEntity s\entity,0,0,9 EndIf Next End Function wäre nett wenn ihr mir weiterhelfen könntet mfg mas93 |
||
www.lpbase.de
Meine Linkin Park Fanseite[Noch im Aufbau] |
SungGast |
![]() Antworten mit Zitat |
|
---|---|---|
Hallo Mas93,
ich weis nicht ob das hilft, aber der lauf animationscode von Raytracer funktioniert. Vergleiche mal wieder aufgebaut ist, vielleicht kannst du da ja was rauslesen. Ich habe davon aber wirklich 0-Plan. ![]() Code: [AUSKLAPPEN] ;ninja Graphics3D 1024,768,32,1 SetBuffer BackBuffer() Global fpstimer=CreateTimer(30) Global cam=CreateCamera():PositionEntity cam,0,20,-20,1 Global plane=CreatePlane() cube=CreateCube():ScaleEntity cube,3,5,8:PositionEntity cube,0,0,20,1 Global light=CreateLight():PositionEntity light,0,100,0,1:PointEntity light,plane Global tex=LoadTexture("nskinwh.jpg"):ScaleTexture tex,25,25 EntityTexture plane,tex Global playermesh=LoadAnimMesh("ninja.b3d") PointEntity cam,playermesh;:EntityParent cam,playermesh AmbientLight 200,200,200 Global play_once%=3,play_loop%=1,play_stop%=0,geschw#=0.5,trans#=6.0,seq%=0 Global modus%=play_loop,laufkmh#=0.32,ismoving%=0 Global walk%=1,stealthwalk%=2,punchsword%=3,swinsword%=4,twohand%=5,upblock%=6,forwkick%=7 Global pickfloor%=8,jump1%=9,jump2%=10,finishjump%=11,sidekick%=12,spinattack%=13,backflip%=14 Global climb%=15,fallback%=16,fall4ward%=17,breathe%=18,idle1%=19,idle2%=20 Global lastani%=1,turning%=0,jumping%=0,want2jump%=0,jumpdown%=0 ExtractAnimSeq (playermesh,1,14) ExtractAnimSeq (playermesh,15,30) ExtractAnimSeq (playermesh,45,59) ExtractAnimSeq (playermesh,60,68) ExtractAnimSeq (playermesh,69,72) ExtractAnimSeq (playermesh,73,83) ExtractAnimSeq (playermesh,84,93) ExtractAnimSeq (playermesh,94,102) ExtractAnimSeq (playermesh,103,111) ExtractAnimSeq (playermesh,112,125) ExtractAnimSeq (playermesh,126,133) ExtractAnimSeq (playermesh,134,145) ExtractAnimSeq (playermesh,146,158) ExtractAnimSeq (playermesh,159,165) ExtractAnimSeq (playermesh,166,173) ExtractAnimSeq (playermesh,174,182) ExtractAnimSeq (playermesh,184,205) ExtractAnimSeq (playermesh,206,250) ExtractAnimSeq (playermesh,251,300) Animate playermesh,modus,geschw,seq,trans Repeat movement() animation() PointEntity light,playermesh PointEntity cam,playermesh UpdateWorld RenderWorld Text 10,20,"animating: "+Animating(playermesh) Text 10,40,"animtime : "+AnimTime(playermesh) Text 10,60,"animseq : "+AnimSeq(playermesh) Text 10,80,"animlength:"+AnimLength(playermesh) Text 10,120,"jumping : "+jumping ;setanimtime entity,zeit(frame),seq Flip 0 WaitTimer fpstimer ;WaitKey() Until KeyDown(1) End Function movement() If KeyDown(200) And jumping=0 Then MoveEntity playermesh,0,0,laufkmh ismoving=1 Else ismoving=0 EndIf If KeyDown(203) And jumping=0 Then turning=1 If ismoving=1 Then TurnEntity playermesh,0,1,0 If ismoving=0 Then TurnEntity playermesh,0,10,0 Else turning=0 EndIf If KeyDown(205) And jumping=0 Then turning=1 If ismoving=1 Then TurnEntity playermesh,0,-1,0 If ismoving=0 Then TurnEntity playermesh,0,-10,0 Else If KeyDown(203)=0 Then turning=0 EndIf If KeyDown(57) And jumping=0 Then;And jumping=0 Then jumping=1:turning=0:ismoving=0;want2jump=1 EndIf If jumping=1 Then If jumpdown=0 Then MoveEntity playermesh,0,2,0 EndIf gravity=-1 MoveEntity playermesh,0,gravity,0 If EntityY#(playermesh,1)< 0.0 Then PositionEntity playermesh,EntityX#(playermesh,1),0.0,EntityZ#(playermesh,1),1 FlushKeys End Function ;----------------------------------------- Function animation() lastani=seq If jumping=1 Then seq=jump1:jumpdown=1 If AnimSeq(playermesh)=jump1 And AnimTime(playermesh) > 1.2 Then jumpdown=0 If AnimSeq(playermesh)=jump1 And AnimTime(playermesh) > 7.0 Then seq=idle1:jumping=0 EndIf ; If jumping=1 Then ; If AnimSeq(playermesh)=jump1 And (AnimTime(playermesh))=(AnimLength(playermesh)) Then ; jumping=0 ; EndIf ; EndIf If ismoving=1 And AnimSeq(playermesh)<>walk And jumping=0 Then seq=walk EndIf If ismoving=0 And jumping=0 Then If turning=0 Then seq=idle1 If turning=1 Then seq=stealthwalk EndIf Select seq Case jump1 ; If AnimTime(playermesh) > 6 Then trans=6.0:geschw=0.6:modus=play_once ; EndIf ; If AnimTime(playermesh) <= 6 Then ; trans=6.0:geschw=0.8:modus=play_loop ; EndIf Default trans=6.0:geschw=0.5:modus=play_loop End Select If seq<>lastani Then Animate playermesh,modus,geschw,seq,trans EndIf ;If Animating(playermesh)=0 Then ; Animate playermesh,modus,geschw,seq,trans ;EndIf End Function |
||
![]() |
Tankbuster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] If start=1 Then
Animate mech,3,1,2 EndIf Wenn ich mich nicht verguckt hab, wird das Mesh also solange animiert, bis start wieder ungleich 1 ist ![]() Also animierst du das erste Frame, die Schleife läuft nochmal durch, und weil start immernoch 1 ist, fängst du wieder an, zu animieren, und startest wieder beim ersten frame ![]() ![]() EDIT: Teste mal sowas in der art, und dann versuch das mal mit keydown ![]() Zitat: While...
If KeyHit(28) Then Animate mech,3,1,2 RenderWorld() Wend |
||
Twitter
Download Jewel Snake! Windows|Android |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
das ist genau so falsch.
Nimm einfach das If und in dem If wo das animate ist, mach start = 0 |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
Tankbuster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Was ist daran falsch? die Animation wird immer neu gestartet, wenn start=1 zutrifft >.<
Und erst wenn das Frame bei 38 ist, wird start wieder zu 0 Also wird sich die Animation immer wieder wiederhohlen, denn das Objekt wird nie bis zum 38 Frame animiert ![]() |
||
Twitter
Download Jewel Snake! Windows|Android |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Genau genommen ist beides falsch, nur meines mit dem zurück setzen erst am Schluss und Start = 1 setzen nur erlauben wenn die Animation gerade nicht läuft, sorgt immerhin dafür, dass es nicht immer wieder von vorne startet.
Am besten wäre ein State System. 0 -> garnicht 1 -> Animation Starten und State auf 2 oder 3 setzen 2 -> Animation loopt nicht, wenn fertig auf State 0 setzen 3 -> animation loopt, wenn fertig auf State 2 setzen Dein Ansatz bringt garnix, der ist genau so falsch wie direkt mit "if start = 1", denn die Taste kann man mehr als 1x drücken ( ich trigger die bewegungstasten häufig ) und das ziel dürfte kaum sein, dass die animation mitten im schritt wieder von vorne beginnt oder ![]() |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group