Hilfe bei Sprite-System

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

shootermaker

Betreff: Hilfe bei Sprite-System

BeitragSa, März 21, 2009 15:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo. Ihr kennt doch bestimmt noch die alten Spiele wie doom1 oder wolfenstein3d. (Was warscheinlich keiner kennt is Conquer a.d. 1086 Very Happy )
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.

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSa, März 21, 2009 16:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Von Oben gesehen ist es die Y-Achse die berücksichtigt werden muß. Im grunde also ein Atan2 anwenden, und den Atan2Winkel-Gegnerwinkel berechnen sollte funktionieren.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D
 

shootermaker

BeitragSa, März 28, 2009 15:29
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Sad

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSa, März 28, 2009 15:36
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, März 28, 2009 15:55
Antworten mit Zitat
Benutzer-Profile anzeigen
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...

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSa, März 28, 2009 18:29
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, März 29, 2009 13:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,
Danke für deinen Code Smile)

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...

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSo, März 29, 2009 14:48
Antworten mit Zitat
Benutzer-Profile anzeigen
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

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group