คำถามเกี่ยวกับการสร้างสไปรท์ใน pygame

โดยพื้นฐานแล้วสิ่งที่ฉันรู้ต้องทำอย่างไรคือเพิ่มผู้เล่นสไปรท์ (สร้างคลาสผู้เล่นที่สืบทอดจาก pygame.sprite ฯลฯ ... ) สิ่งนี้ได้ผลสำหรับฉัน

สิ่งที่ฉันต้องการทราบคือต้องทำซ้ำการสร้างสไปรท์และเพิ่มลงในกลุ่มสไปรท์ นี่เป็นเพราะฉันมีอาร์เรย์ 2 มิติและฉันมีฟังก์ชันที่อ่านสิ่งนี้และวาง "ไทล์" ตามนั้นในพื้นที่ 2 มิติ นี่คือการสร้างระดับที่ง่ายขึ้น ดังนั้นสิ่งที่ฉันต้องการให้ฟังก์ชันนี้ทำคือสร้างสไปรต์เหล่านี้ (ฉันเดาว่าด้วย for loop ที่อ่านอาร์เรย์ ?) และเพิ่มพวกมันเพื่อทำกลุ่ม แต่มันใช้งานไม่ได้ ดังนั้นฉันจึงมีคำถามก่อน:

1)คุณสามารถสร้างสไปรท์นอกฟังก์ชัน init ในชั้นเรียนได้หรือไม่

2) จริงๆ แล้วสไปรท์คืออะไร มันเป็นพื้นผิวที่เชื่อมต่อกับสี่เหลี่ยมผืนผ้าหรือไม่?

3)และสุดท้าย คุณมีความคิดง่ายๆ ว่าจะทำยังไงให้สำเร็จ: ถ้าฉันให้อาร์เรย์ 2 มิติแก่คุณ คุณจะสร้างฟังก์ชันที่อ่านอาร์เรย์นี้และคำนวณตำแหน่งได้อย่างไร (ไม่เป็นไร ฉันคิดว่าฉันคิดออกแล้ว ออก) และที่สำคัญที่สุดคือสร้างสไปรท์ออกจากตำแหน่งที่กำหนด จากนั้นจึงสามารถเพิ่มเข้าในกลุ่มสไปรท์ได้

ขอบคุณล่วงหน้า


person notproplayer 3    schedule 05.06.2020    source แหล่งที่มา


คำตอบ (1)


คุณสามารถสร้างสไปรท์นอกฟังก์ชัน init ในคลาสได้หรือไม่

แน่นอน.

สไปรท์คืออะไรกันแน่ มันเป็นพื้นผิวควบคู่กับเรคคอร์ดหรือเปล่า?

ถ้าเราพูดถึงคลาส Sprite ของ pygame: ใช่

สไปรท์ดังกล่าวโดยพื้นฐานแล้วคือ Surface (แอตทริบิวต์ image) และ Rect (แอตทริบิวต์ rect) ทำงานร่วมกันได้ดีที่สุดกับคลาส Group ของ pygame

และในที่สุดคุณก็มีความคิดง่ายๆ ว่าจะทำยังไงให้สำเร็จ ....

เพียงสร้างลูปที่ซ้อนกันเพื่อวนซ้ำอาเรย์

นี่เป็นตัวอย่างง่ายๆ:

import pygame
pygame.init()

TILESIZE = 64

class Actor(pygame.sprite.Sprite):
    def __init__(self, color, pos):
        super().__init__()
        self.image = pygame.Surface((TILESIZE, TILESIZE))
        self.image.fill(pygame.Color(color))
        self.rect = self.image.get_rect(topleft = pos)

def main():

    data = [
        '     YUB  ',
        '  G       ',
        '        B ',
        '          ',
        '   Y      ',
        '        U ',
    ]

    screen = pygame.display.set_mode((len(data[0]) * TILESIZE, len(data) * TILESIZE))
    sprites = pygame.sprite.Group()

    colors = {
        'G': 'green',
        'B': 'black',
        'Y': 'yellow',
        'U': 'dodgerblue'
    }

    x, y = 0, 0
    for line in data:
        for char in line:
            if char in colors:
                sprites.add(Actor(colors[char], (x * TILESIZE, y * TILESIZE)))
            x += 1
        x = 0
        y += 1

    while True:
        events = pygame.event.get()
        for event in events:
            if event.type == pygame.QUIT:
                pygame.quit()
                return

        sprites.update()

        screen.fill((100, 100, 100))
        sprites.draw(screen)

        pygame.display.flip()

main()

ป้อนคำอธิบายรูปภาพที่นี่

คุณสามารถดูตัวอย่างอื่นได้ที่นี่

person sloth    schedule 05.06.2020