[GELÖST] Mal wieder die gute alte Tilemap...

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

Neoxit

Betreff: [GELÖST] Mal wieder die gute alte Tilemap...

BeitragMi, Jun 27, 2012 21:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja ich habe die Suche genutzt (Um es im Vorfeld zu erwähnen ^^ )

Folgendes:

Vllt sagt einigen noch was sich Grabber nannte ein kleines Projekt von mir (wer es nicht mehr genau weiß Neoxit.tublr.com müsste noch der alte Blog dazu stehen Smile ) Auf jedenfall geht es genau um eine Solche Tilemap, anfangs habe ich diese in Types in B3D gespeichert, und alle nötigen Information für diesen entsrpechenden Block ausgelesen. So auch die X und Y koordinate.

Dann kamen krasse Performanceverluste je nach dem wie Groß die Map wurde.
Da dadurch auch die Anzahl der Types größer wurde. Dann sollte ich einen Array für die Darstellung nehmen, was ich getan habe.

Nun kommt BlitzMax ins Spiel und ich habe vor, dieses Spiel nun auch endlich realität werden zu lassen (siehe Blog).

Nur kommen in BMax so viele neue Möglichkeiten auf einen zu, auch performancetechnisch.

Nun habe ich über viele Dinge gegrübelt und meine Beste möglichkeit die ich mir dabei vorgestellt habe war folgende:

Die Koordinaten der Blöcke (Auch himmelsblöcke und versch. Layer (somit weitere "Layer Arrays")) wird per Array bestimmt.

Die Eigenschaften der Blöcke habe ich mir (mal ganz GROB) folgendermaßen vorgestellt:

