GTA Scrolling-Problem

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

rambo256

Betreff: GTA Scrolling-Problem

BeitragSa, Mai 15, 2004 9:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi Leute!
Ich arbeite gerade an einem GTA Spiel,soll Big Town heißen 8)
Kommen wir zum Problem:
Das Scrolling selber habe ich selber hinbekommen,ist ja nicht so schwierig:

Code: [AUSKLAPPEN]
If modus_car = 1 Or modus_gangster = 1 Then
   
   If KeyDown(key_hoch) And Player_tile_X > 0 And Player_Tile_X < Max_tiles_x And Player_tile_Y > 0 And Player_Tile_Y < max_tiles_y Then
      Map_X = Map_X - Cos(Winkel_Player+90)*scroll_speed#
      Map_Y = Map_Y - Sin(Winkel_Player+90)*scroll_speed#   
   EndIf
   
   If KeyDown(key_runter) And Player_tile_X > 0 And Player_Tile_X < Max_tiles_x And Player_tile_Y > 0 And Player_Tile_Y < max_tiles_y Then
      Map_X = Map_X + Cos(Winkel_Player+90)*scroll_speed#
      Map_Y = Map_Y + Sin(Winkel_Player+90)*scroll_speed#   
   EndIf
   
EndIf


Ich habe auch schon ein Auto eingebaut,aber wenn ich mich bewege,dann bleibt das auto scheinbar nicht an ort und stelle auf der Karte stehen,hoffe ihr wisst was ich meine...
Wenn nicht dann sagt mir bescheid!!!
Könntet ihr mir vll ein paar Hilfen geben,muss nicht unbedingt Code sein,nur Denkanstöße wären nicht schlecht!!!

THX

Gossi

BeitragSa, Mai 15, 2004 11:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Hmm, die Lösung zu finden ist schwierig. Ich vermute mal, dass du das Auto beim zeichnen oder berechnen auf falsche Koordinaten setzt. Gib uns mal auch diese Code-Auszüge.
Alle Wasser laufen ins Meer, doch wird das Meer nicht voller; an den Ort, dahin sie fließen, fließen sie immer wieder. (...) Was geschehen ist, eben das wird hernach sein. Was man getan hat, eben das tut man hernach wieder, und es geschieht nichts neues unter der Sonne. Geschieht etwas, von dem man sagen könnte: "Sieh, das ist neu"? Es ist längst vorher auch geschehen in den Zeiten, die vor uns gewesen sind.

rambo256

BeitragSa, Mai 15, 2004 11:38
Antworten mit Zitat
Benutzer-Profile anzeigen
hier der code für das auto:

Code: [AUSKLAPPEN]

.autos_zeichnen_positionen_aktualisieren

For i=0 To max_cars
   cars(auto,2) = cars(auto,2) - Cos(cars(auto,4)+90)*cars(auto,8)
   cars(auto,3) = cars(auto,3) - Sin(cars(auto,4)+90)*cars(auto,8)
   
   If modus_car = 0 Then
      cars(auto,8) = cars(auto,8)-(cars(auto,8)*cars(auto,9))   
   EndIf

   If cars(auto,4) >359 Then cars(auto,4) = 0
   If cars(auto,4) <0   Then cars(auto,4) = 359

   If cars(i,0) = 1 Then
      DrawImage cars_gfx(cars(0,4),auto),cars(0,2),cars(0,3)
      DrawImage kollisionsbilder(cars(i,4),i),cars(0,2),cars(0,3)
   EndIf

Next


mehr?
ist kein Problem!!!

Gossi

BeitragSa, Mai 15, 2004 11:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Also wie meinst du das.

Du sitzt im Auto und fährst. Dann scrollt die Map an dir vorbei aber das Auto sollte auf dem Bildschirm die gleiche Position haben?

Oder

Du läufst neben dem Auto durch die Gegend, sodass die Map scrollt. Wenn du wieder zurückkommst steht das Auto nicht mehr da, wo es vorher war?


