problem mit schuss in 3d
Übersicht

![]() |
mas93Betreff: problem mit schuss in 3d |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi Leute,
Ich versuche gerade einen Schuss in 3d hinzubekommen. Es funktioniert eigentlich auch schon, nur stimmt etwas mit dem Winkel des Schusses nicht. Er stimmt immer nur bei 0 und 180° genau richtig. Könnt ihr mir sagen warum?? Code: [AUSKLAPPEN] Graphics3D 1024,768,32,2 SetBuffer BackBuffer() Type schuss Field x,y,z Field rotate,start Field entity End Type light=CreateLight() mech=LoadAnimMesh("adder2.b3d") MoveEntity mech,0,100,0 Animate mech,1,.28 EntityType mech,2 EntityRadius mech,50,100 cam=CreateCamera(mech) PositionEntity cam,0,20,-20 plane=CreatePlane() PositionEntity plane,0,0,0 EntityType plane,1 For i=0 To 1000 cube=CreateCube() PositionEntity cube,Rnd(0,5000),0,Rnd(0,5000) Next Global y# Global sprung# Repeat updateschuss() ;Der Schuss If KeyHit(28)Then ;Der Linke schuss s.schuss=New schuss s\x=EntityX(mech)-5 s\y=EntityY(mech)+10 s\z=EntityZ(mech)+10 s\rotate=EntityYaw(mech) s\entity=CreateCylinder() ;Der Rechte schuss s.schuss=New schuss s\x=EntityX(mech)+5 s\y=EntityY(mech)+10 s\z=EntityZ(mech)+10 s\rotate=EntityYaw(mech) s\entity=CreateCylinder() 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 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,start+" "+ende Flip Until KeyHit(1) Function updateschuss() For s.schuss=Each schuss If s\start=0 Then ScaleEntity s\entity,1,1,10 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,5 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] |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Der Hund liegt hier begraben:
Code: [AUSKLAPPEN] s\x=EntityX(mech)-5
s\y=EntityY(mech)+10 s\z=EntityZ(mech)+10 Du hast Hardcodedpositionierung, wo aber die Startpositionen auch abhängig vom Mechwinkel ist. Rätzelslösung ist es an einfachsten sich jeweils zwei Pivots (als Child vom Parent''Mech'') an den beiden Schussaustritten zu erstellen. Dann anhand der Positionen der Pivots (ql:EntityX /Y /Z) eben zuvor positionieren. Der Rest wie gehabt. Komplizierter wäre es mithilfe von den ganzen Vektoren, die Blitz so bietet. Kann ich aber in diesem Fall echt abraten. |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
![]() |
mas93 |
![]() Antworten mit Zitat ![]() |
---|---|---|
hmm könntest du mir da mal n beispiel geben??
Weil ich bin noch neu in 3d und hab noch nie pivots benützt... wäre nett mfg mas93 |
||
www.lpbase.de
Meine Linkin Park Fanseite[Noch im Aufbau] |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich wollte eigendlich nicht mehr ''Vergiss was ich gesagt habe'' schreiben, aber diesmal muss ich es wieder tun. Ich vermute, dass man ohne ''Vektorberechnung'' nicht umrumkommt. Hier meine Lösung:
Code: [AUSKLAPPEN] Graphics3D 800,600,0,2
SetBuffer BackBuffer() WireFrame 1 camera=CreateCamera() PositionEntity camera,0,2,-8 light=CreateLight() TurnEntity light,40,-40,0 mech=CreateCube() pivot=CreatePivot(mech) MoveEntity pivot,-2,0,0 schuss=CreateCube() ScaleEntity schuss,.1,.1,.5 While Not KeyHit(1) TurnEntity mech,MouseYSpeed(),-MouseXSpeed(),0 If MouseDown(1) ;Rotation ermiteln RotateEntity schuss,EntityPitch(mech),EntityYaw(mech),EntityRoll(mech) ;Position ermiteln TFormVector -2,0,0, mech,0 PositionEntity schuss,TFormedX(),TFormedY(),TFormedZ() End If MoveEntity schuss,0,0,.5 UpdateWorld RenderWorld Flip Wend End Halte Maustaste gedrückt, um die Startposition zu sehen. Lasse Maustaste los, um zu schiessen. |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
![]() |
mas93 |
![]() Antworten mit Zitat ![]() |
---|---|---|
hmm ok.
Ich habe es jetzt mal versucht einzubauen. Der Winkel stimmt, aber der Schuss startet nicht an der Possition vom mech... Könnt ihr mir da auchnoch weiterhelfen?? 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,100,0 Animate mech,1,.28 EntityType mech,2 EntityRadius mech,50,100 pivot=CreatePivot(mech) MoveEntity pivot,-2,0,0 cam=CreateCamera(mech) PositionEntity cam,0,20,-20 plane=CreatePlane() PositionEntity plane,0,0,0 EntityType plane,1 For i=0 To 1000 cube=CreateCube() PositionEntity cube,Rnd(0,5000),0,Rnd(0,5000) Next Global y# Global sprung# Repeat updateschuss() ;Der Schuss If KeyHit(28)Then ;Der Linke schuss s.schuss=New schuss TFormVector -2,0,0, mech,0 s\x=TFormedX() s\y=TFormedY() s\z=TFormedZ() s\rotate=EntityYaw(mech) s\entity=CreateCylinder() ;Der Rechte schuss ;s.schuss=New schuss ;s\x=EntityX(mech)+5 ;s\y=EntityY(mech)+10 ;s\z=EntityZ(mech)+10 ;s\rotate=EntityYaw(mech) ;s\entity=CreateCylinder() 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 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,start+" "+ende Flip Until KeyHit(1) Function updateschuss() For s.schuss=Each schuss If s\start=0 Then ScaleEntity s\entity,1,1,10 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,5 EndIf Next End Function mfg mas93 |
||
www.lpbase.de
Meine Linkin Park Fanseite[Noch im Aufbau] |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Der Schuss wird schon richtig erstellt. Was klar sein sollte ist, dass du deine Schussposition nocht an deinem Mech anpassen musst. Es wäre schön, wenn Codeabschnitte auf allen Rechnern -ohne Mediendaten- funktionieren würden.
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=CreateCube();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,8,-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 Global y# Global sprung# Repeat updateschuss() ;Der Schuss If KeyHit(28)Then ;Der Linke schuss s.schuss=New schuss TFormVector -4,2,2, mech,0 s\x=TFormedX() s\y=TFormedY() s\z=TFormedZ() s\rotate=EntityYaw(mech) s\entity=CreateCylinder() RotateMesh s\entity,90,0,0 ;Der Rechte schuss ;s.schuss=New schuss ;s\x=EntityX(mech)+5 ;s\y=EntityY(mech)+10 ;s\z=EntityZ(mech)+10 ;s\rotate=EntityYaw(mech) ;s\entity=CreateCylinder() 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 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,start+" "+ende Flip Until KeyHit(1) Function updateschuss() For s.schuss=Each schuss If s\start=0 Then ScaleEntity s\entity,1,1,10 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,5 EndIf Next End Function |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
![]() |
mas93 |
![]() Antworten mit Zitat ![]() |
---|---|---|
ja, dass ich die possition noch feinanpassen muss, weil mein mech größer ist als die cube ist mir auch klar.
Aber selbst bei deinem code funktioniert der schuss doch nicht richtig. Wenn man sich auf der stelle dreht, geht alles. Aber sobald man ein paar schritte nach vorne und z.b nach rechts läuft und dann schießt ist der schuss an der falschen stelle... Oder hab ich was falsch verstanden? [EDIT]AHH OK, habs hinbekommen. Ich musste zu den x,y,z possitionen noch die mech possitionen addieren[/EDIT] |
||
www.lpbase.de
Meine Linkin Park Fanseite[Noch im Aufbau] |
- Zuletzt bearbeitet von mas93 am So, Okt 07, 2007 14:36, insgesamt einmal bearbeitet
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Stimmt, diese Funktion habe ich nicht getestet. Aber als ich dein Beitrag gelesen habe, habe ich ungelogen nicht mehr als 0.8 Sekunden gebraucht, um die Lösung zu wissen:
Code: [AUSKLAPPEN] s\x=TFormedX()+EntityX(mech)
s\y=TFormedY()+EntityY(mech) s\z=TFormedZ()+EntityZ(mech) |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
![]() |
mas93 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja, ich weiss^^
Hab ich dann ja paar sekunden später auch gleich geedited^^ |
||
www.lpbase.de
Meine Linkin Park Fanseite[Noch im Aufbau] |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group