tileset von bmp laden
Übersicht

Roma3htBetreff: tileset von bmp laden |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi.
Ich habe mir den Tile Editor tutorial von robsite angeschaut und verstanden... Doch wie kann ich die tiles per BMP laden ? und nicht jedes einzelne einlesen ? |
||
Vindur |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
das kannst du mit
Code: [AUSKLAPPEN] LoadAnimImage(Datei$,Breite,Höhe,Startframe,Frameanzahl[,modus])
dadurch wird das bild geladen und Breite und Höhe bestimmen die größe des tiles und nicht des gesamtbildes. danach einfach mit DrawImage anzeigen lassen. also: Code: [AUSKLAPPEN] DrawImage Bild,x,y,frame
hoffe das war was du meintest. mfg Vindur |
||
Roma3ht |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Jo das hab ich auch so und ein feld wo ich zeichen kann aber das was ich nicht verstehe wie ich die tiles wechseln kann also ich dachte mir das so:
Code: [AUSKLAPPEN] If MouseDown(2) Then
tile = tile +1 Endif Aber das will nicht Hier hab ich nochmal den rpg tut teil 4 mit meinem Ansatz drin. wenn ich da If MouseDown(2) The tile = 5 Endif mache geht das aber wenn ich If Mousedown(2) Then tile = tile +1 Endif mache geht das nicht. Code: [AUSKLAPPEN] Dim map(31,23) Graphics 1024,768,16,1 Tileset = LoadAnimImage("tileset.bmp",32,32,0,6) Maus = LoadImage("maus.bmp") Global x,y,mx,my,mapx,mapy,tile = 1 Repeat SetBuffer BackBuffer() If KeyDown(1) Then End For x = 0 To 31 For y = 0 To 23 DrawImage tileset,x*32,y*32,map(x,y) Next Next ;________Hier das Problem________________ If MouseDown(2) Then tile = tile +1 EndIf ;_________________________ If KeyDown(2) Then tile = 1 If KeyDown(3) Then tile = 2 If KeyDown(4) Then tile = 3 If KeyDown(5) Then tile = 4 If KeyDown(6) Then tile = 5 If KeyDown(7) Then tile = 0 mx = MouseX() my = MouseY() If MouseDown(1) Then scroll() map(mapx,mapy) = tile End If If MouseDown(2) Then scroll() map(mapx,mapy) = 0 End If If KeyHit(31) Then save() If KeyHit(38) Then load() DrawImage maus,mx,my Flip Forever Function scroll() mapx = (mx)/32 mapy = (my)/32 End Function Function save() karte$ = WriteFile("map1.map") For x = 0 To 31 For y = 0 To 23 WriteLine(karte$,tile) WriteInt(karte$,map(x,y)) Next Next CloseFile(karte$) End Function Function load() karte$ = ReadFile("map1.map") For x = 0 To 31 For y = 0 To 23 tile = ReadLine(karte$) map(x,y) = ReadInt(karte$) Next Next CloseFile(karte$) End Function |
||
BadDeath |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Nimm doch mal MouseHit() anstatt MouseDown(). So zählt er "Tiles" evtl. zu schnell hoch und liegt so außerhalb des Frame-Bereiches der Tiles - bei dir sechs. | ||
-~= real coders just code in binary =~- |
Roma3ht |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ah ja jetz gehts danke. | ||
![]() |
Eingeproggt |
![]() Antworten mit Zitat ![]() |
---|---|---|
elegant wäre es vlt noch, wenn man rein mathematisch die Sache begrenzt, sodass tile nie größer als 6 wird, dazu führe in MouseHit, wie BadDeath empfohlen hat, folgendes aus:
Code: [AUSKLAPPEN] tile = (tile +1) Mod 7
Wer nicht weiß, was ich damit meine, schaue sich Mod ![]() mfG; Christoph. |
||
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9 |
Roma3ht |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Das von Eingeproggt verstehe ich nicht wirklich.. es geht zwar doch er kommt nach dem 6 tile nicht weiter...dann bricht er ab weil ich das gemacht habe
Code: [AUSKLAPPEN] If Mousehit(2) Then
tile = tile +1 Endif weil es ja max. 6 frames sind kann ich nicht auf die erste zurück gehen. Wie mach ich das das wenn ich den 6 frame erreicht habe dann er auf den 0. zurückspringt ?? |
||
![]() |
Blitzprogger |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] if tile > 6 then tile = 1 versuchs mal so
allerding dann das mit "mod 7" rausnehmen und durch Code: [AUSKLAPPEN] tile=tile +1 ersetzten
mfg |
||
Mein aktuelles Projekt, Irnithal: http://www.blitzforum.de/worklogs/415/
Unfreiwilliger Gewinner des BAC# 115. ![]() |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: Wie mach ich das das wenn ich den 6 frame erreicht habe dann er auf den 0. zurückspringt ?? Eingeproggt hat die Lösung schon geschrieben... wenn du die Funktionsweise von Befehlen wie mod![]() Code: [AUSKLAPPEN] Local tile
Ansonsten musst du dir selbst eine Lösung überlegen die du auch Anwenden kannst.
For i=0 To 15 Print tile tile = (tile +1) Mod 7 Next Print "-----" WaitKey() For i=0 To 15 Print "Der Rest von "+i+" geteilt durch 7 ist "+(i Mod 7) Next WaitKey() |
||
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 THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
Roma3ht |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Klappt irgendwie nicht.
Code: [AUSKLAPPEN] If MouseHit(2) Then
tile = tile +1 If tile > 6 Then tile = 1 EndIf Hab auch mal auserhalb der MouseHit function verscht geht einfach nicht.. |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn die Animation bei 0 beginnt, warum setzt du den Zähler auf 1 zurück? | ||
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 THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
Roma3ht |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Oh klappt aber auch so nicht... Was kann man da machen ? | ||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Den kompletten aktuellen Code zu posten könnte hilfreich sein. | ||
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 THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
Roma3ht |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hier der Robsite code den ich etwas veränert habe.
Code: [AUSKLAPPEN] Dim map(31,23)
Graphics 1024,768,16,1 tileset = LoadAnimImage ("tileset.bmp",32,32,0,6) maus = LoadImage ("maus.bmp") Global x,y,mx,my,mapx,mapy,tile = 1 Repeat SetBuffer BackBuffer() If KeyDown(1) Then End For x = 0 To 31 For y = 0 To 23 DrawImage tileset,x*32,y*32,map(x,y) Next Next If MouseHit(2) Then tile = tile +1 If tile > 6 Then tile = 0 EndIf mx = MouseX() my = MouseY() If MouseDown(1) Then scroll() map(mapx,mapy) = tile End If If MouseDown(2) Then scroll() map(mapx,mapy) = 0 End If If KeyHit(31) Then save() If KeyHit(38) Then load() DrawImage maus,mx,my Flip Forever Function scroll() mapx = (mx)/32 mapy = (my)/32 End Function Function save() karte$ = WriteFile("map1.map") For x = 0 To 31 For y = 0 To 23 WriteLine(karte$,tile) WriteInt(karte$,map(x,y)) Next Next CloseFile(karte$) End Function Function load() karte$ = ReadFile("map1.map") For x = 0 To 31 For y = o To 23 tile = ReadLine(karte$) map(x,y) = ReadInt(karte$) Next Next CloseFile(karte$) End Function |
||
![]() |
Geeecko |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du lädst nur "6" Tiles. Also sind nur "5" vorhanden. Programmierer beginnen ja von 0 ![]() Das heißt statt if Tile > 6 sollte da Tile > 5 stehen lg MD |
||
Roma3ht |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ah ja hab ich nicht gemerkt. Danke! | ||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group