Quiero importar una hoja de sprite y seleccionar un sprite. ¿Cómo haría esto en Python/pygame?¿Cómo se selecciona una imagen de sprite de una hoja de sprites en Python?
Respuesta
hice esto, podría interesarle:
import pygame, sys
from pygame.locals import *
SCREEN_X=400
SCREEN_Y=400
#Screen size
SPRT_RECT_X=0
SPRT_RECT_Y=0
#This is where the sprite is found on the sheet
LEN_SPRT_X=100
LEN_SPRT_Y=100
#This is the length of the sprite
screen = pygame.display.set_mode((SCREEN_X, SCREEN_Y)) #Create the screen
sheet = pygame.image.load('C:\YOURFILE') #Load the sheet
sheet.set_clip(pygame.Rect(SPRT_RECT_X, SPRT_RECT_Y, LEN_SPRT_X, LEN_SPRT_Y)) #Locate the sprite you want
draw_me = sheet.subsurface(sheet.get_clip()) #Extract the sprite you want
backdrop = pygame.Rect(0, 0, SCREEN_X, SCREEN_Y) #Create the whole screen so you can draw on it
screen.blit(draw_me,backdrop) #'Blit' on the backdrop
pygame.display.flip()
#Draw the sprite on the screen
Espero que podría ayudar a
Me doy cuenta de que esta es una resurrección bastante antigua, pero me preguntaba por qué se tomó la molestia de usar set_clip y get_clip cuando podría haber pasado el Rect que deseaba subsuperficiar directamente. – jlund3
Oh wow, esto fue desde hace casi un año jaja. Bueno, en aquel entonces yo todavía era nuevo en pygame aunque estaba respondiendo preguntas, y así fue como lo aprendí. También me parece un poco más limpio de lo que es. Pero tienes razón, podrías pasar tan fácilmente el Recto mismo. – hammythepig
El cargador spritesheet anterior es un buen método. Sobre la base de ese código, he hecho esta función generalizada que funciona para cualquier spritesheet:
#!/usr/bin/python
#
# Sprite Sheet Loader - hammythepig
#
# Edited by Peter Kennedy
#
# License - Attribution - hammythepig
#http://stackoverflow.com/questions/10560446/how-do-you-select-a-sprite-image-from-a-sprite-sheet-in-python
#
# Version = '2.0'
import pygame,sys
from pygame.locals import *
def sprite_sheet(size,file,pos=(0,0)):
#Initial Values
len_sprt_x,len_sprt_y = size #sprite size
sprt_rect_x,sprt_rect_y = pos #where to find first sprite on sheet
sheet = pygame.image.load(file).convert_alpha() #Load the sheet
sheet_rect = sheet.get_rect()
sprites = []
print sheet_rect.height, sheet_rect.width
for i in range(0,sheet_rect.height-len_sprt_y,size[1]):#rows
print "row"
for i in range(0,sheet_rect.width-len_sprt_x,size[0]):#columns
print "column"
sheet.set_clip(pygame.Rect(sprt_rect_x, sprt_rect_y, len_sprt_x, len_sprt_y)) #find sprite you want
sprite = sheet.subsurface(sheet.get_clip()) #grab the sprite you want
sprites.append(sprite)
sprt_rect_x += len_sprt_x
sprt_rect_y += len_sprt_y
sprt_rect_x = 0
print sprites
return sprites
#VERSION HISTORY
#1.1 - turned code into useable function
#2.0 - fully functional sprite sheet loader
Como referencia, esto corta hojas en sprites individuales de una fila a la vez, de izquierda a derecha.
¡El código de arriba publicado por aquasheep es brillante! Aunque en líneas:
for i in range(0,sheet_rect.height-len_sprt_y,size[1]):#rows
for i in range(0,sheet_rect.width-len_sprt_x,size[0]):#columns
tuve que quitar -len_sprt_y
y -len_sprt_x
simplemente no sería cargar los últimos sprites en los ejes X e Y. Puede variar según la hoja de sprite x, y, y el tamaño del sprite real también.
No necesita llamar al set_clip
y get_clip
como se menciona en las otras respuestas. Simplemente pase un rect, tuple o list al Surface.subsurface
.
# The size of a sprite in this example is 64x64 pixels.
x_coord = 64 * 2 # This would be the third column.
y_coord = 64 * 3 # Fourth row.
width = 64
height = 64
sheet = pygame.image.load('your_sprite_sheet.png').convert_alpha()
single_image = sheet.subsurface((x_coord, y_coord, width, height))
- 1. ¿cómo uso sprites de imagen en GWT?
- 2. sprites de imagen CSS
- 3. Cómo crear una imagen de sprite
- 4. ¿Cómo puedo escalar/estirar/sesgar un sprite desde una hoja de sprite con javascript?
- 5. Uso de sprites de imagen en android
- 6. ¿Cómo cambio simplemente la imagen de un sprite en cocos2d?
- 7. Aplicando parte de una textura (hoja de sprite/mapa de texturas) a un sprite de punto en iOS OpenGL ES 2.0
- 8. Sprites CSS - utilizando sólo una parte de una imagen como fondo de parte de un elemento
- 9. ¿Superponer 2d sprite de arma sobre sprite de personaje?
- 10. imagen de sprite CSS + fondo-repite una parte de ella
- 11. sprites CSS con tamaño dinámico
- 12. ¿Herramienta fácil de descomponer la imagen de sprite?
- 13. ¿Cómo eliminar el hash de los archivos de imagen de sprite generados por Compass?
- 14. ¿Cómo se selecciona una columna usando Hibernate?
- 15. ¿Cómo extraer parte de esta imagen en Java?
- 16. ¿Son grandes los sprites CSS una buena idea?
- 17. Para agregar una imagen a una hoja sobresaliente en iphone
- 18. Android: Cómo rotar un sprite animado en movimiento basado en las coordenadas de su destino
- 19. Uso de Css Sprites y posición de fondo
- 20. Reemplazando imagen en sprite - desarrollo de juego cocos2d de iphone
- 21. ¿Cómo se selecciona una celda de tabla por su índice?
- 22. CSS: utilizando sprites de imagen con css pseudoclases: antes y después de
- 23. ¿Cómo copio una imagen remota en python?
- 24. sprites CSS para Generación de imágenes dinámicas
- 25. Cómo encontrar una imagen dentro de otra imagen usando python
- 26. Cómo agregar TITLE y ALT a una imagen de fondo (CSS Sprites)?
- 27. Cómo cambiar la capa de Sprite en una página
- 28. Sprites de brújula, estado de vuelo estacionario
- 29. ¿Cómo se selecciona cada enésimo elemento en una matriz?
- 30. ¿Cómo usar un sprite CSS para una imagen de fondo repetitiva?
Debe proporcionar más información, como qué bibliotecas y marcos está utilizando para el desarrollo de juegos. La solución probablemente dependerá de eso. –
oh. Sí, olvidé mencionar que estoy usando Pygame. – enrique2334