tileset von bmp laden

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Roma3ht

Betreff: tileset von bmp laden

BeitragDo, Dez 04, 2008 0:14
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Dez 04, 2008 0:52
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Dez 04, 2008 1:06
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Dez 04, 2008 1:10
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Dez 04, 2008 1:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Ah ja jetz gehts danke.

Eingeproggt

BeitragDo, Dez 04, 2008 1:14
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Dez 04, 2008 13:40
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Dez 04, 2008 13:58
Antworten mit Zitat
Benutzer-Profile anzeigen
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. Wink

Xeres

Moderator

BeitragDo, Dez 04, 2008 14:09
Antworten mit Zitat
Benutzer-Profile anzeigen
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
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()
Ansonsten musst du dir selbst eine Lösung überlegen die du auch Anwenden kannst.
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)
 

Roma3ht

BeitragDo, Dez 04, 2008 14:42
Antworten mit Zitat
Benutzer-Profile anzeigen
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..

Xeres

Moderator

BeitragDo, Dez 04, 2008 15:20
Antworten mit Zitat
Benutzer-Profile anzeigen
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
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

Roma3ht

BeitragDo, Dez 04, 2008 19:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Oh klappt aber auch so nicht... Was kann man da machen ?

Xeres

Moderator

BeitragDo, Dez 04, 2008 19:14
Antworten mit Zitat
Benutzer-Profile anzeigen
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
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

Roma3ht

BeitragDo, Dez 04, 2008 19:25
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Dez 04, 2008 19:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Du lädst nur "6" Tiles. Also sind nur "5" vorhanden. Programmierer beginnen ja von 0 Wink
Das heißt statt if Tile > 6 sollte da Tile > 5 stehen

lg MD
 

Roma3ht

BeitragDo, Dez 04, 2008 19:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Ah ja hab ich nicht gemerkt. Danke!

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group