für mein aktuelles Projekt, einen Map Editor benutz ich folgenden Code Schnipsel um die Map auf einem ImageGadget anzuzeigen:
Code: Alles auswählen
If Editor_RedrawMap = 1
For Y = 0 To 1
For X = 0 To MapInfo\Width
For Z = 0 To MapInfo\Height
Select Y
Case #Layer_Underground
UseImage(#ImageID_Underground)
Case #Layer_Objects
UseImage(#ImageID_Objects)
EndSelect
If Map(X,Z,Y)\X <> -1
Map(X,Z,Y)\TempImageID = CreateClippedImage(Map(X,Z,Y)\X*#TileWidth,Map(X,Z,Y)\Y*#TileHeight,#TileWidth,#TileHeight,ImageID())
EndIf
Next
Next
Next
UseImage(#ImageID_MapOld)
StartDrawing(ImageOutput())
For Y = 0 To 1
For X = 0 To MapInfo\Width
For Z = 0 To MapInfo\Height
If Map(X,Z,Y)\X <> -1
DrawImage(UseImage(Map(X,Z,Y)\TempImageID),X*#TileWidth,Z*#TileHeight)
FreeImage(Map(X,Z,Y)\TempImageID)
EndIf
Next
Next
Next
StopDrawing()
SetGadgetState(#Image_Map,UseImage(#ImageID_MapOld))
Editor_RedrawMap = 0
EndIf
CreateClippedImage Prozedur:
Code: Alles auswählen
Procedure CreateClippedImage(X,Y,Width,Height,ImageID)
Img = CreateImage(#PB_Any,Width,Height)
UseImage(Img)
StartDrawing(ImageOutput())
DrawImage(ImageID,-X,-Y)
StopDrawing()
ProcedureReturn Img
EndProcedure
P.S.: Ich muss die ganzen For/Next schleifen 2 mal aufrufen weil man ja kein StartDrawing in nem StartDrawing aufrufen kann..
