|
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Chewie Super JLI'ler
Anmeldedatum: 17.07.2003 Beiträge: 382
Medaillen: Keine
|
Verfasst am: 01.08.2003, 11:03 Titel: Scrolling-Theorien |
|
|
Ich mach grad ein Autorennen aus Vogelpersp., bei dem das Auto immer im Mittelpunkt steht und der Hintergrund immer gescrollt wird. Nachdem ich jetzt schon ewig versuche, aus meinem Hintergrund(sysmem) eine Zeile und Spalte rauszukopieren, und auf einem Buffer und dem Backbuffer richtig wieder zusammenzusetzen, und es immer noch nicht richtig funkt, hab ich mir gedacht, dass ich es jetzt vorerst einfacher mache.
Ich will mir meinen ganzen Hintergrund im AGP-Speicher anlegen und dann einfach immer das ganze nächste Bild rauskopieren. Der Auschnitt, der kopiert wird, ist dann etwa 500x300.
Bevor ich das jetzt so mache, wollte ich wissen, ob das von der Performance her noch vertretbar ist. Dass es keine optimale Lösung ist, ist mir klar.
-chewie |
|
Nach oben |
|
|
Christian Rousselle Site Admin
Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 01.08.2003, 11:20 Titel: |
|
|
500x300x32 Bit (?) ist nicht so wenig. Aber für einen ersten Test, kannst du es ruhig so machen. |
|
Nach oben |
|
|
Chewie Super JLI'ler
Anmeldedatum: 17.07.2003 Beiträge: 382
Medaillen: Keine
|
Verfasst am: 02.08.2003, 20:07 Titel: |
|
|
Hi, bin jetzt auf folgendes Problem gestossen:
Ich rechne mir den Stepx und Stepy in jedem Durchgang aus und berechne daraus dann den neuen Auschnitt...sieht dann ca. so aus:
Code: |
StepX = cos(TempRot) * m_CurSpeed / Framerate;
StepY = (sin(TempRot) * m_CurSpeed / Framerate)*(-1);
// nächstes Bild
m_CurScreen.left += StepX;
m_CurScreen.top += StepY;
m_CurScreen.right += StepX;
m_CurScreen.bottom += StepYy;
|
wenn das Auto jetzt langsam fährt, und man noch eine hohe Framerate hat, dann ist z.b. y oft kleiner als 0.5, wodurch gar nicht gescrollt wird, obwohl das Auto schon eine Rotation von 30 Grad hat.
Hab mir dann gedacht, ich zähl die Steps jeden Durchlauf rauf und setze Sie auf 0 zurück, wenn >1. Das funkt aber auch nicht gut...
Habt ihr da Ideen?
-chewie |
|
Nach oben |
|
|
Mr. Data Mini JLI'ler
Anmeldedatum: 16.09.2002 Beiträge: 39
Medaillen: Keine
|
Verfasst am: 02.08.2003, 20:48 Titel: |
|
|
Der Vorschlag den ich jetzt mache ist mit Sicherheit nicht der beste
aber ne Möglichkeit.
Fang doch erst an zu scrollen wenn der Wagen ne bestimmte Geschwindigkeit erreicht hat bzw. überschreitet.
Vielleicht geht´s so _________________ nothing is inmpossible |
|
Nach oben |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 02.08.2003, 20:56 Titel: |
|
|
Wenn du das Auto immer in der Mitte haben willst, dann kannst du doch einfach von den Koordinaten das Autos die Hälfte der Auflösung abziehen.
D.h. Das Auto wird sowieso in die Mitte gezeichnet(Bildschirmgröße durch 2)
Und jetzt hast du ja die Koordinaten des Autos in Relation zum Hintergrund. Wenn du nun von diesen Koordinaten die Hälfte der Bildschirmgröße abziehst, hast du den Punkt, der links oben bei 0/0 gezeichnet werden soll. _________________ www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console
Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet... |
|
Nach oben |
|
|
Chewie Super JLI'ler
Anmeldedatum: 17.07.2003 Beiträge: 382
Medaillen: Keine
|
Verfasst am: 02.08.2003, 21:23 Titel: |
|
|
@Mr.Data
Die Sache ist, das Problem besteht bis zu ziemlich grossen Geschwindigkeiten...wenn
s=100 (also 100px/sec)
r=0
dann krieg ich bei 85 Frames 1,1 als StepX....und das ist bei gerader Bewegung auf x....wenn dann eine Rotation dazukommt wirds eben <1, d.h er scrollt nicht mehr...
@Lord
ich bin mir nicht sicher ob das richtig verstanden hab, aber ich glaube so hätte ich das gleiche Problem |
|
Nach oben |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 02.08.2003, 22:56 Titel: |
|
|
@Chewie: Wenn du es so machst wie Lord, dann nicht... und warum scrollt er nicht mehr? Nimm doch für's berechnen floats und erst wenn du Blitten musst, castest du die Koordinaten zu Integer. _________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
Nach oben |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 03.08.2003, 12:11 Titel: |
|
|
Chewie hat Folgendes geschrieben: |
@Lord
ich bin mir nicht sicher ob das richtig verstanden hab, aber ich glaube so hätte ich das gleiche Problem |
Nein, da hättest du, wie Hazel schon richtig sagt, nicht das Problem.
Ich erläutere es nochmal:
Wenn du z.B. eine Auflösung von 800*600 hast, dann ist der Bildschirm auch 800 Pixel breit und 600 P. hoch. Für die größe des Sprites nehmen wir mal 100*100 Pixel.
Wenn du nun das Auto immer in die Mitte des Bildschirms zeichnen willst, dann zeichnest du es einfach an die Stelle X=(800/2-100/2)=350 | Y=(600/2-100/2)=250
Dann hast du die Koordinaten des Autos(XAuto und YAuto). Die linke obere Ecke des Terrains hat nun 0|0. Angenommen, du hast jetzt das Auto an der Stelle 1000|1200, dann müsstest du jetzt an die Stelle 0|0 des Bildschirms ab der folgenden Stelle des Terrains zeichnen: X=(XAuto-800/2)=600 | Y=(YAuto-600/2)=900.
Jetzt zeichnest du als Hintergrund an 0|0 das Rect (X=600|Y=900|Breite=800|Höhe=600) aus dem Terrain _________________ www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console
Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet... |
|
Nach oben |
|
|
Chewie Super JLI'ler
Anmeldedatum: 17.07.2003 Beiträge: 382
Medaillen: Keine
|
Verfasst am: 03.08.2003, 14:40 Titel: |
|
|
Yo, danke Lord...jetzt hab ichs kapiert und jetzt funkts auch einwandfrei...gute Idee das so herum anzugehen (wieso gibts hier keinen thumbs-up smily??)
@Hazel
wenn du fragst, warum er bei meiner Methode nicht scrollt: selbst mit floats geht es nicht, wenn du dir die Steps in jedem Durchlauf ausrechnest, weil z.B:
stepx = cos(20*pi/180) * 100 / 85
stepx = 0.41
wenn ich jetzt auf long caste, krieg ich 0 raus, ergo: er scrollt nicht! |
|
Nach oben |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
Powered by phpBB © 2001, 2005 phpBB Group Deutsche Übersetzung von phpBB.de
|