| Autor |
Beitrag |
Pyr0cracker
      
Beiträge: 164
Win XP, Ubuntu 8.04, openSUSE 11.0
Delphi 7 Personal
|
Verfasst: Mi 26.03.03 15:32
Hallo, ich bin dabei ein kleines Spiel(strategie-ähnlich, von oben) zumachen, weiss aber nicht wie ich scrollen kann.
nehme delphix.
kann mir jemand weiterhelfen? vielleicht kennt ihr ja auch ein gutes tutorial.
ciao,
|
|
maximus
      
Beiträge: 896
Win XP, Suse 8.1
Delphi 4/7/8 alles prof
|
Verfasst: Mi 26.03.03 17:14
Yo...is kein prob.
Du must einfach alle sprites, der map, in ein übergeordnetes sprite packen. Dann musst du nurnoch das eine sprite bewegen und alle anderen laufen mit.
|
|
mimi
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: Sa 29.03.03 21:17
sprints würde ich nicht nehmen: veraltet und zu langsam.
ich habe mal ein spiel angefagen , das kannst du scrollen und hast vor die eine map und hast ein rader.... wenn du willst kann ich dir es mal senden.
Es ist aber kein "strategie spiel" ......
und wo hast du jetzt dein problem ???
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
Pyr0cracker 
      
Beiträge: 164
Win XP, Ubuntu 8.04, openSUSE 11.0
Delphi 7 Personal
|
Verfasst: Fr 06.06.03 17:19
Alle Sprites in ein großes... hä?
@mimi: JAA, bitte schicks mir mal ([url=mailto:doriannagel@lycos.de]doriannagel@lycos.de[/url])
Darf ich das mit dem Radar abgucken? (natürlich nicht c&p)
Gruß
|
|
umpani
      
Beiträge: 389
|
Verfasst: Fr 06.06.03 18:32
Wie hast du denn deine Karte aufgebaut?
Wenn du z.B. ein Array, nennen wird es map hast (m : array[1..100,1..100] of irgendwas und der Ausschnitt, der auf dem Bildschirm gezeichnet wird 30 x 30 Karteneinheiten groß ist, kannst du es so machen:
Zeichnen der Karte:
(Postition im Kartenausschnitt (oben, links: integer))
Quelltext 1: 2: 3: 4: 5: 6: 7:
| for x := 1 to 30 do for y := 1 to 30 do begin "zeichenbefehl" map[x+oben, y+links] end;
dxdraw.flip; |
Diese (natürlich mit dem korrektem Zeichenbefehl) Procedure kann dann in eine OnTimer funktion eingebaut werden.
Wenn du jetzt "oben", oder/und "links" veränderst, scrollst du den Bildschirm. Dann mußt du noch entsprechende "Kollisionsabfragen" einbauen.
|
|
Pyr0cracker 
      
Beiträge: 164
Win XP, Ubuntu 8.04, openSUSE 11.0
Delphi 7 Personal
|
Verfasst: So 08.06.03 00:15
Hmm, mit Arrays kenne ich mich leider gar nicht aus.
Aber das mit dem Scrollen versteh ich. Glaub ich  .
@mimi: Danke! Is ja ne ganze Menge Soßen-code  aber ich werds mir mal angucken
|
|
umpani
      
Beiträge: 389
|
Verfasst: So 08.06.03 14:01
Arrays sind ganz einfach.
Arrays sind einfach eine Kette won gleichartigen Variabelen eines jeden Types. Jedes Glied dieser Kette ist von 0 bis x nummriert.
Diese Kette nennt man 1-Dimensionales Array.
Quelltext 1: 2: 3: 4:
| var daten: array[1..200] of integer; ....
daten[0] := 1; {dem Kettenglied Nr. 0 wird ein Wert zugewisen. In dem Fall ein Integerwert, weil das array so definiert worden ist} |
Zweidimensionales Array:
Quelltext 1: 2: 3: 4: 5:
| var daten: array[1..200,1..200] of Integer;
...
daten[0,5] := 1; {dem Kettengewebeglied x=0 und y = 0 (wie bei einer Tabelle) wird ein Integerwert zugeordnet} |
Ich hoffe das ist ein Einstieg für Dich in Arrays.
Gruß Umpani
_________________ Lernen, ohne zu denken, ist eitel; denken, ohne zu lernen, ist gefährlich. Konfuzius
|
|
Elayla
      
Beiträge: 79
|
Verfasst: So 08.06.03 14:17
Genau, stell die ein Array wie einen Karteikasten vor in dem Daten gespeichert werden.
Ein zweidimensionales Array kann man gut mit einem Schachbrett vergleichen oder einem Koordinatensystem.
Es gibt eine x-Koordinate A : Array[x..x2,...] of String
und eine y.Koordinate A : Array[...,y..y2] of String
Um auf ein Array zuzugreifen musst du folgendes schreiben:
(Beispiel)
edit1.text:= A[x]; x ist die Position im Array
oder zweidimensional:
edit1.text:= A[x,y];
und schreiben geht so:
A[x]:='text';
oder zweidimensional:
A[x,y]:='text'
Das müsste hoffentlich gereicht haben als Einführung 
|
|
mimi
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: So 08.06.03 18:05
es gibt zu array auch ein tutrial(was mir bei einem projekt übrings sehr geholfen hat:), obwolh nicht schon mit array umgehen konnte)
ist mein erste versuch gewesen sowas wie scrollen hinzubekommen.
im grunde mache ich dort folgendes:
ich definiere einen 2D array mit einer bestimmten größe
das sicht fehlt ist immer 640 X 480 pixel aber der arrray hatte glaube ich eine größe von 1024 X 764 oder so. und dann musst du nur nuch rechnen und das war das einfachste:)
wenn man einmal rauß hat wie das geht ist der rest einfach
die minkarte funktioniert so:
ich nehme einfach kleiner grafiken und zeichne die karte vom selben array und fertig.
@Pyr0cracker
und hast du den code verstanden ?
edit:
| Zitat: |
Aber das mit dem Scrollen versteh ich. Glaub ich
|
wie das denn wenn du dich nicht mit array auskennst ?
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
Pyr0cracker 
      
