Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Mengelakkan Penimpaan Apabila Melahirkan Berbilang Objek Permainan Secara serentak dalam Python?
Melahirkan Berbilang Kejadian Objek Yang Sama Secara serentak dalam Python
Dalam permainan anda, anda ingin membuat seketika berbilang kejadian objek yang sama (bulatan). Walau bagaimanapun, anda telah menghadapi isu di mana bulatan yang dihasilkan kemudiannya menimpa bulatan sebelumnya.
Masalahnya terletak pada penggunaan masa.sleep(). Fungsi ini menghentikan pelaksanaan program, menghalang pemaparan berterusan objek permainan. Untuk menangani perkara ini, anda perlu mengawal masa dalam gelung permainan menggunakan kaedah alternatif.
Satu pendekatan ialah menggunakan fungsi pygame.time.get_ticks(), yang mengembalikan bilangan milisaat sejak pemulaan pygame. Anda boleh menetapkan selang masa, seperti 500 milisaat, selepas itu objek baharu akan muncul. Dengan mengukur masa semasa dan membandingkannya dengan masa sasaran, anda boleh mencipta objek baharu dengan sewajarnya.
Pilihan lain melibatkan penggunaan modul pygame.event dan pygame.time.set_timer(). Pendekatan ini membolehkan anda menentukan acara tersuai (mis., USEREVENT 1) dan menentukan selang masa dalam milisaat untuk mencipta acara berulang kali. Dalam gelung acara, anda boleh menyemak acara tersuai ini dan menghasilkan objek baharu apabila ia berlaku.
Berikut ialah contoh menggunakan pendekatan pertama dengan pygame.time.get_ticks():
import pygame import random pygame.init() window = pygame.display.set_mode((800, 600)) class Circle(): def __init__(self, color, x, y, radius, width): self.color = color self.x = x self.y = y self.radius = radius self.width = width def draw(self, win, outline=None): pygame.draw.circle(win, self.color, (self.x, self.y, self.radius, self.width), 0) object_list = [] time_interval = 500 # 500 milliseconds == 0.5 seconds next_object_time = 0 run = True while run: window.fill((0, 0, 0)) current_time = pygame.time.get_ticks() if current_time > next_object_time: next_object_time += time_interval object_list.append(Circle((255, 255, 255), random.randint(0, 800), random.randint(0, 600), 20, 20)) for object in object_list: object.draw(window) pygame.display.update() for event in pygame.event.get(): if event.type == pygame.QUIT: run = False pygame.quit() quit()
Dengan kod ini, kalangan akan dihasilkan setiap 500 milisaat, menyelesaikan isu penggantian. Ingat untuk mengekalkan senarai objek yang dibuat (senarai_objek dalam contoh ini) dan lukis semula semua objek (termasuk yang baharu) dalam setiap bingkai untuk memastikan ia kekal kelihatan.
Atas ialah kandungan terperinci Bagaimana untuk Mengelakkan Penimpaan Apabila Melahirkan Berbilang Objek Permainan Secara serentak dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!