raumschiff verfolgung problem

Übersicht BlitzBasic Blitz3D

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

 

sen-me

Betreff: raumschiff verfolgung problem

BeitragMi, Aug 03, 2005 9:38
Antworten mit Zitat
Benutzer-Profile anzeigen
hallo
ich wollte mal die 3d testen, und hab mir maln raumschiff gesicht (ausm example)

und nun will ich es bewegen lassen, aber automatisch (naja man erhöht/vermindert den speed schon!)

aba wie soll das gehn?

mein code hier:

BlitzBasic: [AUSKLAPPEN]
Global width=640,height=480,depth=16,mode=1
Global y_space#=height/18,option=3,screen
Global count_gfx=CountGfxModes(),gfx_option,mode_option=1
Global load_rotate_x,load_rotate_y,load,sky,sky_text,light,cam,speed
Dim gfx(0,2)
Graphics3D width,height,depth,mode
ClsColor 0,100,255
Cls
AppTitle \"Korsaren-Game V1.0\"
SetBuffer BackBuffer()
SeedRnd MilliSecs()
Include \"menu.bb\"
InitMenu()
While Not KeyHit(1)
Black()
Select screen
Case 4 : Game()
Case 5 : Anleitung()
Case 6 : Option()
Case 7 : End
Default : Menu()
End Select
Flip
Wend
End
Function Game()
cam=CreateCamera(load)
CameraRange cam,1,100000
light=CreateLight()
RotateEntity light,45,0,0
sky=CreateCube()
ScaleEntity sky,10000,10000,10000
sky_text=LoadTexture(\"all.png\")
load=LoadMesh(\"hfighter.3ds\")
PositionEntity load,0,-5,10
EntityTexture sky,sky_text
FlipMesh sky
While Not KeyHit(1)
If KeyDown(200)=1 Then load_rotate_x=load_rotate_x-1 : RotateEntity load,load_rotate_x,load_rotate_y,0
If KeyDown(203)=1 Then load_rotate_y=load_rotate_y+1 : RotateEntity load,load_rotate_x,load_rotate_y,0
If KeyDown(205)=1 Then load_rotate_y=load_rotate_y-1 : RotateEntity load,load_rotate_x,load_rotate_y,0
If KeyDown(208)=1 Then load_rotate_x=load_rotate_x+1 : RotateEntity load,load_rotate_x,load_rotate_y,0
If KeyDown(28)=1 Then speed=speed+1
If KeyDown(14)=1 Then speed=speed-1
MoveEntity load,0,0,speed
PointEntity cam,load
RenderWorld
Flip
Wend
End
End Function


allerdings rast das zu schnell wenn ich das so mache
gibts da ne andre lösung?
(die camera bewegt sich nicht, aber nur wegen testen der geschwindichkeit und so, sonst könnte man das nicht einschätzen)
  • Zuletzt bearbeitet von sen-me am Mi, Aug 03, 2005 10:23, insgesamt einmal bearbeitet

Ebola33

BeitragMi, Aug 03, 2005 9:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,
mach aus der integer Variablen speed eine Floatvariable also Speed#.
Und dann erhöst du diese nicht um 1 sondern 0.05 oder so. Musst du ausprobieren.

Mfg Ebola
ansteckend... Wink
verstaubtes Projekt : http://www.mitglied.lycos.de/ebola33/
 

sen-me

BeitragMi, Aug 03, 2005 9:56
Antworten mit Zitat
Benutzer-Profile anzeigen
cooool thx

(hatte ich schon auzsprobirt blos mein verdummtes gehirn hatte vergessen nen float zu amchen, und so rürte sich das raumschiff gar nicht ^^)
 

sen-me

BeitragMi, Aug 03, 2005 10:06
Antworten mit Zitat
Benutzer-Profile anzeigen
sry für doppelpost aba wenn ich auf edit gehe, wird die seite nicht geladen Question

naja

ich hab jetzt bei der verfolgung des raumschiffs ein problem

BlitzBasic: [AUSKLAPPEN]
Function Game()
cam=CreateCamera(load)
CameraRange cam,1,100000
light=CreateLight()
RotateEntity light,45,0,0
sky=CreateCube()
ScaleEntity sky,10000,10000,10000
sky_text=LoadTexture(\"all.png\")
load=LoadMesh(\"hfighter.3ds\")
PositionEntity load,0,-10,20
EntityTexture sky,sky_text
FlipMesh sky
While Not KeyHit(1)
If KeyDown(200)=1 Then load_rotate_x=load_rotate_x-1 : RotateEntity load,load_rotate_x,load_rotate_y,0
If KeyDown(203)=1 Then load_rotate_y=load_rotate_y+1 : RotateEntity load,load_rotate_x,load_rotate_y,0
If KeyDown(205)=1 Then load_rotate_y=load_rotate_y-1 : RotateEntity load,load_rotate_x,load_rotate_y,0
If KeyDown(208)=1 Then load_rotate_x=load_rotate_x+1 : RotateEntity load,load_rotate_x,load_rotate_y,0
If KeyDown(28)=1 Then speed#=speed#+0.05
If KeyDown(14)=1 Then speed#=speed#-0.05
If speed#>2 Then speed#=2
If speed#<-2 Then speed#=-2
MoveEntity load,0,0,speed#
MoveEntity cam,0,0,speed#
PointEntity cam,load
RenderWorld
Flip
Wend
End
End Function


aber die camera soll etwas höher sein, und diese höhe nicht verändern
(ich weis warum, point setzt ja auf das raumschiff, und somit bewegt es sich vorwärts auf das raumschiff zu, da sie aber nicht schneller als das schiff ist, wird sie genau hinter ihm sitzen)

wie ihr seht ist die das raumschiff(-10) auf der Y-Achse 10 nidriger als die camera(0)
und dan sollte wens gehen würde so bleiben

noch dazu würde ich mal fragen, wie ich das machen könnte wenn ich das raumschiff nach rechts z.b. drehe, das die camera noch etwas von der seite sieht (und nicht wie verbunden hinter ihm sitzt)

Ebola33

BeitragMi, Aug 03, 2005 12:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Schau mal in der Onlinehilfe unter Entityparent, dann kannst du dir diese ganze pointentity Aktion sparen. Wenn dein Raumschiff das Parentobjekt ist und du die Cam als Child dran klatscht dann bewegt sich die Cam schonmal immer automatisch mit dem Raumschiff. Aber du kannst die Cam auch unabhängig vom Raumschiff steuern (das Schiff wird also nicht mit bewegt). Und so gibst du der Cam je nach Drehwinkel oder Richtung einfach ein paar Bewegungen mit . Wink


Mfg Ebola
ansteckend... Wink
verstaubtes Projekt : http://www.mitglied.lycos.de/ebola33/
 

sen-me

BeitragMi, Aug 03, 2005 13:14
Antworten mit Zitat
Benutzer-Profile anzeigen
und wie mach ich ein fadenkreutz?

(wo es hinschießt)

ich hatte das so vor

maus steuert das schiff und gleichzeitig ist die maus das fandenkreutz (wie freelancer)

1. wie bewege ich das schiff ich die mausrichtung? (mit begrenzter rotation des schiffes)

2. wie schießt das schiff genau dahin wo das fadenkreutz ist?

3. kann man die geschosse irgendwie begrenzen? (wie weit sie fliegen) wenn ja wie
 

Dödel

BeitragMi, Aug 03, 2005 13:18
Antworten mit Zitat
Benutzer-Profile anzeigen
1. Du schaust, wie weit die Maus seit dem letzten Schleifendurchlauf in welche Richtung bewegt wurde und drehst das Schiff in diese Richtung.

2. Wenn du das Schiff genau in Richtung Maus ausrichtest und die Schüsse gerade vom Schiff abschießt, sollten sie dahin fliegen, wo du auch hinzielst.

3. Also wirklich... Du speicherst, wo ein Schuss abgeflogen ist, guckst in jeder Runde wie weit entfernt er von dem Punkt ist und wenn er mehr als xx Einheiten weit weg ist, verschwindet er.

mfg
Dödel

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMi, Aug 03, 2005 14:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Dödel hat Folgendes geschrieben:
3. Also wirklich... Du speicherst, wo ein Schuss abgeflogen ist, guckst in jeder Runde wie weit entfernt er von dem Punkt ist und wenn er mehr als xx Einheiten weit weg ist, verschwindet er.


Das würde aber bedeuten, daß für jeden aktiven Schuss, zusätzlich zur aktuellen Position auch die Ursprungsposition gespeichert werden muß, und diese dann bei jedem Schleifendurchlauf per Pythagoras (wegen 3D als Qubikwurzel ???) berechnet werden muß.

Oder man kann auch einfach die Flugdauer festlegen, und fertig ist. Währe mein Vorschlag...
 

sen-me

BeitragMi, Aug 03, 2005 15:41
Antworten mit Zitat
Benutzer-Profile anzeigen
wie soll man die berechnen O.o

und wie check ich wie weit seit dem letzten durchgang?
MouseXSpeed() ? (oda wars SpeedX?)

und wegen dem schießen:

wie gesagt, die rotation ist auf -+35(links rechts) bis -+15(oben unten) begrentzt

und wenn die maus ganz rechts am bildschirmrand ist = fadenkreutz, dann schießt das schiff aber nicht dorthin, sondern immer grade aus (fakt, waffen müssen sich auch rotieren)

aber wie man die waffen auf ein schiff machen will, die sich dazu auch noch nach mausrichtung rotieren, ist mirn rätzel..
(oda muss ich für jede waffe aufm schiff auch noch moveentity machen O.o da müsste ich beim schiffrotation aber auch noch die waffen auf dem schiff berechnen.. was dan eigentlich ziemlich umständlich ist, oda gibts ne bessere lösung?

Xaron

BeitragMi, Aug 03, 2005 16:10
Antworten mit Zitat
Benutzer-Profile anzeigen
sen-me hat Folgendes geschrieben:
wie soll man die berechnen O.o


Indem Du Dir einfach die Anfangszeit merkst:

Startzeit = MilliSecs()

Und in jedem Schleifendurchlauf:

Flugzeit = MilliSecs() - StartZeit
If Flugzeit > xyz ... ;Schuss aus der Liste entfernen


Zitat:
und wie check ich wie weit seit dem letzten durchgang?
MouseXSpeed() ? (oda wars SpeedX?)


???

Zitat:
und wegen dem schießen:

...aber wie man die waffen auf ein schiff machen will, die sich dazu auch noch nach mausrichtung rotieren, ist mirn rätzel..
(oda muss ich für jede waffe aufm schiff auch noch moveentity machen O.o da müsste ich beim schiffrotation aber auch noch die waffen auf dem schiff berechnen.. was dan eigentlich ziemlich umständlich ist, oda gibts ne bessere lösung?


Also: Dein Fadenkreuz zeigt quasi immer nach vorn in Flugrichtung, oder?

Wenn ja, dann machst Du einfach ein:

TFormVector 0, 0, 1, schiff, 0

Damit hast Du die Anfangsrichtung (TFormedX...)

Ich hab das ganze etwas komplexer gemacht, bei sind die 2 Waffen links und rechts am Schiff als eigene Objekte befestigt und haben als Parent das Schiff. Damit drehen sie sich automatisch mit. Dadurch ballern die Schüsse aber auch etwas links und rechts versetzt vom Schiff raus, weshalb ich auch die Startposition entsprechend transformieren muss.

Bei Interesse kann ich ja mal das Codestück posten...

Gruß - Xaron
Cerberus X - Monkey X Reloaded!
 

sen-me

BeitragMi, Aug 03, 2005 17:03
Antworten mit Zitat
Benutzer-Profile anzeigen
das problem ist, man muss nicht umbedingt 2 waffen aufm schiff haben, mann kann sein schiff ausrüsten...


und wie bewege ich das fadenkreutz (mit der maus)

kapir ich nicht o.O

Xaron

BeitragDo, Aug 04, 2005 7:36
Antworten mit Zitat
Benutzer-Profile anzeigen
sen-me hat Folgendes geschrieben:
das problem ist, man muss nicht umbedingt 2 waffen aufm schiff haben, mann kann sein schiff ausrüsten...


Das ist kein Problem, das ist bei mir auch so. Waffen sind bei mir genauso Objekte (Types) wie das Schiff selbst.
Ich habe dann eine Update-Funktion, die durch alle Waffenobjekte des Schiffes durchläuft und prüft, welche Aktion ausgeführt werden soll (je nach Typ der Waffe)

Zitat:
und wie bewege ich das fadenkreutz (mit der maus)

kapir ich nicht o.O


Gut, das Fadenkreutz soll also nicht star nach vorn gerichtet sein? Aber es soll doch sicher immer auf der Z-Achse (also in Flugrichtung) des Schiffes liegen, oder? Was Du möchtest, ist so eine Art "träge" Kamera, die quasi immer der aktuellen Richtung "hinterherzieht"?

Gruß - Xaron
Cerberus X - Monkey X Reloaded!
 

sen-me

BeitragDo, Aug 04, 2005 15:56
Antworten mit Zitat
Benutzer-Profile anzeigen
ich wollte so ne steuerung wie Freelancer, die gefällt mir recht gut

das schiff fliegt immer der mausrichtung nach (auser wenn man es fixiert)

und schießen tuts auch immer (egal ob es nun gradeaus vom schiff ist oda rechts vom schiff) zur maus position (allerdings müssen dan halt die schüsse nicht vom schiff selbst, sondern von den waffen kommen)

Xaron

BeitragFr, Aug 05, 2005 15:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Gut, ich kenne jetzt die Freelancer-Steuerung nicht.

Deine Waffen feuern immer geradeaus in Flugrichtung des Schiffes?
Wenn ja, dann musst Du zunächst die Lage Deines Schiffes im Raum bestimmen und Dir diese Anfangsrichtung für Deine Waffen merken.

Am besten machst Du einen Schritt nach dem anderen, dann können wir Dir auch leichter helfen, als wenn Du gleich die komplette (wahrscheinlich recht komplexe) Steuerung programmierst.

Also:
1. Schritt: Dreh das Schiff mit der Maus im Raum.
2. Schritt: Feuere einen Schuß ab, und zwar von der Position des Schiffes aus.
3. Schritt: Merk Dir die Rotation Deines Schiffes und beziehe diesen Anfangswert in die Flugbahn Deines Geschosses ein.
4. Schritt: Verschiebe die Anfangsposition des Geschosses dorthin, wo Deine Waffenmündung ist.

Bis zu welchem Schritt kommst Du ohne Probleme?

Gruß - Xaron
Cerberus X - Monkey X Reloaded!
 

sen-me

BeitragSa, Aug 06, 2005 12:20
Antworten mit Zitat
Benutzer-Profile anzeigen
ka, aber ich weis jetzt schon wos hängen wird, spätestens punkt 4

weil die schüsse nicht gradeaus in flugrichtung gehen sondern immer zum mauszeiger (und demnach rotieren die waffen sich auch zu dem, d.h. die waffen haben die mündung immer zum mauszeiger hin, aber das schiff ist nur begrentzt rotierbar (die waffen nicht)

Xaron

BeitragSa, Aug 06, 2005 15:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Gut, dann arbeite Dich erstmal bis Punkt 3 vor, der Rest ist dann auch nicht mehr schwer. Immer einen Schritt nach dem anderen machen, dann ist es einfacher.
Du kannst nicht gleich mit Schritt 4 beginnen, das wird nichts. Wink

Also, bau Schüsse erstmal so ein, dass sie ungesteuert geradeaus fliegen.

Gruß - Xaron
Cerberus X - Monkey X Reloaded!
 

sen-me

BeitragSa, Aug 06, 2005 17:36
Antworten mit Zitat
Benutzer-Profile anzeigen
schritt 1:

wie drehe ich das schiff den? ich hab ja schon probleme mit dem fadenkreuz.

also wie drehe ich es zum mauszeiger

Xaron

BeitragSa, Aug 06, 2005 17:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich würde es zunächst mal so machen, dass sich das Schiff mit der Maus synchron dreht. Das Fadenkreuz ist dabei immer in der Mitte des Bildschirms.

Danach machen wir weiter. Wink

Gruß - Xaron
Cerberus X - Monkey X Reloaded!
 

sen-me

BeitragSa, Aug 06, 2005 21:41
Antworten mit Zitat
Benutzer-Profile anzeigen
ja nichtmal das geht Rolling Eyes

Xaron

BeitragMo, Aug 08, 2005 8:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Du willst mir erzählen, Du möchtest einen Shooter wie Freelancer programmieren, kannst aber nichtmal die Kamera (=das Schiff) mit der Maus drehen und ein Fadenkreuz in die Mitte malen, was ja nun in wirklich jedem Beispielprogramm drin ist?

Tut mir leid, wenn ich da etwas hart bin, aber irgendwie scheint mir das darauf hinauszulaufen, dass Du den kompletten Sourcecode für Dein Spiel brauchst...

Ich muss mal einen Beispielcode rauskramen, dauert ein Weilchen...

Gruß - Xaron
Cerberus X - Monkey X Reloaded!

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group