Pygame精灵不会移动,但没有错误?

2024-05-26 11:12:36 发布

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

我需要帮助。我不能移动桨精灵,也没有出现错误的闲置。图像出现在窗口上,但不上下移动。我正在尝试做一个简单的乒乓球游戏,任何提示或技巧都会非常感激。这是密码员。你知道吗

import pygame
import random
from Colors3 import *

WIDTH = 700
HEIGHT = 650
FPS = 30

pygame.init()
window = pygame.display.set_mode((WIDTH, HEIGHT))

clock = pygame.time.Clock()

class PaddleB(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.image.load("BluePaddle.png")
        self.image = pygame.transform.scale(self.image,(20,80))
        self.rect = self.image.get_rect()
        self.rect.x = 20
        self.rect.y = HEIGHT / 2
        self.keys = pygame.key.get_pressed()
        self.vel = 5
        self.speedy = 0

    def draw(self):
        key = pygame.key.get_pressed()
        self.speedy = 0

        if key[pygame.K_UP]:
            self.speedy = -5
        if key[pygame.K_DOWN]:
            self.speedy = 5

        self.rect.y += self.speedy



def Drawn():
    all_sprites = pygame.sprite.Group()
    paddle1 = PaddleB()
    all_sprites.add(paddle1)
    all_sprites.update()
    all_sprites.draw(window)
    pygame.display.update()


# Game loop
running = True
while running:
    clock.tick(FPS)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False


    Drawn()

pygame.quit()

Tags: keyrectimageimportselfgetifinit
1条回答
网友
1楼 · 发布于 2024-05-26 11:12:36

我重新整理了一下您的代码,并更改了事件处理,以便移动拨片。添加了一些注释,使代码更清晰,并使初始桨位置成为窗口的中心。你知道吗

我已经更新了游戏循环,以遵循事件处理游戏状态更新显示更新模式,如book中所述。你知道吗

import pygame
import random
# from Colors3 import *

WIDTH = 700
HEIGHT = 650
FPS = 30

pygame.init()
window = pygame.display.set_mode((WIDTH, HEIGHT))

clock = pygame.time.Clock()

class PaddleB(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        # self.image = pygame.image.load("BluePaddle.png")
        # self.image = pygame.transform.scale(self.image,(20,80))
        # create an image instead of loading one.
        self.image = pygame.Surface((20, 80))
        self.image.fill(pygame.color.Color("blue"))
        self.rect = self.image.get_rect()
        # start paddle in the middle of the window, on the left
        self.rect.x = 20
        self.rect.y = HEIGHT / 2 - self.rect.height / 2
        self.vel = 5
        self.speedy = 0

    def update(self):
        # this will move the sprite based on its speed
        self.rect.y += self.speedy
        # TODO: Check limits here to prevent off screen movement.

# Setup game
all_sprites = pygame.sprite.Group()
paddle1 = PaddleB()
all_sprites.add(paddle1)
pygame.display.set_caption("Half Pong!")
# Game loop
running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_UP:
                paddle1.speedy -= paddle1.vel
            elif event.key == pygame.K_DOWN:
                paddle1.speedy += paddle1.vel
        elif event.type == pygame.KEYUP:
            if event.key == pygame.K_UP:
                paddle1.speedy += paddle1.vel
            elif event.key == pygame.K_DOWN:
                paddle1.speedy -= paddle1.vel
    # update game elements
    all_sprites.update()
    # draw surface
    window.fill(pygame.color.Color("grey"))
    all_sprites.draw(window)
    # show surface
    pygame.display.update()

    clock.tick(FPS)
pygame.quit()

如果你需要任何额外的澄清,请告诉我。你知道吗

相关问题 更多 >