如何在课堂上编写冲突程序?

2024-06-09 23:08:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直很难让你上班。我是新来的,不知道编码的来龙去脉,所以请你解释一下你的理由

下面是一些代码的简单示例:

def __init__(self, x, y, width, height, sprite):
    self.x = player_x
    self.y = player_y
    self.width = player.width
    self.height = player.height
    self.col = pygame.sprite.collide_rect(self, sprite)
    pygame.sprite.Sprite.__init__(self)

def velocity_player(self):
    player_vertical_velocity = 0
    player_horizontal_velocity = 0
    player_y = player_y + player_vertical_velocity
    player_x = player_x + player_horizontal_velocity
    player_fr = 5

def render(self):
    player_surface = pygame.image.load("Bunny.png")
    player_surface.set_colorkey(TRANSPARENT_GREEN)

    player_left = pygame.image.load("Bunny_left.png")
    player_left.set_colorkey(TRANSPARENT_GREEN)

    player_left = pygame.image.load("Bunny_left.png")
    player_left.set_colorkey(TRANSPARENT_GREEN)

    player_fall = pygame.image.load("Bunny_Fall.png")
    player_fall.set_colorkey(TRANSPARENT_GREEN)
    
    player_jump = pygame.image.load("Bunny_r_Jump.png")
    screen.blit(player_surface, [player_x, player_y])

Tags: imageselfpngdefloadgreenleftpygame
1条回答
网友
1楼 · 发布于 2024-06-09 23:08:15

首先,从学习Classes的概念开始(另见Python - Classes and OOP Basics)。必须在每一帧中检测碰撞。通常你不想在课堂上做这件事。见How do I detect collision in pygame?

当使用^{}s^{}s时,冲突由^{}^{}等函数检测。但是,碰撞检测通常不会在Sprite类中执行。这是在管理精灵和精灵之间交互的外部代码中完成的

最简单的例子:

import pygame
pygame.init()
window = pygame.display.set_mode((250, 250))

class RectSprite(pygame.sprite.Sprite):
    def __init__(self, color, x, y, w, h):
        super().__init__() 
        self.image = pygame.Surface((w, h))
        self.image.fill(color)
        self.rect = pygame.Rect(x, y, w, h)

player = RectSprite((255, 0, 0), 0, 0, 50, 50)
obstacle1 = RectSprite((128, 128, 128), 50, 150, 50, 50)
obstacle2 = RectSprite((128, 128, 128), 150, 50, 50, 50)
all_group = pygame.sprite.Group([obstacle1, obstacle2, player])
obstacle_group = pygame.sprite.Group([obstacle1, obstacle2])

run = True
while run:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False

    player.rect.center = pygame.mouse.get_pos()
    collide = pygame.sprite.spritecollide(player, obstacle_group, False)
    
    window.fill(0)
    all_group.draw(window)
    for s in collide:
        pygame.draw.rect(window, (255, 255, 255), s.rect, 5, 1)
    pygame.display.flip()

pygame.quit()

相关问题 更多 >