bestimmter bereich in felder aufteilen in 50iger schritten

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Mia

Betreff: bestimmter bereich in felder aufteilen in 50iger schritten

BeitragMi, Feb 28, 2007 2:33
Antworten mit Zitat
Benutzer-Profile anzeigen
will nen feld machen bei einer grafik von 800,600

das feld soll von 100,400 - 600,600 gehen und immer 50,50 großes einzelfeld haben

da ichs entweder nicht versteh oder die funtion dim feld falsch verstanden hab und hier nix finde was ich verstehe frag ich einfach ma nach XD

ja man könnte es mit einem kleinen schachbrett vergleichen hab natürlich auch schon nach schach gesucht um die funtion zu finden aber >.<

ich will dann jedem einzeldem (50,50) feld ne variable zuordnen z.b. feld bei 100,400 das (50,50) groß is feld1 z.b.

nur peil ichs nit wie XD

naja ich schau ma ob ich was über objecte finde also vierecke vieleicht steht da ja was drin wie man bereiche zu variablen ordnen oder bereiche aufteilt
2 jahre RO npcs gescriptet
1 jahr RO maps selbergemacht
Text 250,250, "< 1 woche (Blitz) Basic geschrieben"

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMi, Feb 28, 2007 3:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Du hast irgendwo mal geschrieben, dass du am besten mit Code umgehen kannst. Also nicht lange lesen, sondern gleich was zum 'anfassen'.

Was du - wie ich meine - suchst, nennt sich eine Tilemap bzw. einige nennen es auch Tilemapengine. Ich persönlich würde ~10 Zeilen Code nicht als Engine benennen, aber egal. Hier mal das einfachste und kürzeste was ich auf meiner Platte so finden konnte.
Code:
;Grafikkramm
Graphics 320,320,32,2
SetBuffer BackBuffer()

;Variablen festlegen
Dim xy%(29,29)   ;Spielfeld mit 30^2 Tiles
xp%=10   ;Start-X-Position im Spielfeld
yp%=10   ;Start-Y-Position im Spielfeld

;ZufallsTiles
For y=0 To 29
 For x=0 To 29
  xy(x,y)=Rand(0,255)
 Next
Next




;Hauptroutine
While Not KeyHit(1)

 ;Tastaturabfrage
 If KeyHit(203) Then xp=xp-1:If xp<0 Then xp=0
 If KeyHit(205) Then xp=xp+1:If xp>20 Then xp=20
 If KeyHit(200) Then yp=yp-1:If yp<0 Then yp=0
 If KeyHit(208) Then yp=yp+1:If yp>20 Then yp=20

 ;Tiles
 For y=0 To 9
  For x=0 To 9
   Color xy(xp+x,yp+y),0,0
   Rect x*32,y*32,32,32,1
  Next
 Next

 Flip
Wend
End

Das Dim-Array ist bei mir zwei dimensional dim (x,y) - 1. Dimension x und 2. Dimension y. Jeweils jede Dimension habe ich mit einer Größe von 30 Felder bestückt 0 bis 29 ergibt 30...

In folgenden Codezeilen werden nun alle 30x30 Felder mit einem Zufallswert belegt, damit man auch was erkennt, wenn man sich in dieser Map bewegt. Code:
;ZufallsTiles
For y=0 To 29
 For x=0 To 29
  xy(x,y)=Rand(1,6)
 Next
Next


In der Hauptschleife sollte die Tastaturabfrage klar sein. Interessant ist es erst da, wo nun die Map auf dem Bildschirm gezeichnet wird. Code:
 ;Tiles
 For y=0 To 9
  For x=0 To 9
   Color xy(xp+x,yp+y),0,0
   Rect x*32,y*32,32,32,1
  Next
 Next


Sieht zunächst kompliziert aus, ist es aber nicht. Erklärung:
Graphics ist auf 320,320 gesetzt. Bei 32x32 großen Tiles (so nennt man die Grafikabschnitte/Kacheln) passen logischer weise 10x10 in Graphics rein. Das machen die beiden Schleifen For x=0 to 9 ergibt 10.

Damit haben wir schon mal jeden Bereich des Bildschirmes ausgefüllt. Damit nun aber unsere zuvor per Zufall gezeichnete Map gesehen wird, muss diese auch korrekt ausgelesen werden. Das ginge zB so
Color xy(x,y),0,0:Rect x*32,y*32,32,32,1

Somit hat jeder Bildschirmbereicht seine eigene Tile aus dem Dim-Array. Da wir aber noch das ganze bewegen wollen, packen wir einfach noch unsere Tastaturabfrage-Koordinaten mit ein.
Color xy(xp+x,yp+y),0,0:Rect x*32,y*32,32,32,1

