Tôi mới chơi với pygame lần đầu tiên (nói chung là tôi mới làm quen với python) và đang tự hỏi liệu có ai có thể giúp tôi không ...
Tôi đang làm một game bắn súng nhỏ và muốn có thể tạo một lớp học cho kẻ xấu. Ý tưởng của tôi là lớp nên kế thừa từ pygame.Surface, nhưng điều này gây ra cho tôi đủ loại vấn đề (def, có thể tôi đang làm rối tung nội dung kế thừa/lớp cơ bản). Ví dụ: tại sao điều này không hoạt động (pygame, màn hình, v.v. tất cả đều hoạt động tốt và được sử dụng trong các phần khác của mã, tôi chỉ muốn chuyển các chức năng tôi đang sử dụng vào một lớp):
lớp Zombie(pygame.Surface):
x_pos = y_pos = 0
def __init__(self, x, y):
#tạo zombie
self = pygame.image.load('zombie_1.png')
self = pygame.transform.scale(self,(50, 50))
x_pos = x
y_pos = y
zombie = Zombie(screen.get_width()/3, screen.get_height()/3)
screen.blit(zombie, (zombie.x_pos, zombie.y_pos))
Ở trên tạo ra lỗi: "pygame.error: display Surface quit" EDIT: Rõ ràng đây là kết quả của việc gọi Surface sau khi gọi pygame.display.quit(). Có ai có kinh nghiệm về pygame muốn dùng thử không?
完整代码:
#Khởi tạo
nhập pygame, sys
pygame.init()
#lớp học
lớp Zombie(pygame.Surface):
x_pos = y_pos = 0
def __init__(self, x, y):
#tạo zombie
self = pygame.image.load('zombie_1.png')
self = pygame.transform.scale(self,(50, 50))
x_pos = x
y_pos = y
def is_hit(mouse_pos):
#lấy biến
(mouseX, mouseY) = mouse_pos
print "\nboxW_x, y = " + str(self.x) + ", " + str(self.y) + "\nmouseX, Y = " + str(mouseX) + ", " + str(mouseY)
headshot_x = self.x + (.5 * zombie.get_width())
headshot_y = self.y + (.25 * zombie.get_height())
lề_of_error_x = (zombie.get_width()/float(1000)) * zombie.get_width()
lề_of_error_y = (zombie.get_height()/float(1000)) * zombie.get_height()
print "Headshot_x: " + str(headshot_x) + ", " + str(headshot_y)
print "sự khác biệt trong ảnh chụp cận cảnh và ảnh chụp thực tế: " + str(mouseX - headshot_x) + ", " + str(mouseY - headshot_y)
print "biên độ lỗi x = " + str(margin_of_error_x) + " y = " + str(margin_of_error_y)
in "kích thước zombie: " + str(zombie.get_size())
hợp lệ_x = hợp lệ_y = Sai
nếu abs(mouseX-headshot_x) < lề_of_error_x:
hợp lệ_x = Đúng
in "x hợp lệ"
nếu abs(mouseY-headshot_y) < lề_of_error_y:
hợp lệ_y = Đúng
in "y hợp lệ"
trả về (valid_x và valid_y)
#danh sách kẻ xấu
danh sách zombie = []
#functions (sau này sẽ được chuyển vào các lớp)
chắc chắn là_hit():
#lấy biến
(mouseX, mouseY) = pygame.mouse.get_pos()
print "\nboxW_x, y = " + str(boxW_x) + ", " + str(boxW_y) + "\nmouseX, Y = " + str(mouseX) + ", " + str(mouseY)
headshot_x = boxW_x + (.5 * boxW.get_width())
headshot_y = boxW_y + (.25 * boxW.get_height())
lề_of_error_x = (boxW.get_width()/float(1000)) * boxW.get_width()
lề_of_error_y = (boxW.get_height()/float(1000)) * boxW.get_height()
print "Headshot_x: " + str(headshot_x) + ", " + str(headshot_y)
print "sự khác biệt trong ảnh chụp cận cảnh và ảnh chụp thực tế: " + str(mouseX - headshot_x) + ", " + str(mouseY - headshot_y)
print "biên độ lỗi x = " + str(margin_of_error_x) + " y = " + str(margin_of_error_y)
in "kích thước zombie: " + str(boxW.get_size())
hợp lệ_x = hợp lệ_y = Sai
nếu abs(mouseX-headshot_x) < lề_of_error_x:
hợp lệ_x = Đúng
in "x hợp lệ"
nếu abs(mouseY-headshot_y) < lề_of_error_y:
hợp lệ_y = Đúng
in "y hợp lệ"
trả về (valid_x và valid_y)
pygame.mouse.set_visible(Đúng)
pygame.mouse.set_cursor(*pygame.cursors.diamond)
#Trưng bày
màn hình = pygame.display.set_mode((640, 640))
pygame.display.set_caption("Vụ thảm sát Zombie")
#Thực thể
#lý lịch
nền = pygame.Surface(screen.get_size())
nền = nền.convert()
nền.fill((0, 0, 0))
#làm zombie
boxW = pygame.image.load('zombie_1.png')
boxW = pygame.transform.scale(boxW,(50, 50))
#thiết lập một số biến hộp
boxW_x = screen.get_width()/3
boxW_y = screen.get_height()/3
#kiểm tra lớp học zombie
zombie = Zombie(screen.get_width()/3, screen.get_height()/3)
#Hoạt động
#Giao phó
đồng hồ = pygame.time.Clock()
keepGoing = Đúng
#Vòng lặp
đếm = 0;
xoay_vect = 1,01
trong khi tiếp tục:
#thiết lập xoay_vect cho thẻ này
if (đếm% 3) == 0:
vòng quay_vect = 0 - vòng quay_vect
#Thời gian
đồng hồ.tick(30)
#Sự kiện
cho sự kiện trong pygame.event.get():
nếu sự kiện.type == pygame.QUIT:
tiếp tục đi = Sai
Elif sự kiện.type là pygame.MOUSEBUTTONDOWN:
#lặp qua danh sách zombie, sử dụng hàm "is_hit()" của mỗi cái
keepGoing = không(is_hit())
#Làm mới màn hình
screen.blit(nền, (0,0))
boxW = pygame.transform.rotozoom(pygame.image.load('zombie_1.png'), spinning_vect, 1.01)
boxW = pygame.transform.scale(boxW,(đếm+50, đếm+100))
#forzombie trong zombie
screen.blit(boxW,(boxW_x+(boxW_x * .1), boxW_y+(boxW_y * .1)))
# lỗi là kết quả của dòng sau
screen.blit(zombie, (zombie.x_pos, zombie.y_pos))
pygame.display.flip()
#số lượng tăng
đếm += 1
Bạn không gọi hàm tạo được kế thừa:
lớp Zombie(pygame.Surface):
def __init__(self, x, y):
pygame.Surface.__init__(self, size=(w,h))
và bạn đang chỉ định choself
. Điều đó sẽ không hiệu quả.
Tôi là một lập trình viên xuất sắc, rất giỏi!