Beiträge: 164
Win XP, Ubuntu 8.04, openSUSE 11.0
Delphi 7 Personal
|
Verfasst: So 08.06.03 19:12
Okay, jetzt hab ich das mit den Arrays verstanden. Aber wie baut man daraus jetzt eine Karte?
hab mal nen scroll probiert aber map is nur 1 grafik ( hier
|
|
umpani
      
Beiträge: 389
|
Verfasst: So 08.06.03 19:36
Habe mir mal deinen Quelltext angeschaut.
Hier habe ich zunächst mal ein paar Anmerkungen allgemeiner Art.
1. Dein Spiel soll doch ein Strategiespiel werden. Da ist es nicht so sinvoll eine Karte zu haben, die sich aus nur einem Bitmap zusammensetzt.
2. Du hast eine Figur (soll man nur eine Figur steuern können?), die man mit der Tastatur steuert. Wenn man die Figur bewegt, bewegt sich eigentlich nur der Hintergrund und die Figur.
Zu 1.
Hier kommt der Array inst Spiel.
Du zwerfledderst dein Hintergrundbild in kleine Quadrate. z.B in 50x50 pix Grösse
Wenn man jetzt der Einfachheit halber davon ausgeht "1" ist Wiesenquadrat und "0" ist strassenquadrat dan wäre das:
1111011111
1111011111
1111011111
1111011111
1111011111
1111011111
eine Strasse durch eine Wiese von Oben nach unten.
"0" und "1" hast du in einer Imagelist (bildliste) bei den Positionen 0 und 1.
Das Karten array ist map: array[1..10,1..6] of integer;
Quelltext 1: 2: 3: 4: 5: 6:
| for x := 1 to 10 do for y := 1 to 6 do begin bildliste.items[map[x,y]].draw(dx.surface,x*50,y*50,0);{*50 wegen der Pixelgröße der Bilder} end; dx.flip; |
_________________ Lernen, ohne zu denken, ist eitel; denken, ohne zu lernen, ist gefährlich. Konfuzius
|
|
mimi
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: So 08.06.03 20:46
ich denke er hat mein spiel nicht verstanden sonst hätte er das so gemacht:)
ich weiß der qullcode ist nicht umbeding der sauberste 
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
Pyr0cracker 
      
Beiträge: 164
Win XP, Ubuntu 8.04, openSUSE 11.0
Delphi 7 Personal
|
Verfasst: Mo 09.06.03 03:43
Hallo, DANKE für die guten Tips.
Ich hab jetzt ein 2 dimensionales Array für eine Karte in meinem Spiel
Quelltext 1: 2:
| var map: array[0..10, 0..10] of integer; |
Ich kann sie auch abfrageen
Quelltext 1: 2: 3: 4: 5:
| for mapx := 0 to 10 do for mapy := 0 to 10 do begin BodenTex.Items[map[mapx,mapy]].draw(dx.surface,mapx*50,mapy*50,0);{*50 wegen der Pixelgröße der Bilder} end; |
Aber wie kann ich diesem Array übersichtlich Werte zuweisen? (in der OH stehts nicht drinn...)
z.B für: Quelltext
(z.B. 0=boden, 1=wand)
Ich meine... Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| map[1,1] := 0; map[1,2] := 0; map[1,3] := 0;
map[2,1] := 1; map[2,2] := 1; map[2,3] := 1;
map[3,1] := 0; map[3,2] := 0; map[3,3] := 0; |
...ist doch ein bisschen umständlich oder?
Gruß
|
|
Elayla
      