Was meinst du mit "scheinbar"? Verändert sich die Position des Autos nur gering, oder verschwindet es ganz?

Was wird in den Arrays cars(auto,unbekannt) gespeichert, also was bedeutet cars(auto,4), cars(auto,2) oder cars(auto,8)?
Alle Wasser laufen ins Meer, doch wird das Meer nicht voller; an den Ort, dahin sie fließen, fließen sie immer wieder. (...) Was geschehen ist, eben das wird hernach sein. Was man getan hat, eben das tut man hernach wieder, und es geschieht nichts neues unter der Sonne. Geschieht etwas, von dem man sagen könnte: "Sieh, das ist neu"? Es ist längst vorher auch geschehen in den Zeiten, die vor uns gewesen sind.

rambo256

BeitragSa, Mai 15, 2004 11:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Also
Ich meine,wenn ich so umherlaufe,dann bewegt sich das Auto immer mit!!!
Es soll aber da stehen bleiben,wo ich es auch "geparkt" habe!!!
Also wenn ich nach rechts laufe,das sich dann das Auto nicht mitbewegt,sondern einfach da stehen bleibt.

Code: [AUSKLAPPEN]
.Autos

;GT
cars(0,0) = 1     ;----> zeichnen?
cars(0,1) = "GT"  ;----> Name?
cars(0,2) = 5*Tile_Width   ;----> X-Position
cars(0,3) = 7*tile_Height   ;----> Y-Position
cars(0,4) = 90    ;----> Winkel
cars(0,5) = 0.06  ;----> Beschleunigung
cars(0,6) = 0.8   ;----> Bremsen
cars(0,6) = 5     ;----> Höchstgeschwindigkeit
cars(0,7) = car_gfx_GT   ;----> GFX
cars(0,8) = 0   ;----> Geschwindikgeit
cars(0,9) = 0.02   ;----> Trägheit


Wenn du magst,dann kann ich dir das Prog auch mal schicken.

Gossi

BeitragSa, Mai 15, 2004 12:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich vermute den Fehler hier:

Code: [AUSKLAPPEN]

If cars(i,0) = 1 Then
      DrawImage cars_gfx(cars(0,4),auto),cars(0,2),cars(0,3)


Versuche folgendes:
Code: [AUSKLAPPEN]

If cars(i,0) = 1 Then
      DrawImage cars_gfx(cars(0,4),auto),cars(0,2)-Map_X,cars(0,3)-Map_Y


Daran musst du aber noch rumbasteln.

Davon abgesehen, zeichnest du alle Autos auf die Koordinaten des Autos nummer Null!
Alle Wasser laufen ins Meer, doch wird das Meer nicht voller; an den Ort, dahin sie fließen, fließen sie immer wieder. (...) Was geschehen ist, eben das wird hernach sein. Was man getan hat, eben das tut man hernach wieder, und es geschieht nichts neues unter der Sonne. Geschieht etwas, von dem man sagen könnte: "Sieh, das ist neu"? Es ist längst vorher auch geschehen in den Zeiten, die vor uns gewesen sind.

rambo256

BeitragSa, Mai 15, 2004 12:08
Antworten mit Zitat
Benutzer-Profile anzeigen
jo,thx,das mit dem ich zeichne alle autos auf 0,da habe ich mich verschrieben,statt i=0 muss da auto=0 hin,thx,werde es mal ausprobiern...

rambo256

BeitragSa, Mai 15, 2004 12:14
Antworten mit Zitat
Benutzer-Profile anzeigen
mhhh.läuft immer noch mit....

Gossi

BeitragSa, Mai 15, 2004 12:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]

If cars(i,0) = 1 Then
      DrawImage cars_gfx(cars(0,4),auto),cars(0,2),cars(0,3)


In den Koordinaten muss eine auto-Variable stehen.
Ersetze auch hier das i durch das auto.
Hinter die Koordinaten muss -Map_X und -Map_Y!

