Moin,
ein Beispiel für, von mir sog., "relative Koordinaten".
Das heißt: Egal welche Auflösung, die Bilder sind immer an der gleichen Stelle und werden entsprechend vergrößert/verkleinert.
Dazu habe ich den Screen in ein Raster von 1000*1000 Punkten eingeteilt, die dann auf die jeweilige Auflösung umgerechnet werden.
Nebenbei ist da noch n wirklich sehr simpler Config-Parser bei.
BlitzBasic: [AUSKLAPPEN] [EINKLAPPEN]
Const SM_FullScreen = 1 Const SM_Windowed = 2 Const SM_Resize = 3
Type Screen Field Width,Height Field Mode Field Depth End Type Global Screen.Screen = New Screen
Type confParams Field Parameter$ End Type
Global IMG_Switch640 Global IMG_Switch800 Global IMG_Cursor
Local mX,mY Local Stream
Stream = WriteFile("m00.dat") WriteLine Stream,"screendata=640,480,32,1" CloseFile(Stream)
Init() While Not KeyHit(1) Cls DrawImage IMG_Switch640,Rel2Abs(500,Screen\Width)-Rel2Abs(100,Screen\Width),Rel2Abs(250,Screen\Height)-Rel2Abs(50,Screen\Height) DrawImage IMG_Switch800,Rel2Abs(500,Screen\Width)-Rel2Abs(100,Screen\Width),Rel2Abs(750,Screen\Height)-Rel2Abs(50,Screen\Height) mX = MouseX() mY = MouseY() DrawImage IMG_Cursor,mX,mY If MouseHit(1) Then If mX > Rel2Abs(500,Screen\Width)-Rel2Abs(100,Screen\Width) And mX < Rel2Abs(500,Screen\Width)+Rel2Abs(100,Screen\Width) Then If mY > Rel2Abs(250,Screen\Height)-Rel2Abs(50,Screen\Height) And mY < Rel2Abs(250,Screen\Height)+Rel2Abs(50,Screen\Height) Then Stream = WriteFile("m00.dat") WriteLine Stream,"screendata=640,480,32,1" CloseFile(Stream) Init() EndIf EndIf If mX > Rel2Abs(500,Screen\Width)-Rel2Abs(100,Screen\Width) And mX < Rel2Abs(500,Screen\Width)+Rel2Abs(100,Screen\Width) Then If mY > Rel2Abs(750,Screen\Height)-Rel2Abs(50,Screen\Height) And mY < Rel2Abs(750,Screen\Height)+Rel2Abs(50,Screen\Height) Then Stream = WriteFile("m00.dat") WriteLine Stream,"screendata=800,600,32,1" CloseFile(Stream) Init() EndIf EndIf EndIf Text 1,1,Str(Screen\Width) + " (" + Str(GraphicsWidth()) + ")" Text 1,20,(Screen\Height) + " (" + Str(GraphicsHeight()) + ")" Text 1,40,Str(Screen\Depth) + " (" + Str(GraphicsDepth()) + ")" Text 1,60,Screen\Mode Flip Wend
Function LoadSettings(file$) Local Stream Local cLine$ Local cCommand$ Local cParams.confParams Local i Local cChar$ Local QuoteOpen Local lastSeperator Stream = ReadFile(file$) While Not Eof(Stream) cLine$ = ReadLine(Stream) For i=1 To Len(cLine$) cChar$ = Mid(cLine$,i,1) Select cChar$ Case Chr(34) If QuoteOpen = 1 Then QuoteOpen = 0 Else QuoteOpen = 1 EndIf Case " " If QuoteOpen = 0 Then cLine$ = Mid(cLine$,1,i-1) + Mid(cLine$,i+1) i = i - 1 EndIf End Select Next Command$ = Mid(cLine$,1,Instr(cLine$,"=")-1) cLine$ = Mid(cLine$,Len(Command$) + 2) lastSeperator = 1 For cParams = Each confParams Delete cParams Next For i=1 To Len(cLine$) cChar$ = Mid(cLine$,i,1) Select cChar$ Case Chr(34) If QuoteOpen = 1 Then cLine$ = Mid(cLine$,1,i-1) + Mid(cLine$,i+1) i = i - 1 QuoteOpen = 0 Else cLine$ = Mid(cLine$,1,i-1) + Mid(cLine$,i+1) i = i - 1 QuoteOpen = 1 EndIf Case "," If QuoteOpen = 0 Then cParams = New confParams cParams\Parameter$ = Mid(cLine$,lastSeperator,(i)-lastSeperator) cLine$ = Mid(cLine$,1,i-1) + Mid(cLine$,i+1) i = i - 1 lastSeperator = i + 1 EndIf End Select Next cParams = New confParams cParams\Parameter$ = Mid(cLine$,lastSeperator)
Select Lower(Command$) Case "screendata" cParams = First confParams Screen\Width = Int(cParams\Parameter$) cParams = After cParams Screen\Height = Int(cParams\Parameter$) cParams = After cParams Screen\Depth = Int(cParams\Parameter$) cParams = After cParams Screen\Mode = Int(cParams\Parameter$) End Select Wend End Function
Function Rel2Abs(Pos,Size) Return Int((Size/1000.0)*Pos) End Function
Function CreateSampleIMGS() IMG_Switch640 = CreateImage(100,50) SetBuffer ImageBuffer(IMG_Switch640) Color 255,0,0 Rect 0,0,100,50 Color 255,255,255 Text 50,25,"640*480",1,1 IMG_Switch800 = CreateImage(100,50) SetBuffer ImageBuffer(IMG_Switch800) Color 255,0,0 Rect 0,0,100,50 Color 255,255,255 Text 50,25,"800*600",1,1 IMG_Cursor = CreateImage(16,16) SetBuffer ImageBuffer(IMG_Cursor) Rect 0,0,16,1 Rect 0,0,1,16 End Function
Function Init() LoadSettings("m00.dat") Graphics Screen\Width,Screen\Height,Screen\Depth,Screen\Mode CreateSampleIMGS() FitImages() SetBuffer BackBuffer() End Function
Function FitImages() TFormFilter 0 ResizeImage IMG_Switch640,Rel2Abs(200,Screen\Width),Rel2Abs(100,Screen\Height) ResizeImage IMG_Switch800,Rel2Abs(200,Screen\Width),Rel2Abs(100,Screen\Height) ResizeImage IMG_Cursor,Rel2Abs(50,Screen\Width),Rel2Abs(50,Screen\Height) TFormFilter 1 End Function
walski
|