hm... vielleicht meinst du das richtige...
wenn du den bildschirm mit tiles füllst, dann zeichnest du ja so,
dass ein bißchen über den screen hinaus gezeichnet wird,
dadurch bleibt der rand an der selben stelle.
wenn du jetzt nur einen ausschnitt zeichnest, "hüpft" der rand ja,
weil eben immer komplette tiles gezeichnet werden.
deswegen zeichnet man über den fertigen kartenausschnitt einen rahmen drüber,
dadurch wird das wieder "smooth"...
hab dir mal ne kleine demo gecoded.
ist meine alte tiledemo, nur den kartenausschnitt verkleinert, und nen rehmen drumgesetzt.
zuerst so laufen lassen, wie es ist, dann siehst du wie der rand hüpft.
dann das rahmendisplay entkommentieren, dann wird der rahmen drüber gezeichnet.
;------------------------------------
wer mittesten will, hier ist das alte posting, wo auch die tiles drin sind:
http://www.purebasic.fr/german/viewtopi ... 634#116634
(auf die grafik rechtsklicken, kopieren, in paint einfügen, die einzelnen tiles ausschneiden, kopieren nach -> 001.bmp bis 008.bmp)
;------------------------------------
Code: Alles auswählen
#Display_Left = 108
#Display_Top = 108
#Display_Width = 384
#Display_Height = 384
InitSprite()
InitKeyboard()
OpenScreen(800,600,32,"Tiledemo")
For n=1 To 8
LoadSprite( 100+n, Right("00"+Str(n),3)+".bmp")
Next
Dim Map(1023,1023)
For n=0 To 1023
For t=0 To 1023
Map(n,t) = Random(7)+1
Next
Next
; *** Create Framesprites ***
CreateSprite(97, 24, 24)
CreateSprite(98,384, 24)
CreateSprite(99, 24,384)
StartDrawing(SpriteOutput(97))
DrawingMode(#PB_2DDrawing_Outlined)
For n=0 To 3
Box( n+1, n+1, 23-2*n, 23-2*n,RGB(96+8*n,96+8*n,96+8*n))
Box( n , n , 23-2*n, 23-2*n,RGB(160-8*n,160-8*n,160-8*n))
Next
DrawingMode(#PB_2DDrawing_Default)
Box( 4, 4, 16, 16,$808080)
StopDrawing()
StartDrawing(SpriteOutput(98))
DrawingMode(#PB_2DDrawing_Outlined)
For n=0 To 3
Box( n+1, n+1,383-2*n, 23-2*n,RGB(96+8*n,96+8*n,96+8*n))
Box( n , n ,383-2*n, 23-2*n,RGB(160-8*n,160-8*n,160-8*n))
Next
DrawingMode(#PB_2DDrawing_Default)
Box( 4, 4,376, 16,$808080)
StopDrawing()
StartDrawing(SpriteOutput(99))
DrawingMode(#PB_2DDrawing_Outlined)
For n=0 To 3
Box( n+1, n+1, 23-2*n,383-2*n,RGB(96+8*n,96+8*n,96+8*n))
Box( n , n , 23-2*n,383-2*n,RGB(160-8*n,160-8*n,160-8*n))
Next
DrawingMode(#PB_2DDrawing_Default)
Box( 4, 4, 16,376,$808080)
StopDrawing()
; ***************************
Repeat
ExamineKeyboard()
ClearScreen(0)
If KeyboardPushed(#PB_Key_Left)
FineX-2
If FineX < 0
FineX = 14
MapX-1
If MapX < 0
MapX = 0
FineX = 0
EndIf
EndIf
EndIf
If KeyboardPushed(#PB_Key_Right)
FineX+2
If FineX > 14
FineX = 0
MapX+1
If MapX > 1023-50
MapX = 1023-50
FineX = 14
EndIf
EndIf
EndIf
If KeyboardPushed(#PB_Key_Up)
FineY-2
If FineY < 0
FineY = 14
MapY-1
If MapY < 0
MapY = 0
FineY = 0
EndIf
EndIf
EndIf
If KeyboardPushed(#PB_Key_Down)
FineY+2
If FineY > 14
FineY = 0
MapY+1
If MapY > 1023-38
MapY = 1023-38
FineY = 14
EndIf
EndIf
EndIf
;***********************************
;*** Tile Engine
For SY=0 To 24
For SX = 0 To 24
DisplaySprite(100+Map(MapX+SX,MapY+SY), #Display_Left + 16*SX - FineX , #Display_Top + 16*SY - FineY )
Next
Next
;***********************************
;***********************************
;*** Frame Display
;***
;*** erst so ansehen, dann entkommentieren.
; DisplaySprite(97, #Display_Left - 24, #Display_Top - 24 )
; DisplaySprite(97, #Display_Left + #Display_Width, #Display_Top - 24 )
; DisplaySprite(97, #Display_Left - 24, #Display_Top + #Display_Height )
; DisplaySprite(97, #Display_Left + #Display_Width, #Display_Top + #Display_Height )
; DisplaySprite(98, #Display_Left, #Display_Top - 24 )
; DisplaySprite(98, #Display_Left, #Display_Top + #Display_Height )
; DisplaySprite(99, #Display_Left - 24, #Display_Top )
; DisplaySprite(99, #Display_Left + #Display_Width, #Display_Top )
;***********************************
FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape)
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.