Wichtig! Ein Fehler den Anfänger ganz gerne mal machen bei sowas. Sie zeichnen oft die gesamte Map ein. Also auch die Bereiche, die sich ausserhalb des Bildschirmes befinden. Das kann bei großen Maps recht lahm werden. Bei der genannten Methode wird nur das sichtbare gezichnet. Überprüfen kannst das das, wenn du die beiden Schleifen nicht von 0 bis 9 sondern zB von 1 bis 8 zählen lässt.

Als Erweiterung zu dieser Methode, gibt es noch eine Pixelgenaues Tilemapscrolling. Also bei Bewegung, nicht ganze Tiles springen, sondern beliebig Pixelganau. Die weitere Methode ist aber erheblich komplizierter und grad für den Anfang nicht sonderlich zu gebrauchen.^^
 

Mia

BeitragMi, Feb 28, 2007 5:01
Antworten mit Zitat
Benutzer-Profile anzeigen
wow danke dir ich probs direckt ma aus und hoffe ich kanns irgendwie gebrauchen für meinen zweck XD danke
2 jahre RO npcs gescriptet
1 jahr RO maps selbergemacht
Text 250,250, "< 1 woche (Blitz) Basic geschrieben"
 

Mia

BeitragDo, März 01, 2007 5:41
Antworten mit Zitat
Benutzer-Profile anzeigen
geht nit der lässt das nur auf einem punkt und dann wie ne karte scrollen ich will aber den bereich in kästchen aufteilen -.-
2 jahre RO npcs gescriptet
1 jahr RO maps selbergemacht
Text 250,250, "< 1 woche (Blitz) Basic geschrieben"
 

bruce85

BeitragDo, März 01, 2007 6:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,
wieviele Kästchen möchtest du denn aufteilen?
ambesten du Zeichnest mal ein beispiel in Paint und Postest es hier mal rein.

EDIT: Ich hab mal schnell ein beispiel geschrieben:

Code:
Graphics 640,480
SetBuffer BackBuffer()

;Karte mit 9*9 Felder erstellen
Dim Spielfeld(8,8)

;Die aktuelle karte setzen
Restore map_data
;Karte lesen
For y=0 To 8
  For x = 0 To 8
    Read Spielfeld(x,y)
  Next
Next

Repeat
  Cls

  ;Alle Felder durchgehen und zeichnen
  For y=0 To 8
    For x = 0 To 8
      map = Spielfeld(x,y)
      Color 128,0,0
      If map = 1 Then Rect x*40+(x/3)*10,y*40+(y/3)*10,40,40,0
    Next
  Next

  Flip
Until KeyHit(1)

End

;Die Daten der Karte
.map_data
Data 1,1,1,1,1,1,1,1,1
Data 1,1,1,1,1,1,1,1,1
Data 1,1,1,1,1,1,1,1,1
Data 1,1,1,1,1,1,1,1,1
Data 1,1,1,1,1,1,1,1,1
Data 1,1,1,1,1,1,1,1,1
Data 1,1,1,1,1,1,1,1,1
Data 1,1,1,1,1,1,1,1,1
Data 1,1,1,1,1,1,1,1,1


meinst du es vieleicht so in der art?

MfG Andreas
AMD Athlon(tm) II X2 250, 8 GB DDR, MSI MSI 770-C45, GeForce GTS 250
 

Mia

BeitragDo, März 01, 2007 7:06
Antworten mit Zitat
Benutzer-Profile anzeigen
den sand da wil ich in felder aufteilen so das ich da auf ein feld nen bild setzten kann

user posted image

z.b. feld1 = das 100*100 groß ist links oben und dann nen anderes rechts oben in das feldX = 100* 100 das groß is
2 jahre RO npcs gescriptet
1 jahr RO maps selbergemacht
Text 250,250, "< 1 woche (Blitz) Basic geschrieben"

BladeRunner

Moderator

BeitragDo, März 01, 2007 7:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Was Hectic Dir geschrieben hat war durchaus ein passender Ansatz, er hatte nur eine Form der Bewegung dabei die Du nicht wolltest.
Nichts desto trotz speichert er Bilddaten in einer gekachelten Map (vgl. dein Ansatz des Schachbrettes). Wenn Du deinen Sand (der übrigens verdächtig nach Jutesack aussieht) in Kacheln unterteilen willst, zeichne ihn per drawimage ein und lege darüber als zweite Schicht die im Dim-Feld gespeicherte Map mit den Dingen (Häusern, was weiss ich) die du draufsetzen willst.

Also schau dir den Code meiner Vorredner nochmal genau an und versuch ihn zu verstehen, denn er enthält alles was Du brauchst.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group