pygame: Bildbereich ausschneiden

Hier werden alle anderen GUI-Toolkits sowie Spezial-Toolkits wie Spiele-Engines behandelt.
Antworten
gfmwm
User
Beiträge: 8
Registriert: Samstag 26. September 2009, 18:35

Hallo alle zusammen,

ich schreibe mir gerade einen Raycaster in python anhand dieses Tutorials. Bis jetzt läuft alles super, aber nun möchte ich Texturen implementieren. Dazu muss ich eine Bilddatei mit den Maßen 64x64 Pixel in 64 Streifen mit der Breite von jeweils einem Pixel schneiden (siehe "TEXTURE MAPPED WALLS" im Tutorial).

An dieser Stelle bin ich leider gescheitert. Ich habe es mit der Funktion:

pygame.transform.chop(Surface, rect): return Surface

probiert, aber irgendwas mache ich falsch. Ich weiß weder genau was diese Funktion macht, noch was für Parameter ich übergeben muss (irgendwas stimmt mit dem RECT nicht). Hier mal mein nicht funktionierender Code:

Code: Alles auswählen

import pygame

pygame.init()
screen = pygame.display.set_mode((320, 200))

t = []
wallTexture = pygame.image.load('tile.jpg')
wallTexture = wallTexture.convert()

def chopTexture():
	for i in range(64):
		#chop left side
		slice = pygame.transform.chop(wallTexture, (0, 0, i, 64))	
		#chop right side
		slice = pygame.transform.chop(slice, (i+1, 0, 63-i, 64))	
		#save slice in array
		t.append(slice)

chopTexture()

for i in range(64):
	screen.blit(t[i], (i,0))
pygame.display.flip()
Für das RECT nehme ich folgende Parameter an (xpos, ypos, width, height)

Hat jemand eine Idee warum das nicht funktioniert oder einen Codebeispiel für transform.chop???

Danke schon mal
[code]print(''.join(map(lambda c:chr(33+((ord(c)-33+47)%94)),[x for x in 'p{{/*~&#/qp$t/p#t/qt{~}v/%~/&$/PPP'])).replace('^',' '))[/code]
gfmwm
User
Beiträge: 8
Registriert: Samstag 26. September 2009, 18:35

Ich hab es selbst hinbekommen. Falls es jemanden interessiert....

Code: Alles auswählen

import pygame

pygame.init()
screen = pygame.display.set_mode((320, 200))

t = []
wallTexture = pygame.image.load('tile.jpg')
wallTexture = wallTexture.convert()

def chopTexture():
	for i in range(64):
		#chop left side
		slice = pygame.transform.chop(wallTexture, (0, 0, i, 0))	
		#chop right side
		slice = pygame.transform.chop(slice, (1, 0, 64, 0))	
		#save slice in array
		t.append(slice)

chopTexture()

for i in range(64):
	screen.blit(t[i], (i,0))

pygame.display.flip()
while 1:
	for event in pygame.event.get():
		if event.type == pygame.QUIT:
			raise SystemExit
[code]print(''.join(map(lambda c:chr(33+((ord(c)-33+47)%94)),[x for x in 'p{{/*~&#/qp$t/p#t/qt{~}v/%~/&$/PPP'])).replace('^',' '))[/code]
Antworten