tileset von bmp laden
Übersicht
BlitzBasic
Beginners-Corner
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 in der Onlinehilfe an.
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 nicht verstehst, musst du sie dir anhand von testprogrammen klar machen...
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
BlitzBasic
Beginners-Corner
Powered by phpBB © 2001 - 2006, phpBB Group

