Tôi muốn nhập một trang tính và chọn một sprite. Làm thế nào tôi sẽ làm điều này trong Python/pygame?Làm thế nào để bạn chọn một hình ảnh sprite từ một bảng sprite bằng Python?
Trả lời
Tôi làm điều này, nó có thể bạn quan tâm:
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
Hy vọng tôi có thể giúp
Tôi nhận ra điều này là hồi sinh một câu trả lời khá cũ, nhưng tôi đã tự hỏi tại sao bạn lại gặp rắc rối khi sử dụng set_clip và get_clip khi bạn có thể vừa thông qua Rect bạn muốn trực tiếp trực tiếp. – jlund3
Oh wow, đây là từ gần một năm trước lol. Chà, lúc đó tôi thực sự vẫn còn mới mẻ với pygame mặc dù tôi đang trả lời các câu hỏi, và đó là cách tôi học được nó. Nó cũng có vẻ sạch hơn một chút với tôi theo cách của nó. Nhưng bạn là chính xác, bạn có thể dễ dàng vượt qua chính Rect. – hammythepig
Các spritesheet nạp trên là một phương pháp tốt. Dựa trên mã đó, tôi đã thực hiện chức năng này tổng quát mà làm việc cho bất kỳ 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
Để tham khảo, điều này cắt tấm thành sprites cá nhân một hàng tại một thời điểm từ trái sang phải.
Mã trên được đăng bởi aquasheep thật tuyệt vời! Mặc dù trong dòng:
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
tôi đã phải gỡ bỏ -len_sprt_y
và -len_sprt_x
nó chỉ sẽ không tải các sprites cuối cùng trên trục x và y. Nó có thể thay đổi tùy thuộc vào kích thước sprite, kích thước y và kích thước sprite thực tế.
Bạn không cần gọi số set_clip
và get_clip
như được đề cập trong các câu trả lời khác. Chỉ cần vượt qua một rect, tuple hoặc danh sách để 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. Làm thế nào để tạo một sprite từ nhiều thư mục bằng Compass?
- 2. Làm thế nào để lật một sprite/texture trong OpenGLES?
- 3. Làm thế nào tôi có thể mở rộng quy mô/kéo dài/nghiêng một sprite từ một bảng sprite với javascript?
- 4. CSS: Quản lý ảnh Sprite bằng .Less
- 5. tải hình ảnh từ sprite và thêm vào a href
- 6. Overlay 2d vũ khí sprite trên nhân vật sprite?
- 7. làm thế nào để thay đổi vị trí sprite động?
- 8. AABB của sprite xoay?
- 9. Sprite bị mờ
- 10. Làm thế nào để loại bỏ băm từ tên tập tin hình ảnh sprite tạo ra của Compass?
- 11. Xóa đường viền xung quanh hình ảnh sprite trong Chrome
- 12. Làm thế nào để thay đổi lớp Sprite trong andengine
- 13. Làm mịn chuyển động sprite ở đầu
- 14. Three.js: Có thể lật một sprite không?
- 15. hình nền sprite đáp ứng, cách
- 16. Tạo một ứng dụng chỉnh sửa hình ảnh bằng Python
- 17. Làm thế nào để di chuyển một Sprite trong Fling/Swipe hướng (Diagonally) bằng cách sử dụng AndEngine
- 18. Tôi vẫn cần phải đệm ảnh trong CSS Sprite?
- 19. Cách sử dụng CSS sprite cho hình nền Lặp lại?
- 20. Làm cách nào để lặp lại sprite theo chiều ngang?
- 21. Thư viện hoạt ảnh Javascript Sprite cho thẻ Canvas
- 22. CSS Navigation Sprite - Odd Shapes (không phải hình vuông)
- 23. XNA 2D Camera Engine Follows Sprite
- 24. Làm thế nào để bạn tổng hợp một hình ảnh vào một hình ảnh khác với PIL trong Python?
- 25. iPhone Cocos2d - Đoạn clip/mặt nạ/khung hình Sprite
- 26. Cocos2d: Di chuyển một Sprite dọc theo một con đường/bezier?
- 27. Làm cách nào để xác định hướng của một sprite khác trong Scratch
- 28. Quy mô CSS sprite pixel art mà không làm mịn hình ảnh
- 29. Làm cách nào để liên kết một Pyglet sprite với hình dạng Pymunk để chúng xoay với nhau?
- 30. Làm thế nào để tạo hình động từ một Bảng hình ảnh trong Mathematica 7
Bạn nên cung cấp thêm thông tin, như thư viện và khung mà bạn đang sử dụng để phát triển trò chơi. Giải pháp có thể phụ thuộc vào điều đó. –
oh. Có, tôi quên đề cập đến tôi đang sử dụng Pygame. – enrique2334