AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Level erstellen

Ein Thema von devnull · begonnen am 11. Jul 2004 · letzter Beitrag vom 14. Jul 2004
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von devnull
devnull

Registriert seit: 5. Okt 2003
362 Beiträge
 
Delphi 7 Personal
 
#1

Level erstellen

  Alt 11. Jul 2004, 11:40
Hat jemand eine Idee, wie ich eine Welt erstellen kann???
Wenn das Raumschiff in den unteren (oberen, linken, rechten) Bildschirmbereich kommt, soll automatisch
der nächste Ausschnitt geladen und angezeigt werden.

Soll ich da Arrays (world=array[1..1000,1..1000] of byte) oder die Daten in Dateien speichern

mfg
devnull
-- Never change a running system --
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Level erstellen

  Alt 11. Jul 2004, 11:44
Zitat von devnull:
Hat jemand eine Idee, wie ich eine Welt erstellen kann???...
Ich glaube das hat Gott vor einigen Tausendjahren schon versucht
Um was geht es denn genau? Um ein Delphiprogramm? Dann wäre die Frage sicher besser bei "Multimedia" aufgehoben?
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
tommie-lie
(Gast)

n/a Beiträge
 
#3

Re: Level erstellen

  Alt 11. Jul 2004, 11:48
Ich würde ein zweidimensionales Array von ausreichener Größe nehmen (beispielsweise 100 Spielfelder) in dem die Felddaten gespeichert werden. Zusätzlich brauchst du Variablen um den sichtbaren Bereich festzuhalten, z.B. ein Rect (wobei die Koordinaten des Rechtecks nicht in Pixeln sondern in deinen Feldergrößen gemessen werden sollen, Rect(2,4,10,12) wäre also von Feld 2/4 bis Feld 10/12). Die Raumschiffposition speicherst du ebenfalls in absoluten Koordinaten des gesamten Spielbereiches, nicht nur im sichtbaren Bereich. Jedesmal wenn das Raumschiff nun über den Bereich des Rects hinausgeht, verschiebst du das Rect entsprechend.
Die Zeichenroutine legst du so aus, daß sie immer die linke obere Ecke des Rects links oben auf den Bildschirm positioniert, ansonsten kümmert sie sich um nichts, was die eigentliche Positionsermittlung angeht. Sie zeichnet also blind einfach den Inhalt des Rects.


Edit: @Sharky: das Ganze ist angelehnt an diesen Thread
  Mit Zitat antworten Zitat
Benutzerbild von devnull
devnull

Registriert seit: 5. Okt 2003
362 Beiträge
 
Delphi 7 Personal
 
#4

Re: Level erstellen

  Alt 11. Jul 2004, 12:24
Dann werd ich also mein Spielfeld bei einem Spielstart variabel in einem Array erstellen und -wenn überhaupt- beim Beenden in einer Datei ablegen.
Ich hatte erst Bedenken, bei der Größe des Arrays...
-- Never change a running system --
  Mit Zitat antworten Zitat
11. Jul 2004, 12:26
Dieses Thema wurde von "Sharky" von "Klatsch und Tratsch" nach "Sonstige Fragen zu Delphi" verschoben.
Wenn mir keiner etwas sagt verschiebe ich den Thread halt
tommie-lie
(Gast)

n/a Beiträge
 
#6

Re: Level erstellen

  Alt 11. Jul 2004, 13:25
Kommt drauf an, wie groß dein Spielfeld werden soll. Es muss auf jeden Fall in den Speicher passen. Wenn jedes Feld in einem Byte gespeichert wird, hast du bei einem 1000x1000 Spielfeld gerade mal knapp 1 MB, das sollte eigentlich in die gängigsten Hauptspeicher passen
  Mit Zitat antworten Zitat
Benutzerbild von devnull
devnull

Registriert seit: 5. Okt 2003
362 Beiträge
 
Delphi 7 Personal
 
#7

Re: Level erstellen

  Alt 11. Jul 2004, 14:13
Wenn ich jetzt den Array [1000*1000] Felder anlege, und immer die linke, obere Ecke in Bewegungsrichtung des Raumschiffs verschiebe, dann verschiebt sich doch der komplette Sichtbereich. Da ich nun aber kein DelphiX oder sowas benutze, frage ich mich, ob dieser Vorgang dann 1.) ruckelt und 2.) die einzelnen Bildchen beim ständigen Neuzeichnen nicht "flimmern"?

Skizze im Anhang
(Der Sichtbereich ist 28*21Felder groß; jedes Feld hat die Größe von 22*22Pixel)
(Der Sichtbereich wird nur am blauen Kreuz verschoben, damit das Raumschiff immer in der Mitte des SB ist)


mfg
devnull
Miniaturansicht angehängter Grafiken
welt.jpg  
-- Never change a running system --
  Mit Zitat antworten Zitat
tommie-lie
(Gast)

