【发布时间】:2020-08-03 16:03:42
【问题描述】:
我正在尝试在 python 中使用pygame 创建一个游戏。 pygame无法实现连拍。
这是我写到现在的代码:
import pygame
import random
pygame.init()
x_SHIP = 50
y_SHIP = 500
x_LASER = 0
y_LASER = 500
LASER_CHANGE = 5
laser_state = 'ready'
vel = 5
bound_LEFT = 0
bound_RIGHT = 520
YELLOW_SPACE_SHIP = pygame.transform.scale(pygame.image.load('assets/pixel_ship_yellow.png'), (80, 72))
BLUE_LASER = pygame.transform.scale(pygame.image.load('assets/pixel_laser_blue.png'), (81, 90))
GREEN_LASER = pygame.transform.scale(pygame.image.load('assets/pixel_laser_green.png'), (81, 90))
RED_LASER = pygame.transform.scale(pygame.image.load('assets/pixel_laser_red.png'), (81, 90))
YELLOW_LASER = pygame.transform.scale(pygame.image.load('assets/pixel_laser_yellow.png'), (81, 90))
win = pygame.display.set_mode( (600, 600) )
pygame.display.set_caption('First Game')
Lasers = [BLUE_LASER, GREEN_LASER, RED_LASER, YELLOW_LASER]
run = True
Laser = random.choice(Lasers)
while run:
# Laser = random.choice(Lasers)
pygame.time.delay(10)
win.fill((0, 0, 0))
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT] or keys[pygame.K_a]:
x_SHIP -= vel
if x_SHIP <= bound_LEFT:
x_SHIP = bound_LEFT
if keys[pygame.K_RIGHT] or keys[pygame.K_d]:
x_SHIP += vel
if x_SHIP >= bound_RIGHT:
x_SHIP = bound_RIGHT
if keys[pygame.K_SPACE]:
global laser_state
if laser_state == "ready":
x_LASER = x_SHIP
laser_state = "fire"
if y_LASER <= 0:
y_LASER = 500
laser_state = 'ready'
Laser = random.choice(Lasers)
if laser_state == 'fire':
win.blit(Laser, (x_LASER, y_LASER))
y_LASER -= LASER_CHANGE
win.blit(YELLOW_SPACE_SHIP, (x_SHIP,y_SHIP))
pygame.display.update()
pygame.quit()
【问题讨论】:
-
您在尝试实现连拍时究竟遇到了什么问题?
-
问题是当我按下空格键时会发出一束激光,而不是连续的激光流
-
您是否搜索过“pygame key 按住”或类似内容?我发现这两个问题的答案应该可以解决您的问题:question 1, question 2
-
我无法复制该问题。当我按住空格键时,一束激光飞到屏幕顶部,然后一个新的激光在飞船上启动,飞起来……这不是你想要的吗?
-
这不是我想要的,用这个代码激光会飞起来,直到激光击中顶部,我不能再发射一个激光。而我想发射一束激光
标签: python python-3.x pygame