[英]Continuous shooting in pygame
我正在尝试在 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()
为此,您需要跟踪多个激光位置。 它不会像您当前那样工作。 我创建了一个 class 来代表激光。 它保存激光的 xy 坐标和图像。 当空间被推动时,一个新的激光器 object 被创建并添加到列表中。 然后我们遍历列表并处理每个激光。 在激光到达屏幕顶部后,我们将其添加到一个单独的列表中,并使用它从原始列表中删除旧激光。 我还添加了一个计时器,用于延迟每次激光发射之间的时间。 如果您有任何问题,请告诉我。 使用对象在游戏编程中至关重要。
import pygame
import random
class projectile:
def __init__(self,x,y,image):
self.x = x
self.y = y
self.image = image
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)
laser_state
lasersBlast = []
lasersToRemove=[]
coolDown=0
coolDownTime=3
while run:
if coolDown>0:
coolDown-=1
lasersToRemove=[]
# 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]:
if coolDown<1:
coolDown = coolDownTime
tmpLaser = projectile(x_SHIP,500,random.choice(Lasers))
lasersBlast.append(tmpLaser)
# 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
for l in lasersBlast:
l.y-=LASER_CHANGE
win.blit(l.image, (l.x, l.y))
if l.y<0:
lasersToRemove.append(l)
for r in lasersToRemove:
lasersBlast.remove(r)
win.blit(YELLOW_SPACE_SHIP, (x_SHIP,y_SHIP))
pygame.display.update()
pygame.quit()
有用的网址:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.