n/a Beiträge
 
#8

Re: Level erstellen

  Alt 11. Jul 2004, 14:42
Zitat von devnull:
Wenn ich jetzt den Array [1000*1000] Felder anlege, und immer die linke, obere Ecke in Bewegungsrichtung des Raumschiffs verschiebe, dann verschiebt sich doch der komplette Sichtbereich.
War das nicht Sinn der Sache?

Zitat:
Da ich nun aber kein DelphiX oder sowas benutze, frage ich mich, ob dieser Vorgang dann 1.) ruckelt und 2.) die einzelnen Bildchen beim ständigen Neuzeichnen nicht "flimmern"?
Probier's doch einfach aus
Am besten nicht alles einzeln Zeichnen sondern in einen Puffer und den gesamten Puffer mit BitBlt auf die Paintbox Blitten, das dürfte schon das schnellste sein, damit's nicht flimmert. Sollte es ruckeln, kannst du auch noch die Zeichenroutinen für den Puffer durch API-Aufrufe ersetzen (BitBlt), aber schneller wird's mit der GDI dann nicht mehr
  Mit Zitat antworten Zitat
Benutzerbild von devnull
devnull

Registriert seit: 5. Okt 2003
362 Beiträge
 
Delphi 7 Personal
 
#9

Re: Level erstellen

  Alt 12. Jul 2004, 16:44
Ich hab eine Frage zu BitBlt:

Also ich zeichne jetzt alle Planeten in die Paintbox:
Delphi-Quellcode:
Bmp := TBitmap.Create;
try
  case World[Ship1.XWorldpos+i, Ship1.YWorldpos+o] of
    1 : Bmp.LoadFromFile(Form1.SpielVerzeichnis+'\Graphics\planet_1.bmp');
    2 : Bmp.LoadFromFile(Form1.SpielVerzeichnis+'\Graphics\planet_2.bmp');
    3 : Bmp.LoadFromFile(Form1.SpielVerzeichnis+'\Graphics\planet_3.bmp')
    else Bmp.LoadFromFile(Form1.SpielVerzeichnis+'\Graphics\planet_3.bmp')
  end;
finally
  Form1.PaintBox1.Canvas.Draw(i*22, o*22, Bmp);
  Bmp.Free;
end;
Dieser Vorgang ist in einer Funktion abgelegt und kann unter Umständen mehrere Male pro Sekunde aufgerufen werden
(Immer wenn das Raumschiff in ein anderes Feld wechselt, also alle 22 Pixel Wegstrecke)

Kann man das so machen oder gibts da ne andere Lösung (ich hab da nich voll durchgeblickt, und verschiebe nur das
raumschiff mittels bitblt)


[EDIT]Ich hab mal die Oberfläche angehängt. Ich glaube, es ist besser, wenn nur der Sichtbereich bewegt wird, wenn das Raumschiff sich in den Bildschirmrand-Bereich begibt; da ansonsten der Anflug auf einen Planeten schwierig wird...[/EDIT]

mfg
devnull
Angehängte Dateien
Dateityp: zip cw.zip (329,6 KB, 15x aufgerufen)
-- Never change a running system --
  Mit Zitat antworten Zitat
tommie-lie
(Gast)

n/a Beiträge
 
#10

Re: Level erstellen

  Alt 12. Jul 2004, 19:02
Zitat von devnull:
Kann man das so machen oder gibts da ne andere Lösung (ich hab da nich voll durchgeblickt, und verschiebe nur das
raumschiff mittels bitblt)
In welche Richtung anders?
Bei Programmieren wirst du fast immer mehr als eine Lösung finden
Du kannst beispielsweise auch jeden Planeten anstatt der Draw mit BitBlt blitten, dann wäre das: BitBlt(Form1.Paintbox1.Canvas.Handle, i*22, o*22, Bmp.Width, Bmp.Height, Bmp.Canvas.Handle, 0, 0, SRCCOPY); Der Geschwindigkeitszuwachs dürfte je nach Anzahl der Planeten gerade noch meßbar sein...


Zitat:
Ich hab mal die Oberfläche angehängt. Ich glaube, es ist besser, wenn nur der Sichtbereich bewegt wird, wenn das Raumschiff sich in den Bildschirmrand-Bereich begibt; da ansonsten der Anflug auf einen Planeten schwierig wird...
Nein, wieso? Du musst nur als Zielpunkt des jeweiligen Zuges auch die absolute Position auf dem Spielfeld und nicht die auf dem Sichtbereich wählen. Wenn sich das Raumschiff unbedingt frei bewegen muss (und nicht in einem 22*22-Raster), kannst du die Positionsangabe auch aufsplitten, einmal in das Feld im Raster und einmal in die relative Position zur linken, oberen Ecke des Rasters, sodaß du zwei Koordinaten hast, die dann dann beim Zeichnen zusammenfügen kannst wie bei den Planeten.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:38 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz