TileSprite

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

TileSprite

Beitrag von Fluid Byte »

Ich war gerade dabei ein altes BlitzBasic Spiel nach PB zu portieren und das ist mir der Befehl TileBlock / TileImage aufgefallen. Ich finde diesen Befehl sehr nützlich deshalb hier mal eine PB Version.

Code: Alles auswählen

Procedure ScreenWidth()
	!EXTRN _PB_Screen_Width
	!MOV Eax,[_PB_Screen_Width]
	ProcedureReturn
EndProcedure

Procedure ScreenHeight()
	!EXTRN _PB_Screen_Height
	!MOV Eax,[_PB_Screen_Height]
	ProcedureReturn
EndProcedure

Procedure TileSprite(Sprite,X=0,Y=0)	
	Protected Width, Height, CX, CY, IX, IY
	
	Width  = SpriteWidth(Sprite)
	Height = SpriteHeight(Sprite)
	
	CX = ScreenWidth() / Width
	CY = ScreenHeight() / Height

	If ScreenWidth() % Width  : CX + 1 : EndIf
	If ScreenWidth() % Height : CY + 1 : EndIf

	For IX = -1 To CX
		For IY = -1 To CY
			DisplaySprite(Sprite,(IX * Width) + (X % Width),(IY * Height) + (Y % Height))
		Next
	Next
EndProcedure

; -----------------------------------------------------------------------

InitSprite() : InitKeyboard()

OpenWindow(0,0,0,640,480,"TileSprite",#PB_Window_SystemMenu | #PB_Window_ScreenCentered)

OpenWindowedScreen(WindowID(0),0,0,640,480,0,0,0)

CreateSprite(0,64,64)

StartDrawing(SpriteOutput(0))
For i=0 To 31 : Box(0,i,64,1,255 - (i * 100) / 31) : Next
For i=0 To 31 : Box(0,i+32,64,1,140 - (i * 70) / 31) : Next
DrawingMode(4)
Box(0,63,64,1,$404060) : Box(63,0,1,64,$404060) 
StopDrawing()

; -----------------------------------------------------------------------

Repeat
	EventID = WindowEvent()
	
	ClearScreen(0)
	
	ExamineKeyboard()
	
	SPRX + 1 : SPRY + 1
	
	TileSprite(0,SPRX,SPRY)
	
	FlipBuffers()
Until KeyboardPushed(1) Or EventID = 16
Windows 10 Pro, 64-Bit / Outtakes | Derek
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

ja schick, und muss ich jetzt erst Blitz kaufen, um eine Beschreibung des befehls zu erhalten?

ein bißchen doku darf ruhig sein...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

Hehe, maul nicht! Ich bin schreibfaul, das weisst du. Aber kann ja wenigstens den Text der BlitzDoku posten... :freak:
Use this to tile an entire or portion of the screen with a single repetative image.
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
legion
Beiträge: 467
Registriert: 08.10.2006 18:04
Computerausstattung: Intel Core i5-6500 @ 4x 3.6GHz mit Windows 10 Pro, Intel Core-i7 mit Ubuntu 18.04 bionic, x86_64 Linux 4.18.0-16-generic, Microsoft Surface Pro - Windows 10 Pro
Wohnort: Wien
Kontaktdaten:

Beitrag von legion »

Super Sache ! :D
Beim Thema Grafik sind von dir immer gute Postings zu erwarten !

Lg. Legion
PB 5.71 LTS Windows 10 Pro & Ubuntu 18.04.2 LTS & Linux Mint 19.3
-----------------------------------------------------
Alles ist, wie man glaubt, dass es ist!
Antworten