gpt4 book ai didi

python - 当我编码 'Pong' 时,为什么球无法在 Pygame 中移动?有人可以帮我检查我的代码吗?

转载 作者:太空宇宙 更新时间:2023-11-03 17:22:35 26 4
gpt4 key购买 nike

我是 Pygame 的初学者。我已经编写了一个用于沿不同方向移动两个球的函数,并且按照说明对其进行了编码,但它似乎不起作用。我可以在屏幕上画两个球,但它们不会移动。我修复了它将近 1 个小时,但不知道为什么球不动。

那么,有人可以帮我检查我的代码并给我一些提示吗?我将非常感谢任何帮助我的人!

我的代码如下所示

import pygame,sys,time
from pygame.locals import *

# User define function
def ball_move(Surface,white,pos,rad,speed):
size=Surface.get_size()
for item in [0,1]:
pos[item]=pos[item]+speed[item]
if pos[item]<rad:
speed[item]=-speed[item]
if pos[item]+rad>size[item]:
speed[item]=-speed[item]

# Open a brand-new window

pygame.init()
Screen_size = (500,400)
Title = ('Pong')
Frame_Delay = 0.01
Surface= pygame.display.set_mode(Screen_size,0,0)
pygame.display.set_caption(Title)

# Set up white color for drawing balls

white=pygame.Color('white')

# Now, we start to draw two balls

pos1=(100,200)
pos2=(400,200)
rad=10
ball1=pygame.draw.circle(Surface,white,pos1,rad,0)
ball2=pygame.draw.circle(Surface,white,pos2,rad,0)
pygame.display.update()

# Now, define speed
speed1=(2,-2)
speed2=(-2,2)

# Now, we define a loop
while ball1:
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()

# Now, we move the ball
ball1move=ball_move(Surface,white,pos1,rad,speed1)
ball2move=ball_move(Surface,white,pos2,rad,speed2)
pygame.draw.circle(Surface,white,pos1,rad,0,0)
pygame.draw.circle(Surface,white,pos2,rad,0,0)
surface.fill(pygame.Color('black'))

最佳答案

saulspatz 的答案部分正确,部分错误。如果您不愿意,则不必使用 Sprite 。 pygame.draw 并不漂亮,但完全可用。主要问题似乎是您对事件循环中要做什么的理解。所有这些都应该包含在其中:

while running:
# Handdle your events
# update your state
# draw to your display
pygame.display.update()

我还注意到,在您在抽奖后填充的循环之后,您无法访问的代码。请记住,无论您是填充blit还是绘制,最新的内容都会覆盖其余内容。因此,对于您的示例:

import pygame ,sys, time
from pygame.locals import *

# User define function
def ball_move(surface, pos, rad, speed):
def _add(l_pos, l_speed, l_size):
l_pos += l_speed
if l_pos <= rad or l_pos >= l_size - rad:
l_speed = -l_speed
return l_pos, l_speed
size = surface.get_size()
pos_x, speed_x = _add(pos[0], speed[0], size[0])
pos_y, speed_y = _add(pos[1], speed[1], size[1])
return (pos_x, pos_y), (speed_x, speed_y)

pygame.init()
screen_size = (500, 400)
screen = pygame.display.set_mode(screen_size)
pygame.display.set_caption('Pong')
running = True

pos1 = (100, 200)
pos2 = (400, 200)
speed1 = (2, -2)
speed2 = (-2, 2)
rad = 10

while running:
# Handdle your events
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False

# update your state
pos1, speed1 = ball_move(screen, pos1, rad, speed1)
pos2, speed2 = ball_move(screen, pos2, rad, speed2)

# draw to your display
screen.fill(pygame.Color('black'))
pygame.draw.circle(screen, pygame.Color('white'), pos1, rad)
pygame.draw.circle(screen, pygame.Color('white'), pos2, rad)
pygame.display.update()

关于python - 当我编码 'Pong' 时,为什么球无法在 Pygame 中移动?有人可以帮我检查我的代码吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32982963/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com