Zeig mal den neuen Code her.
Alle Wasser laufen ins Meer, doch wird das Meer nicht voller; an den Ort, dahin sie fließen, fließen sie immer wieder. (...) Was geschehen ist, eben das wird hernach sein. Was man getan hat, eben das tut man hernach wieder, und es geschieht nichts neues unter der Sonne. Geschieht etwas, von dem man sagen könnte: "Sieh, das ist neu"? Es ist längst vorher auch geschehen in den Zeiten, die vor uns gewesen sind.

rambo256

BeitragSa, Mai 15, 2004 12:28
Antworten mit Zitat
Benutzer-Profile anzeigen
hier:
Code: [AUSKLAPPEN]
.autos_zeichnen_positionen_aktualisieren

For auto=0 To max_cars
   cars(auto,2) = cars(auto,2) - Cos(cars(auto,4)+90)*cars(auto,8)
   cars(auto,3) = cars(auto,3) - Sin(cars(auto,4)+90)*cars(auto,8)
   
   If modus_car = 0 Then
      cars(auto,8) = cars(auto,8)-(cars(auto,8)*cars(auto,9))   
   EndIf

   If cars(auto,4) >359 Then cars(auto,4) = 0
   If cars(auto,4) <0   Then cars(auto,4) = 359

   If cars(auto,0) = 1 Then
      ;DrawImage cars_gfx(cars(0,4),auto),cars(0,2),cars(0,3)
      DrawImage kollisionsbilder(cars(auto,4),auto),cars(0,2),cars(0,3)
       DrawImage cars_gfx(cars(0,4),auto),cars(0,2)-Map_X,cars(0,3)-Map_Y

   EndIf

Next

rambo256

BeitragSa, Mai 15, 2004 12:37
Antworten mit Zitat
Benutzer-Profile anzeigen
aaah,so funzt es perfekt:

Code: [AUSKLAPPEN]
.autos_zeichnen_positionen_aktualisieren

For auto=0 To max_cars
   cars(auto,2) = cars(auto,2) - Cos(cars(auto,4)+90)*cars(auto,8)
   cars(auto,3) = cars(auto,3) - Sin(cars(auto,4)+90)*cars(auto,8)
   
   If modus_car = 0 Then
      cars(auto,8) = cars(auto,8)-(cars(auto,8)*cars(auto,9))   
   EndIf

   If cars(auto,4) >359 Then cars(auto,4) = 0
   If cars(auto,4) <0   Then cars(auto,4) = 359

   If cars(auto,0) = 1 Then
      DrawImage kollisionsbilder(cars(auto,4),auto),cars(0,2),cars(0,3)
       DrawImage cars_gfx(cars(0,4),auto),cars(0,2)-(-Map_X*Tile_Width),cars(0,3)-(-Map_Y*Tile_Height)

   EndIf

Next

rambo256

BeitragSa, Mai 15, 2004 12:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Big THX für dedine Hilfe!!!

rambo256

BeitragSa, Mai 15, 2004 14:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Jetzt muss ich doch auch,diesen Teil in alle Kollisionsabfragen einbinden oder?Mit dem Teil meine ich: -(-map_X/Y*tile_width/height)
oder muss ich das woanders einfügen?
Also so in ungefähr?

Code: [AUSKLAPPEN]
If modus_gangster = 1 Then
For x=0 To Max_Tiles_X
   For y=0 To Max_tiles_Y
      If ImageRectCollide(Town1_gfx_2,x*tile_width-(-map_X*tile_width),y*tile_height-(-map_Y*tile_height),tile_matrix(2,x,y),Player_X-12.5,Player_Y-20,25,40) Then
         Player_X# = Old_Player_X#
         Player_Y# = Old_Player_Y#
      EndIf
   Next
Next

Aber das funzt nicht Crying or Very sad

Gossi

BeitragMo, Mai 17, 2004 21:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn du mit scrolling arbeitest, musst du dieses -map_x*width an alle Koordinaten einbinden, die vom scrolling betroffen sind. Also auch hier, in der ImagesCollide-Klammer:

Code: [AUSKLAPPEN]

Player_X-12.5,Player_Y-20
Alle Wasser laufen ins Meer, doch wird das Meer nicht voller; an den Ort, dahin sie fließen, fließen sie immer wieder. (...) Was geschehen ist, eben das wird hernach sein. Was man getan hat, eben das tut man hernach wieder, und es geschieht nichts neues unter der Sonne. Geschieht etwas, von dem man sagen könnte: "Sieh, das ist neu"? Es ist längst vorher auch geschehen in den Zeiten, die vor uns gewesen sind.

rambo256

BeitragDi, Mai 18, 2004 13:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Also,ich hab mal ne kollisionsvariable reingemacht in der Kolli-Abfrage:

Code: [AUSKLAPPEN]
If modus_gangster = 1 Then
For x=0 To Max_Tiles_X
   For y=0 To Max_tiles_Y
      If ImageRectCollide(Town1_gfx_2,(x*tile_Width)-(-map_X*tile_width),(y*tile_Height)-(-map_Y*tile_Height),tile_matrix(2,x,y),Player_X-12.5,Player_Y-20,25,40) Then
      collides = collides+1
      EndIf
   Next
Next


Und die zeigt mir ne kollision an!!!
Jetzt muss ich doch wieder die alte Spielerpostionherstellen.
Mit Old_Player_x/Y und so,oder sollte ich ne Old_Map_X/Y variable einführen?
Asus F53z

Das Leben ist eine reine Konkatenation...

Gossi

BeitragDi, Mai 18, 2004 20:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Also genau genommen gehört das scrolling absolut nicht zu den kollisionsabfragen. Das Scrolling ist nur für die Bildschirmanzeige gedacht und hat bei den berechnungen nichts zu suchen. Also entweder du machst bei allen Koordinaten einer Kollisionsabfrage dieses -map_x*width oder gar nicht. Deshalb hier die beiden Möglichkeiten:

Code: [AUSKLAPPEN]

If modus_gangster = 1 Then
For x=0 To Max_Tiles_X
   For y=0 To Max_tiles_Y
      If ImageRectCollide(Town1_gfx_2,x*tile_width-(-map_X*tile_width),y*tile_height-(-map_Y*tile_height),tile_matrix(2,x,y),Player_X-12.5-(-map_X*tile_width),Player_Y-20-(-map_Y*tile_height),25,40) Then
         Player_X# = Old_Player_X#
         Player_Y# = Old_Player_Y#
      EndIf
   Next
Next


oder

Code: [AUSKLAPPEN]

If modus_gangster = 1 Then
For x=0 To Max_Tiles_X
   For y=0 To Max_tiles_Y
      If ImageRectCollide(Town1_gfx_2,x*tile_width,y*tile_height,tile_matrix(2,x,y),Player_X-12.5,Player_Y-20,25,40) Then
         Player_X# = Old_Player_X#
         Player_Y# = Old_Player_Y#
      EndIf
   Next
Next


Eigentlich sollte beides funktionieren.
Alle Wasser laufen ins Meer, doch wird das Meer nicht voller; an den Ort, dahin sie fließen, fließen sie immer wieder. (...) Was geschehen ist, eben das wird hernach sein. Was man getan hat, eben das tut man hernach wieder, und es geschieht nichts neues unter der Sonne. Geschieht etwas, von dem man sagen könnte: "Sieh, das ist neu"? Es ist längst vorher auch geschehen in den Zeiten, die vor uns gewesen sind.

rambo256

BeitragDi, Mai 18, 2004 20:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja das funzt ja auch,also die Variable gibt mir ne kolli zurück!!!
Aber der Spieler bleibt nicht stehen.Irgendwie funzt das mit dem
Player_X = Old_Player_X nicht Crying or Very sad

Ich habe auch

