Hilfe bei Sprite-System
Übersicht

shootermakerBetreff: Hilfe bei Sprite-System |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo. Ihr kennt doch bestimmt noch die alten Spiele wie doom1 oder wolfenstein3d. (Was warscheinlich keiner kennt is Conquer a.d. 1086 ![]() Ich versuch gerade in meinem spiel das system einzubauen, wenn sich die Camera (also der Spieler) um die Character dreht. soll heißen wenn zuvor ein gegnersprite in der vorderansicht dargestellt wurde, wird er dann in der Seitenansicht dargestellt. So weit wäre es kein Problem, wenn sich der gegner nicht auch noch selber drehen würde. die abfrage bei nicht bewegenden Objecten würde wie folgt aussehen: Code: [AUSKLAPPEN] If EntityYaw(cam) >= 0 EntityTexture m,T1 If EntityYaw(cam) >= 30 EntityTexture m,T2 If EntityYaw(cam) >= 75 EntityTexture m,T3 ... .. . doch wie berücksichtige ich die drehung des gegners? Danke im Voraus. |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Von Oben gesehen ist es die Y-Achse die berücksichtigt werden muß. Im grunde also ein Atan2![]() |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
shootermaker |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo,
Also das game soll ne art egoshooter werden, aber mit sprites als gegnern ich hab mir den befehl atan2 angesehen, bin aber zu keinem schlüssigen ergebniss gekommen. Was ich bräuchte, um den befehl zu verstehen, wer ein beispiel wo die camera gedreht wird, und ein text die drehung anzeigt (also von 0-360 grad). den Rest könnte ich dann (warscheinlich) selber. sry aber den Befehl versteh ich grad wirklich nicht ![]() |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
So ähnlich wie folgt (ob the fly):
FramesAnzahl=8 FramesTeiler=360/FramesAnzahl AnzeigeFrame=(KameraWinkel-GegnerWinkel-Atan2(GegnerY,GegnerX)) Mod FramesTeiler Es kann sein, dass das Minus vor Atan2 auch ein Plus sein muß etc... Ansonsten sollte es gehen. |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
shootermaker |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo
Danke für dein Beispiel, aber damit gehst du einen schritt weiter... Dein beispiel wäre ja dann für die ausrichtung der gegner (Kamerawinkel und Gegnerwinkel) hab mal schnell ein beispiel gemacht: Code: [AUSKLAPPEN] Graphics3D 800,600,32,2 SetBuffer BackBuffer() cam = CreateCamera() PositionEntity cam,0,1,0 Global camerawinkel plane = CreatePlane() cube = CreateCube() PositionEntity cube,0,1,5 EntityColor cube,111,111,111 While Not KeyHit(1) camerawinkel = EntityYaw#(cam) If KeyDown(17) Or KeyDown(200) Then MoveEntity cam,0,0,+0.1 If KeyDown(31) Or KeyDown(208) Then MoveEntity cam,0,0,-0.1 If KeyDown(32) Or KeyDown(205) Then TurnEntity cam,0,-2,0 If KeyDown(30) Or KeyDown(203) Then TurnEntity cam,0,+2,0 UpdateWorld RenderWorld Text 10,10,"Camerawinkel:"+camerawinkel Flip Wend Man sieht das die Variable camerawinkel von 0 bis 180 grad geht. und dann von -179 bis 0. Nun möchte ich aber das der winkel von 0 bis 360 grad geht Atan2 hilft mir dabei nicht, oder? Vielleicht steh ich gerad auch auf dem schlauch... |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ach komm, das hättest du auch noch selbst hinbekommen, wenn du dir mein Beispiel genauer angesehen hättest. Hätte zunindest den Vorteil gehabt, dass du es dann auch verstehst. Aber damit ma mir nicht Unwissenheit vorwerfen kann, habe ich mal dein Code für deine Zwecke angepasst.
Code: [AUSKLAPPEN] Graphics3D 800,600,0,2
SetBuffer BackBuffer() Local Timer=CreateTimer(60) Local Camera=CreateCamera() Local Light=CreateLight() PositionEntity Camera,0,1,0 RotateEntity Light,40,-40,0 AmbientLight 32,32,32 Local GegnerWinkel# Local RelativWinkel# Local AnzeigeFrame% Local Plane=CreatePlane() Local Cone=CreateCone(4) RotateMesh Cone,-90,0,0 PositionEntity Cone,0,1,5 EntityColor Cone,111,111,111 While Not KeyHit(1) TurnEntity Cone,0,0.5,0 RelativWinkel=ATan2(EntityZ(Camera)-EntityZ(Cone),EntityX(Camera)-EntityX(Cone)) GegnerWinkel=EntityYaw(Cone) AnzeigeFrame=Int((1440-RelativWinkel+GegnerWinkel)/45) Mod 8 If KeyDown(17) Or KeyDown(200) Then MoveEntity Camera,0,0,+0.1 If KeyDown(31) Or KeyDown(208) Then MoveEntity Camera,0,0,-0.1 If KeyDown(32) Or KeyDown(205) Then TurnEntity Camera,0,-2,0 If KeyDown(30) Or KeyDown(203) Then TurnEntity Camera,0,+2,0 WaitTimer Timer ; UpdateWorld RenderWorld Text 400,300,AnzeigeFrame,1 Flip 0 Wend |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
shootermaker |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo,
Danke für deinen Code ![]() Die Berechnung wäre nicht das problem gewesen... mir ging es wirklich nur um die 360 grad. Also wie kann ich bei dem oberen code (den ich geposted habe) den camerawinkel von 0 bis 360 abfragen? Also als beispiel: Ich habe ne Variable die "Winkel" heißt. Hat die variable den wert 240 soll sich die camera auf 240° drehen mit dem normalen befehl "rotateentity" geht es ja nicht (man muss dann ja den wert -120 eintragen, damit ich die gewünschten 240° erhalte) kann ich das irgendwie lösen? Hoff du verstehst was ich meine... |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Man kann eintragen was man will, und ist nicht auf den Wertebereich vob -180 bis +180 eingegrenzt.
Da RotateEntity obj,340,40,40 das gleiche Ergebnis liefert wie RotateEntity obj,-20,40,40 Siehe selbst: Code: [AUSKLAPPEN] Graphics3D 800,600,0,2
SetBuffer FrontBuffer() Local Camera=CreateCamera() Local Light=CreateLight() Local Cube=CreateCube() RotateEntity Light,40,-40,0 PositionEntity Cube,0,0,5 RotateEntity Cube,340,40,40 ;RotateEntity Cube,-20,40,40 RenderWorld Print EntityPitch(Cube) Print EntityYaw(Cube) Print EntityRoll(Cube) WaitKey Obwohl RotateEntity Cube,340,40,40 gesetzt wird, ist Print EntityPitch(Cube) = -20. |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group