【发布时间】:2020-04-28 10:23:03
【问题描述】:
这是我的代码
import pygame, os
os.environ["SDL_VIDEO_CENTERED"] = "1"
pygame.init()
win = pygame.display
d = win.set_mode((1200, 600))
class player:
def __init__(self, x, y, height, width):
self.x = x
self.y = y
self.height = height
self.width = width
self.speed = 2
def draw(self):
pygame.draw.rect(d, (0, 0, 0), (self.x, self.y, self.width, self.height))
def move_left(self):
self.x -= self.speed
def move_right(self):
self.x += self.speed
class bullet:
def __init__(self):
self.radius = 10
self.speed = 20
def shoot(self):
x = p.x
y = p.y
self.shooting = True
while self.shooting:
d.fill((98, 98, 98))
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
quit()
y -= self.speed
pygame.draw.circle(d, (255, 0, 0), (x, y), self.radius)
pygame.time.Clock().tick(100)
win.update()
if y <= 0:
self.shooting = False
b = bullet()
p = player(600, 500, 50, 30)
while True:
d.fill((98, 98, 98))
p.draw()
for event in pygame.event.get():
pass
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_SPACE:
b.shoot()
if event.key == pygame.K_LEFT:
p.move_left()
if event.key == pygame.K_RIGHT:
p.move_right()
win.update()
这是经过几次试验和错误后我可以想出的,但它确实无效。首先,当我按下空格键时,播放器会消失。我想这很明显,因为我有不同的射击和播放器循环,但我不知道如何绕过它并在同一个循环中实现射击和播放器。
我遇到的第二个问题是打破while self.shooting: 循环。当 y 达到某个点时,我尝试通过这样做来打破它
if y <= 0:
self.shooting = False
但是这确实中断了。相反,它会重新开始循环。
我遇到的另一个奇怪问题是,每次我移动鼠标(稍微快一点)或一次按下一堆按钮时,它都会打破while self.shooting 循环。
【问题讨论】:
-
看看@cookertron 对这个问题的回答:stackoverflow.com/questions/59554633/…