微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

即使正在更新x和y值,pygame也不会通过按键更新draw.rect

如何解决即使正在更新x和y值,pygame也不会通过按键更新draw.rect

我对编程还很陌生,我正在致力于构建Pong只是一个初学者项目。我编写了以下代码来尝试移动两个拨片,但是当按下向上/向下/ w / s键时,它们都不移动。但是,在尝试自己调试时,我将其设置为将x和y值打印到控制台,以查看是否是问题所在,并且x和y值正在更新,但矩形的坐标不是。我敢肯定这是一个相当简单的修复程序,但是我对编程还是很陌生的,只是不知道出了什么问题。这是我的代码

import time
pygame.init()
screenW = 800
screenH = 600
win = pygame.display.set_mode((screenW,screenH))
pygame.display.set_caption("Pong")
clock = pygame.time.Clock()
font = pygame.font.SysFont("comicsans",20)
paddleW = 20
paddleH = 100
ballSpeed = 15

class paddle(object):
    def __init__(self,x,y,width,height):
        self.x = x
        self.y = y
        self.width = width
        self.height = height
        self.pad = (self.x,self.y,self.width,self.height)

    def draw(self,win):
        pygame.draw.rect(win,(255,255,255),self.pad)

class ball(object):
    def __init__(self,side):
        self.x = x
        self.y = y
        self.side = side
        self.pad = (self.x,self.side,self.side)

    def draw(self,self.pad)

def redrawGameWindow():
    win.fill((0,0))
    paddleLeft.draw(win)
    paddleRight.draw(win)
    theBall.draw(win)
    pygame.display.update()



#Main Loop:
paddleLeft = paddle(10,screenH//2,paddleW,paddleH)
paddleRight = paddle(screenW - 10 - paddleW,paddleH)
theBall = ball(screenW//2,30)
run = True
while run:
    clock.tick(30)
    
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False

    keys = pygame.key.get_pressed()

    if keys[pygame.K_UP]:
        print("left up")
        print(paddleRight.y)
        paddleRight.y -= ballSpeed

    elif keys[pygame.K_DOWN]:
        print("left down")
        print(paddleRight.y)
        paddleRight.y += ballSpeed

    elif keys[pygame.K_w]:
        print("right up")
        print(paddleLeft.y)
        paddleLeft.y -= ballSpeed

    elif keys[pygame.K_s]:
        print("right down")
        print(paddleLeft.y)
        paddleLeft.y += ballSpeed

    redrawGameWindow()


pygame.quit()

解决方法

更改属性jupyter nbextension enable hinterland/hinterlandEnabling notebook extension hinterland/hinterland... - Validating: OK 时,列表x的内容不会发生神奇的变化。

在绘制之前,您必须更新y。例如:

pad

无论如何,我建议使用pygame.Rect对象而不是属性.padclass paddle(object): # [...] def draw(self,win): self.pad = (self.x,self.y,self.width,self.height) pygame.draw.rect(win,(255,255,255),self.pad) xy

width

完整示例:

height

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。