GTA Scrolling-Problem
Übersicht

![]() |
rambo256Betreff: GTA Scrolling-Problem |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
mhhh.läuft immer noch mit.... | ||
![]() |
Gossi |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Big THX für dedine Hilfe!!! | ||
![]() |
rambo256 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() |
||
![]() |
Gossi |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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. |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group