Beiträge: 79
|
Verfasst: Mo 09.06.03 09:32
Machs so, so hab ich es bei mir auch
| Zitat: |
Randomize;
For x:=1 To 48 Do
For y:=1 To 36 Do
Begin
Map[x,y]:=random(3)+1;
End;
|
|
|
umpani
      
Beiträge: 389
|
Verfasst: Mo 09.06.03 10:08
Im prinzip musst du ein zweites Programm schreiben. Einen Map-Editor.
In deinem fall tut es ein 10x10 großes Stringrid.
Ganz einfaches Beispiel.
Erstelle ein Stringgrid 10x10 ohne fixedrows und fixedcols: grid
Erstelle ein eingabefeld: eingabe
Quelltext 1: 2: 3: 4: 5: 6:
| Ereignis inclick bei grid
begin map[grid.row+1,grid.col+1] := strtoint(eingabe.text); {array wird gefüllt} grid.cells[grid.row+1,grid.col+1]:= strtoint(eingabe.text); {grid wird gefüllt} end; |
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| Speichern des Arrays procedure save; var dat: file of tmap; {Typ tmap = array[1..10,1..10] of integer;} begin assignfile(dat,'map.dat'); rewrite(dat); write(dat,map); closefile(dat); end; |
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| Laden des Arrays procedure save; var dat: file of tmap; {Typ tmap = array[1..10,1..10] of integer;} begin assignfile(dat,'map.dat'); reset(dat); read(dat,map); closefile(dat); end; |
_________________ Lernen, ohne zu denken, ist eitel; denken, ohne zu lernen, ist gefährlich. Konfuzius
|
|
Elayla
      
Beiträge: 79
|
Verfasst: Mo 09.06.03 11:00
Hmm stimmt, deins basiert ja nicht auf Zufallszahlen, sry 
|
|
Aya
      
Beiträge: 1964
Erhaltene Danke: 15
MacOSX 10.6.7
Xcode / C++
|
Verfasst: Mo 09.06.03 12:48
Hi,
| Pyr0cracker hat folgendes geschrieben: | Aber wie kann ich diesem Array übersichtlich Werte zuweisen? (in der OH stehts nicht drinn...)
z.B für: Quelltext
(z.B. 0=boden, 1=wand)
Ich meine... Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| map[1,1] := 0; map[1,2] := 0; map[1,3] := 0;
map[2,1] := 1; map[2,2] := 1; map[2,3] := 1;
map[3,1] := 0; map[3,2] := 0; map[3,3] := 0; |
...ist doch ein bisschen umständlich oder?
Gruß |
benutz einfach Constanten
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| const TYP_WIESE = 0; TYP_STRASSE = 1; [...] map[1,1] := TYP_WIESE; map[1,2] := TYP_WIESE; map[1,3] := TYP_WIESE;
map[2,1] := TYP_STRASSE; map[2,2] := TYP_STRASSE; map[2,3] := TYP_STRASSE;
map[3,1] := TYP_WIESE; map[3,2] := TYP_WIESE; map[3,3] := TYP_WIESE; |
Au'revoir,
Aya~
_________________ Aya
I aim for my endless dreams and I know they will come true!
|
|
mimi
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: Mo 09.06.03 15:36
nimm ein record und speichere da die werte rein ein level editor brauchst du nicht umbedingt
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
Elayla
      
Beiträge: 79
|
Verfasst: Mo 09.06.03 16:46
Ich hab das als Array gemacht und geht auch alles super, sogar das scrollen.
Aber wenn ich per Mauskoordinaten scrolle baut der jedesmal das Feld komplett neu auf, halt in die jeweilige Richtung verrückt.
Aber das ist recht langsam je kleiner die Felder werden und je mehr ich Anzeige.
Gibts ne Möglichkeit das besser zu machen und gibts ne Möglichkeit trotz 16x12 Fenster (jedes Feld hat 40x40 px) das Scrollen "Stufenlos" zu machen, also das ich nicht jedesmal um 40px "verschieben" muss?
Ein nahezu Stufenloses Scrollen mit 5px (trotz 40x40 Feldern) oder so wär genial
(Aber ich denke da brauch ich ne schnellere Bildaufbaumethode, bis jetzt rufe ich jedesmal ne Prozedur auf die DXDraw komplett neu aufbaut)
Hier mal der Link zum Programm wie es bisher ist, aber damit bin ich nicht wirklich zufrieden, sieht halt doof aus beim scrollen
www.pro3d.de/gonozal/Map-Creator.zip
Zuletzt bearbeitet von Elayla am Mo 09.06.03 17:09, insgesamt 1-mal bearbeitet
|
|
mimi
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: Mo 09.06.03 17:04
mit record meinte ich das so:
Delphi-Quelltext 1: 2: 3: 4:
| TMap = record visible, enabled:Bool; Typ, Tex: Integer; end; |
du muss doch nur schauen wo dein player steht und dann die fehlder entwerder +1 vor bzw. in die gewüntsche richtig scollren oder um 40 einheiten vorscrollen und fertig:)
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
|