raumschiff verfolgung problem

Übersicht BlitzBasic Blitz3D

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen

 

sen-me

BeitragMo, Aug 08, 2005 11:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Evil or Very Mad ich hab gesagt das es nicht geht und nicht das ichs nich kann

bei mir klappts einfach nicht, ich kann z.b. das fadenkreutz immer nur vom standpunkt aus nach rechts/unten schieben (und wieder zum standpunkt zurück)

Xaron

BeitragMo, Aug 08, 2005 12:13
Antworten mit Zitat
Benutzer-Profile anzeigen
sen-me hat Folgendes geschrieben:
Evil or Very Mad ich hab gesagt das es nicht geht und nicht das ichs nich kann


Wobei ersteres aber offensichtlich aus letzterem folgt. Wink

Zitat:
bei mir klappts einfach nicht, ich kann z.b. das fadenkreutz immer nur vom standpunkt aus nach rechts/unten schieben (und wieder zum standpunkt zurück)


Warum machst Du es nicht erstmal einfach, und bewegst nicht das Fadenkreuz, sondern erstmal nur das Schiff.
Was Du letztlich brauchst, ist eine gewisse Physik, das Fadenkreuz soll doch dann dahin zeigen, wo Du hin möchtest. Daraufhin setzen Beschleunigungskräfte an Deinem Schiff an und drehen/bewegen es in die entsprechende Richtung, bis Soll- und Ist-Richtung und -Rotation wieder miteinander übereinstimmen.

Mein Vorschlag ist halt, erstmal die Drehbewegung fest an die Mausbewegung zu koppeln. Dann machst Du es so, dass Du eine Rotationskraft ausübst, die das Schiff dann entsprechend der Mausbewegung um alle Achsen dreht. Das Fadenkreuz zeigt dann in Echtzeit, wohin das Schiff soll, das Schiff selbst folgt verzögert.

Ich werde mal was entsprechendes zusammenbasteln, dauert nur ein kleines Weilchen. Wink

Gruß - Xaron
Cerberus X - Monkey X Reloaded!
 

sen-me

BeitragMi, Aug 10, 2005 4:34
Antworten mit Zitat
Benutzer-Profile anzeigen
wens nicht mitn fadenkreutz klappt, dan klapts auch nicht mit dem schiff Rolling Eyes

Xaron

BeitragDo, Aug 11, 2005 9:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Gut, Schritt eins, bitteschön:

BlitzBasic: [AUSKLAPPEN]
Graphics3D 640,480,16,2
SetBuffer BackBuffer()

;globale Variablen
Global gCamera ;unsere Kamera
Global gLight ;unser Licht
Global gShip ;unser Schiff
Global gSkyBox ;unsere SkyBox, also der Hintergrund
Global gSkyBoxTexture ;die Textur dazu
Global gShipXPos# = 0.0
Global gShipYPos# = 0.0
Global gShipZPos# = 0.0
Global gShipPitch# = 0.0
Global gShipYaw# = 0.0
Global gShipRoll# = 0.0
Global gShipThrust# = 0.0 ;aktueller Schub
Global gShipVel# = 0.0 ;aktuelle Geschwindigkeit

Const MOUSE_SENSITIVITY# = 0.1 ;Mausempfindlichkeit
Const SHIP_MAX_THRUST# = 0.05 ;maximaler Schub
Const SHIP_MAX_VEL# = 1.0 ;maximale Geschwindigkeit
Const SHIP_FRICTION# = 0.95 ;\"Reibung\"

;Initialisierungen
Init()


While Not KeyHit(1)

;relative Mausverschiebung holen
msx# = MouseXSpeed()
msy# = MouseYSpeed()

;wir rotieren um die X-Achse (Pitch) und die Y-Achse (Yaw)
gShipPitch = msy * MOUSE_SENSITIVITY
gShipYaw = -msx * MOUSE_SENSITIVITY
TurnEntity( gShip, gShipPitch, gShipYaw, gShipRoll )

;natürlich soll sich unser Schiff auch bewegen
;wir geben mit der linken Maustaste Schub nach vorn
If( MouseDown(1) )
gShipThrust = SHIP_MAX_THRUST
Else
gShipThrust = 0.0
End If
;neue Geschwindigkeit berechnen
gShipVel = gShipVel + gShipThrust
;Das Schiff soll langsam wieder abbremsen (\"Reibung\"), wenn kein Schub vorhanden ist
gShipVel = gShipVel * SHIP_FRICTION
;Maximale Geschwindigkeit erreicht?
If( gShipVel > SHIP_MAX_VEL )
gShipVel = SHIP_MAX_VEL
End If

;Nun müssen wir den Geschwindigkeitsvektor, der immer in Z-Richtung wirkt,
;in das globale Koordinatensystem umrechnen
TFormVector( 0, 0, gShipVel, 0, 0 )
;Schiff bewegen
MoveEntity( gShip, TFormedX(), TFormedY(), TFormedZ() )
;Die Skybox bewegen wir mit...
PositionEntity( gSkyBox, EntityX( gShip ), EntityY( gShip ), EntityZ( gShip ) )

UpdateWorld()
RenderWorld()

Render2dOverlay()
RenderHud()

;wir halten die Maus immer in der Mitte, damit sie nicht aus dem Fenster \"rauswandert\"
MoveMouse( GraphicsWidth() / 2, GraphicsHeight() / 2 )

Flip
Wend
End

;Initialisiert das Spiel
Function Init()
;Wir verstecken den Mauszeiger
HidePointer()
;Unser Schiff...
gShip = CreatePivot()
;Kamera initialisieren, wir \"hängen\" sie an das Schiff
gCamera = CreateCamera( gShip )
;Es werde Licht... ein ungerichtetes Punktlicht, das wir an die Kamera hängen
gLight = CreateLight(2)
EntityParent( gLight, gCamera )
;SkyBox erzeugen
gSkyBox = CreateCube()
ScaleEntity( gSkyBox, 500, 500, 500 )
;Wir wollen diesen SkyBox-Würfel von innen sehen, deshalb kehren wir die Sichtbarkeit
;der Dreiecke um
FlipMesh( gSkyBox )
;Jetzt erzeugen wir eine Textur, die einen simplen Sternenhintergrund darstellt
gSkyBoxTexture = CreateTexture( 256, 256 )
;Wir erzeugen ein paar zufällige (weiße) Sterne
SetBuffer TextureBuffer( gSkyBoxTexture )
LockBuffer TextureBuffer( gSkyBoxTexture )
For i = 1 To 1000
WritePixelFast( Rnd( 256 ), Rnd( 256 ), $FFFFFF, TextureBuffer( gSkyBoxTexture ) )
Next
UnlockBuffer TextureBuffer( gSkyBoxTexture )
SetBuffer BackBuffer()
EntityTexture( gSkyBox, gSkyBoxTexture )
;Jetzt erzeugen wir noch ein paar Objekte (Kugeln), damit die Bewegung sichtbar wird
For i = 1 To 200
s = CreateSphere()
PositionEntity( s, Rnd( -300, 300 ), Rnd( -300, 300 ), Rnd( -300, 300 ) )
Next
End Function

;Zeichnet das Head Up Display
Function RenderHud()
xResolution% = GraphicsWidth()
yResolution% = GraphicsHeight()
xCenter% = xResolution / 2
yCenter% = yResolution / 2
;Wir zeichnen das Fadenkreuz genau in die Mitte, in grün Wink
Color( 0, 255, 0 )
Line( xCenter, yCenter, xCenter + 10, yCenter )
Line( xCenter, yCenter, xCenter - 10, yCenter )
Line( xCenter, yCenter, xCenter , yCenter + 10 )
Line( xCenter, yCenter, xCenter , yCenter - 10 )
End Function

;Zeichnet alle 2d-Elemente (Text) außer das HUD
Function Render2dOverlay()
Text 10, 10, \"X: \" + EntityX( gShip )
Text 10, 30, \"Y: \" + EntityY( gShip )
Text 10, 50, \"Z: \" + EntityZ( gShip )
Text 10, 90, \"Pitch: \" + EntityPitch( gShip )
Text 10, 110, \"Yaw: \" + EntityYaw( gShip )
Text 10, 130, \"Roll: \" + EntityRoll( gShip )
End Function


Das Schiff, also hier die Kamera, wird mit der Maus gedreht und mit der linken Maustaste beschleunigt.

Gruß - Xaron
Cerberus X - Monkey X Reloaded!

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group