Code: [AUSKLAPPEN]
Old_player_X = Player_X
Old_Player_Y = Player_Y


vor der eigentlichen Steuerung+Bewegung geschrieben...

also mein bisheriger Code:

Code: [AUSKLAPPEN]
If modus_gangster = 1 Then
For x=0 To Max_Tiles_X
   For y=0 To Max_tiles_Y
      If ImageRectCollide(Town1_gfx_2,(x*tile_Width)-(-map_X*tile_width),(y*tile_Height)-(-map_Y*tile_Height),tile_matrix(2,x,y),Player_X-12.5,Player_Y-20,25,40) Then
         Player_X = Old_Player_X
         Player_Y = Old_Player_Y
         collides = collides+1
      EndIf
   Next
Next


Also irgendwie versteh ich nicht,was da falsch sein soll.

PS: Danke für deine Mühen Gossi!!!
Ich glaube,ich schicke dir mal den gesamten code per PN...
Asus F53z

Das Leben ist eine reine Konkatenation...

Gossi

BeitragDi, Mai 18, 2004 21:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:

also mein bisheriger Code:

Code: [AUSKLAPPEN]

If modus_gangster = 1 Then
For x=0 To Max_Tiles_X
   For y=0 To Max_tiles_Y
      If ImageRectCollide(Town1_gfx_2,(x*tile_Width)-(-map_X*tile_width),(y*tile_Height)-(-map_Y*tile_Height),tile_matrix(2,x,y),Player_X-12.5,Player_Y-20,25,40) Then
         Player_X = Old_Player_X
         Player_Y = Old_Player_Y
         collides = collides+1
      EndIf
   Next
Next




Hmm aber du hast ja gar nichts von dem verändert, was ich geschrieben habe?! (siehe mein letzter beitrag). Ich hab jetzt den ganzen Code gesehen und will nur sicher gehen dass wir uns jetzt nur über den gangster-modus und nicht über das fahren unterhalten?![/code]
Alle Wasser laufen ins Meer, doch wird das Meer nicht voller; an den Ort, dahin sie fließen, fließen sie immer wieder. (...) Was geschehen ist, eben das wird hernach sein. Was man getan hat, eben das tut man hernach wieder, und es geschieht nichts neues unter der Sonne. Geschieht etwas, von dem man sagen könnte: "Sieh, das ist neu"? Es ist längst vorher auch geschehen in den Zeiten, die vor uns gewesen sind.

rambo256

BeitragDi, Mai 18, 2004 21:05
Antworten mit Zitat
Benutzer-Profile anzeigen
jaja,über den Gangster mod.
Das prob ist:
Bei meinem Code zeigt der ne colli an,setzt die spieler-position aber nicht zurück...
Asus F53z

Das Leben ist eine reine Konkatenation...

Gossi

BeitragMi, Mai 19, 2004 15:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Wirklich ne harte Nuss.

Bist du dir ganz sicher, dass die Kollision zum richtigen Zeitpunkt zu stande kommt? Ich kann mir nicht vorstellen, dass das mit dieser Zeile funktionieren kann:

Code: [AUSKLAPPEN]

 If ImageRectCollide(Town1_gfx_2,(x*tile_Width)-(-map_X*tile_width),(y*tile_Height)-(-map_Y*tile_Height),tile_matrix(2,x,y),Player_X-12.5,Player_Y-20,25,40)


Versuch auch, die Old-Variablen zu Floats zu machen. Ich hab gesehen, dass es Ints sind, während die Player-Position Floats sind.
Alle Wasser laufen ins Meer, doch wird das Meer nicht voller; an den Ort, dahin sie fließen, fließen sie immer wieder. (...) Was geschehen ist, eben das wird hernach sein. Was man getan hat, eben das tut man hernach wieder, und es geschieht nichts neues unter der Sonne. Geschieht etwas, von dem man sagen könnte: "Sieh, das ist neu"? Es ist längst vorher auch geschehen in den Zeiten, die vor uns gewesen sind.

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group