Type Block....
[ Allgemeine Block Informationen (Festigkeit oder ähnliches, Bild , zu gebendes Item beim Abbau)
Type HolzBlock extends Block
(Zusatzinformationen für Blöcke des Holz-Typs)
Type EichenHolzBlock extends HolzBlock
(Zusatzinformationen für Blöcke des Typs holz, welche sich nur auf die Eiche beziehen)

Frage 1:
Was sagt ihr zu der art und weise wie ich es vorhabe.

Frage 2:
Ich war bzgl Arrays (Fragt mich bitte nich warum weil es eig. Recht Simple ist nur fehlt mir die Vorstellung ab wann ich wie genau auf einen Entsprechenden Array Zugreife und gleichzeitig den Array mit den Type definiere. (Quasi: Woher weiß mein Programm nachher das auf Arrayplatz[32,14] die Block ID 18 nutzt und somit die Informationen vom TypeBlock abruft). Denn auf dem Array selber, wird nur die Position gespeichert, in dem Type die Eigenschaften wie z.b. die gesuchte ID)

Frage 3 / Bitte:
Bitte möglichst genau versuchen zu erklären, denn (an dieser Stelle nochmal danke Xeres bzgl. meines Vorrigen Beitrags ^^) ich weiß ehrlich genau oft nicht worans bei mir beim Programmieren scheitert Embarassed

Mit freundlichen Grüßen
Maik "Neoxit" P.
  • Zuletzt bearbeitet von Neoxit am So, Jul 08, 2012 20:08, insgesamt 2-mal bearbeitet

BladeRunner

Moderator

BeitragMi, Jun 27, 2012 22:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:

Frage 2:
Ich war bzgl Arrays (Fragt mich bitte nich warum weil es eig. Recht Simple ist nur fehlt mir die Vorstellung ab wann ich wie genau auf einen Entsprechenden Array Zugreife und gleichzeitig den Array mit den Type definiere. (Quasi: Woher weiß mein Programm nachher das auf Arrayplatz[32,14] die Block ID 18 nutzt und somit die Informationen vom TypeBlock abruft). Denn auf dem Array selber, wird nur die Position gespeichert, in dem Type die Eigenschaften wie z.b. die gesuchte ID)

Hier kann ich die Frage nicht finden.
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

Xeres

Moderator

BeitragDo, Jun 28, 2012 9:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Man kann dir nur in den Richtungen weiterhelfen, in denen du deine Probleme gut skizziert hast.
Wenn du irgendwo Vergleichsmaterial hast: Linke selbst dahin, dazu ist das Internet da, lasse die Leute nicht noch extra was suchen.

Types mit Extends erweitern: Ist sinnvoll, sofern du neue Blöcke nicht laden willst - erschwert z.B. Modding.

Bei dem Rest muss ich dich auch bitten, weiter aus zu holen, da mir die Problemstellung nicht klar ist.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Neoxit

BeitragDo, Jun 28, 2012 18:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja ich gebe zu, ich und meine Fragestellung ist oftmals etwas ehm, durcheinander ^^*

Ganz simple, ich möchte eine Tilemap in BMax machen, eine wo die Koordinten der Tiles in einem Mehrdimensionalen Array gespeichert werden (x,y) und wo die eigenschaften der Tiles / Der Blöcke in Types gespeichert wird.

Dies soll BEIDES wunderbar miteinader agieren können nur weiß ich nicht, wie ich das in BMax wirklich gut angehe.

BladeRunner

Moderator

BeitragDo, Jun 28, 2012 18:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Minibeispiel:
BlitzMax: [AUSKLAPPEN]

SuperStrict
Type TTile
Field typ:Int

Method New()
typ = Rand(1 , 5)
End Method

EndType

Local map:TTile[5 , 5]

For Local x:Int = 0 To 4
For Local y:Int = 0 To 4
map[x , y] = New TTile
Next
Next

'ausgabe in Console
For Local y:Int = 0 To 4
Local str:String = ""
For Local x:Int = 0 To 4
str:+map[x,y].typ+" "
Next
Print str
str = ""
Next
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

Neoxit

BeitragDo, Jun 28, 2012 18:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Super damit lässt sich arbeiten, aber ist der Array nun nicht getrennt vom Type? Sicher bin ich mir da gerade nicht aber ich meine doch das sich Arrays auch als eine art Field im Type selbst Definieren lassen? Oder wäre das Sinnlos? Aber auf jedenfall schonmal ein großes Dankeschön damit komme ich einen großen Schritt vorwärts!

EDIT:

Stopp wat laber ich. alles bestens!

BladeRunner

Moderator

BeitragDo, Jun 28, 2012 18:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn Du das Array kapseln willst dann in einem eigenen Kartentyp, denn die Karteninformation hqat in der Info über ein einzelnes Tile nichts verloren.
Also Type TGameMap
Field _map[,] 'etc.pp
...
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

Neoxit

BeitragDo, Jun 28, 2012 19:43
Antworten mit Zitat
Benutzer-Profile anzeigen
So habe mir das jetzt wie folgt gemacht:

BlitzMax: [AUSKLAPPEN]
Type TTile
Global w:Int = 16 'Weite des Tiles in Pixeln
Global h:Int = 16 'Höhe des Tiles in Pixeln

Field TYP_ID:Int 'ID des Tiles 0 = Boden ; 1 = Himmel

Method New()
TYP_ID = Rand(0, 1)
End Method

End Type

Local map:TTile[9, 9]

For Local x:Int = 0 To 8
For Local y:Int = 0 To 8
map[x, y] = New TTile
Next
Next

Global id_01:TImage = LoadImage("tile_01.png")
Global id_02:TImage = LoadImage("tile_02.png")

Graphics 800, 600, 0, 60



'Hauptschleife
Repeat
Cls

Local x_drawer:Int
Local y_drawer:Int

For Local y:Int = 0 To 8
y_drawer = + TTile.w
For Local x:Int = 0 To 8
x_drawer = + TTile.h

If map[x, y].TYP_ID = 0 Then DrawImage id_01, x_drawer, y_drawer
If map[x, y].TYP_ID = 1 Then DrawImage id_02, x_drawer, y_drawer

Next
x_drawer = 0
Next




Flip
Until KeyHit(KEY_ESCAPE) End


Das problem was ich habe (es sind 16x16 Tiles) das nur 1 Tile angezeigt wird. Der erste ^^ Warum?

[EDIT]

Gut anscheinend ist ein VARIABLE =+ VARIABLE nur einmalig berechnet und ersetzt den alten ersten Variablenwert nicht. Mit dem Klassiker Variable = Variable + Variable2 klappts. ^^

Neoxit

BeitragDo, Jun 28, 2012 20:30
Antworten mit Zitat
Benutzer-Profile anzeigen
So ich habe nun vor die TileMap so aufzubauen, das gewisse Layer überprüft werden. Dabei habe ich mir gedacht das ich bei der Method New() werte übergeben werden. Nämlich die derzeitig x und y des TileCreate durchlaufs. Sollte X und Y bereits größer als ein gewisser wert sein, dann soll angefangen werden der boden gemacht werden / BodenTiles statt himmel tiles gesetzt werden.

Das Problem ist nur wie realisiere ich das am besten?

BlitzMax: [AUSKLAPPEN]

For Local x:Int = 0 To (MAP_SIZE_X - 1)
For Local y:Int = 0 To (MAP_SIZE_Y - 1)
map[x, y] = New TTile
Next
Next


Hier wird die Map Createt / Zugewiesen durch einem im neuen TTile Rand wert in der New() Method methode.

Also wie kann ich das nun bewerkstelligen

P.s.: Es scheint hier manchmal so auszusehen, als wenn ich euch hier alles aus der Nase ziehen will.
Dem ist aber nicht so mir fehlen nur manchmal gewisse "Schlüsselschritte" / Übungen um das auch weiterhin umzusetzen aber bisher gehts eig. ganz gut. Smile Hoffe das wird erkannt Smile

DaysShadow

BeitragDo, Jun 28, 2012 20:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Du musst auch den richtigen Operator dafür verwenden:

BlitzMax: [AUSKLAPPEN]
yourVar:+ anotherVar ' gleich yourVar = yourVar + anotherVar


Das was du da machst, ist deiner Variable einfach nur denselben Wert den sie schon hat zuzuweisen Wink

Edit: Das bezieht sich auf deinen Post davor. Wieso musstest du jetzt Doppelposten? Ein Edit hätte es doch auch getan, das Andere ist doch auch von heute.

Edit2: Fullquote für meinen Post davor...wow...^^ Ich habe auch schon gesehen, dass du den Klassiker anwendest, wollte dir aber trotzdem zeigen wie der richtige Operator dafür ist was du versucht hast, denn es geht ja.
Blessed is the mind too small for doubt
  • Zuletzt bearbeitet von DaysShadow am Do, Jun 28, 2012 20:35, insgesamt 2-mal bearbeitet

Neoxit

BeitragDo, Jun 28, 2012 20:33
Antworten mit Zitat
Benutzer-Profile anzeigen
DaysShadow hat Folgendes geschrieben:
Du musst auch den richtigen Operator dafür verwenden:

BlitzMax: [AUSKLAPPEN]
yourVar:+ anotherVar ' gleich yourVar = yourVar + anotherVar


Das was du da machst, ist deiner Variable einfach nur denselben Wert den sie schon hat zuzuweisen Wink

Edit: Das bezieht sich auf deinen Post davor. Wieso musstest du jetzt Doppelposten? Ein Edit hätte es doch auch getan, das Andere ist doch auch von heute.


Siehe mein Edit etwas höher Wink Aber danke Smile

Nova

BeitragDo, Jun 28, 2012 21:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Was ich dazu aber auch noch erwähnen will: Selbst in den meisten andere Programmiersprachen wie C oder PHP gibt es kein "=+", da heißt es "+=" Wink
AMD Athlon II 4x3,1GHz, 8GB Ram DDR3, ATI Radeon HD 6870, Win 7 64bit

Neoxit

BeitragDo, Jun 28, 2012 21:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Hehe Wink

So also bis jetzt sieht es so aus und nun würde ich gern von den BMax Gurus unter euch kurz wissen ob es so okay ist wie ich es mache und darauf aufbauen kann oder vorher nochmal ein HAAAAAAAAAALT STOOOOOPP kommt weil man es noch ein bisschen flexibler machen könnte Smile

Also hier einmal mein Code und auch ein kleiner Screen dazu.

BlitzMax: [AUSKLAPPEN]


'**********************************
'*********TerraVerse TileMap**********
'**********************************

Const TILE_SIZE_X:Int = 16 'Tilegröße X
Const TILE_SIZE_Y:Int = 16 'Tilegröße Y
Const MAP_DEEP_00:Int = 0 'Maptiefenlayer beginn 0 * Default Himmel
Const MAP_DEEP_01:Int = 22 'Maptiefenlayer beginn 1
Const MAP_DEEP_02:Int = 30 'Maptiefenlayer beginn 2
Const MAP_SIZE_X:Int = 100 'MapSize x in Tiles
Const MAP_SIZE_Y:Int = 100 'MapSize y in Tiles

Global x_drawer:Int
Global y_drawer:Int

Global x_creater:Int
Global y_creater:Int

Global id_01:TImage = LoadImage("tile_01.png")
Global id_02:TImage = LoadImage("tile_02.png")
Global id_03:TImage = LoadImage("tile_03.png")

Global bgr_01:TImage = LoadImage("bgr_01.png")

Type TTile
Global w:Int = 16 'Weite des Tiles in Pixeln
Global h:Int = 16 'Höhe des Tiles in Pixeln

Field TYP_ID:Int 'ID des Tiles 0 = Himmel; 1= Boden


Method New()

If y_creater >= 0 Then TYP_ID = 0
If y_creater >= MAP_DEEP_01 Then TYP_ID = 1
If y_creater >= MAP_DEEP_02 Then TYP_ID = 2


End Method

End Type

Local map:TTile[MAP_SIZE_X, MAP_SIZE_Y]

For Local x:Int = 0 To (MAP_SIZE_X - 1)
For Local y:Int = 0 To (MAP_SIZE_Y - 1)
y_creater = y_creater + 1
map[x, y] = New TTile
Next
y_creater = 0

Next






Graphics 800, 600, 0, 60
SetBlend alphablend


'Hauptschleife
Repeat
Cls

DrawImage bgr_01, 0, 0

'Die TileMap Zeichnen
For Local y:Int = 0 To (MAP_SIZE_Y - 1)
y_drawer = y_drawer + TTile.h
For Local x:Int = 0 To (MAP_SIZE_X - 1)
x_drawer = x_drawer + TTile.w

'Tilebilder zuweisen


If map[x, y].TYP_ID = 0 Then DrawImage id_01, x_drawer, y_drawer
If map[x, y].TYP_ID = 1 Then DrawImage id_02, x_drawer, y_drawer
If map[x, y].TYP_ID = 2 Then DrawImage id_03, x_drawer, y_drawer

Next
x_drawer = -TILE_SIZE_X
Next
y_drawer = -TILE_SIZE_Y



Flip
Until KeyHit(KEY_ESCAPE) End


user posted image

Neoxit

BeitragDo, Jun 28, 2012 22:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Hab gerad gemerkt das das irgendwie mist ist was ich da mache, und ich denke ich sollte wie du das eben schon kurz angesprochen hast BladeRunner mit unterschiedlichen Types lösen.

Ich denke da an einen Type (oder mehrere) für die Tiles.
Dann einen weiteren Type für die TileMap.
Da ich nachher mehrere Layer haben möchte (hintergrundTiles etc) sollte ich da mehrer TileMap Types machen ?

Die Frage ist nur wie ich das nun wirklich effizient angehe. Wie mein bisheriger gedankengang war habt ihr ja bereits gesehen, und ich glaube ich weiß langsam woran es bei meinem Verständnis harpert. Nämlich das Zusammenspiel der Informationsübermittlung zwischen Types und Arrays, wie z.b. ARRAY:TYPE oder so.

Dann bin ich schon gedanklich weitergegangen zum thema scrolling, bei BlitzBasic wars alles so einfach weil man auf alle gleichzeitig drauf zugreifen konnte und alle tiles um 1 pixel verschieben konnte etc um somit einen Scroll effekt zu bekommen. Ich wüsste auch jetzt nicht wie ich sowas hinbekomme da ja jede Art von Typeeintrag (z.b. jeder Tile in der TMap) vorher definiert werden muss. Und genau da harperts. Crying or Very sad

Xeres

Moderator

BeitragDo, Jun 28, 2012 23:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Auch für dich gilt immer noch der Grundsatz: Editieren statt Doppelpost.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Neoxit

BeitragSa, Jun 30, 2012 0:10
Antworten mit Zitat
Benutzer-Profile anzeigen
An dieser Stelle dann nochmal Tut mir leid hab nicht darauf geachtet das es Doppelpost ist :/

Dennoch steht meine Frage nach wie vor im Raum (siehe über Xeres antwort)

Xeres

Moderator

BeitragSa, Jun 30, 2012 0:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Neoxit hat Folgendes geschrieben:
alle tiles um 1 pixel verschieben
Sowas macht man schon immer über Scroll-Variablen. Deine Tiles haben doch keine eigenen Koordinaten?
Als erstes packe die Karte in einen passenden Type, mit einer Methode/Funktion zum Zeichnen und nicht so lose mit Local map:TTile.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Jolinah

BeitragSa, Jun 30, 2012 1:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Neoxit,

Ich habe folgenden Code auf meiner Platte gefunden und noch ein bisschen kommentiert. Normal bin ich auch nicht dafür, sozusagen einfach eine Lösung zu präsentieren. Aber da immer wieder in Zusammenhang mit OOP gefragt wird wie man dieses und jenes sauber lösen könnte und Tilemaps ja generell häufig verwendet werden, dachte ich was soll's... Wink Je nach Situation ist dieser Code sicher auch noch nicht perfekt. Man könnte die Layer auch dynamischer gestalten. Aber ich hoffe das hilft dir etwas weiter.

Vielleicht hilft dir auch diese OOP-Einführung noch weiter: http://zehr.de/downloads/BlitzMax-OOP.pdf

BlitzMax: [AUSKLAPPEN]
SuperStrict


'Type für Tiles
Type TTile
Field walkable:Byte
Field layer1:Byte
Field layer2:Byte
Field layer3:Byte
End Type


'Type für das Level / die Map
Type TLevel
Field width:Int, height:Int
Field tileSet:TImage
Field tileWidth:Int, tileHeight:Int
Field scrollX:Float, scrollY:Float
Field map:TTile[,]

'Erstellt ein neues Level/Map
Function Create:TLevel(width:Int, height:Int, tileSet:TImage, tileWidth:Int, tileHeight:Int)
Local level:TLevel = New TLevel
level.width = width
level.height = height
level.tileSet = tileSet
level.tileWidth = tileWidth
level.tileHeight = tileHeight
level.map = New TTile[width, height]

For Local y:Int = 0 Until height
For Local x:Int = 0 Until width
level.map[x, y] = New TTile
Next
Next

Return level
End Function

'Nur zum Test. Weist zufällige Tile-Nummern in Layer 1 zu
Method Randomize()
Local numTiles:Int = tileSet.pixmaps.Length

For Local y:Int = 0 Until height
For Local x:Int = 0 Until width
map[x, y].layer1 = Rand(0, numTiles)
Next
Next
End Method

'Scrollt die Map in x und y
Method Scroll(x:Int, y:Int)
scrollX:+x
scrollY:+y
End Method

'Gibt das Tile an x,y zurück, ohne Prüfung auf Array-Grenzen
Method GetTile:TTile(x:Int, y:Int)
Return map[x, y]
End Method

'Gibt das Tile an x,y zurück oder Null wenn x oder y nicht innerhalb der Array-Grenzen liegt
Method GetTileSafe:TTile(x:Int, y:Int)
Local dims:Int[] = map.Dimensions()
If x > 0 And x < dims[0] And y > 0 And y > dims[1] Then
Return map[x, y]
Else
Return Null
End If
End Method

'Beliebige X-Koordinate auf die Map-Grösse begrenzen
Method ClampX:Int(x:Int)
If x < 0 Then Return 0
If x >= width Then Return width - 1
Return x
End Method

'Beliebige Y-Koordinate auf die Map-Grösse begrenzen
Method ClampY:Int(y:Int)
If y < 0 Then Return 0
If y >= height Then Return height - 1
Return y
End Method

'Zeichnet die Map innerhalb eines frei wählbaren Ausschnitts
Method Draw(ox:Int, oy:Int, w:Int, h:Int)
'Viewport ändern, dadurch wird alles was ausserhalb gezeichnet wird abgeschnitten
Local vx:Int, vy:Int, vw:Int, vh:Int
GetViewport(vx, vy, vw, vh)
SetViewport(ox, oy, w, h)

'Reichweite der Tiles berechnen die gezeichnet werden müssen
Local startX:Int = ClampX(scrollX / tileWidth)
Local endX:Int = ClampX(startX + w / tileWidth + 1)

Local startY:Int = ClampY(scrollY / tileHeight)
Local endY:Int = ClampY(startY + h / tileHeight + 1)


'Anzahl Tiles/Frames im Tileset
Local numTiles:Int = tileSet.pixmaps.Length

'Zeichnen
For Local y:Int = startY To endY
For Local x:Int = startX To endX
'Tile-Koordinaten
Local tx:Int = x * tileWidth + ox - scrollX
Local ty:Int = y * tileHeight + oy - scrollY

'Layer 1
If map[x, y].layer1 > 0 And map[x, y].layer1 <= numTiles Then
DrawImage(tileSet, tx, ty, map[x, y].layer1 - 1)
End If

'Layer 2
If map[x, y].layer2 > 0 And map[x, y].layer2 <= numTiles Then
DrawImage(tileSet, tx, ty, map[x, y].layer2 - 1)
EndIf

'Layer 3
If map[x, y].layer3 > 0 And map[x, y].layer3 <= numTiles Then
DrawImage(tileSet, tx, ty, map[x, y].layer3 - 1)
End If
Next
Next

'Viewport auf die alten Einstellungen zurückstellen
SetViewport(vx, vy, vw, vh)
End Method
End Type


'Hauptanwendung -------------------------------------

AppTitle = "TileMap"
Graphics 800, 600, 0, 0
SeedRnd(MilliSecs())

'Ein Tileset laden
Local tileSet:TImage = LoadAnimImage("tileset.png", 40, 40, 0, 10)

'Das Level erstellen
Local level:TLevel = TLevel.Create(80, 40, tileSet, 40, 40)
level.Randomize()

Repeat
Cls

'Level horizontal scrollen
If KeyDown(KEY_LEFT)
level.Scroll(-2, 0)
ElseIf KeyDown(KEY_RIGHT)
level.Scroll(2, 0)
End If

'Level vertikal scrollen
If KeyDown(KEY_UP)
level.Scroll(0, -2)
ElseIf KeyDown(KEY_DOWN)
level.Scroll(0, 2)
End If

'Level zeichnen
level.Draw(50, 50, 400, 300)

Flip 1
Until AppTerminate() Or KeyHit(KEY_ESCAPE)

EndGraphics
End

Neoxit

BeitragSo, Jul 08, 2012 20:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Dankeschön!

Daraus wurde ich schon ein ganzes Stück schlauer. Habe mir nun aber doch vorgenommen lieber erstmal die Grundlagen mehr und mehr zu vertiefen und Trainieren bis ich die Type Sache wirklich vollkommen drauf habe.

Übrigens sorry das ich jetzt erst antworte, neue Wohnung, gerad umzug und das Internet ist ja oft auch nicht von jetzt auf gleich da Wink Aber nun wieder ^^

Schöne grüße Neoxit

P.s.:
[ERLEDIGT]

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group