2012-05-12 72 views
9

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?

+2

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 đó. –

+0

oh. Có, tôi quên đề cập đến tôi đang sử dụng Pygame. – enrique2334

Trả lời

6

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

+1

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

+0

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

6

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.

0

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-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ế.

0

Bạn không cần gọi số set_clipget_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)) 
Các vấn đề liên quan