python - 当我在pygame中不按住空格键时,如何制作连续移动的子弹?
问题描述
import pygame
# initialize the pygame
pygame.init()
# create the screen
screen = pygame.display.set_mode((800, 600))
# Title and icon
pygame.display.set_caption("Space Invaders")
icon = pygame.image.load('Invader2.xcf')
pygame.display.set_icon(icon)
# Player
playerImg = pygame.image.load('Player.xcf')
player_big = pygame.transform.scale(playerImg, (48, 48))
playerX = 370
playerY = 480
vel = 0.15
# Player Bullets
playerBulletImg = pygame.image.load('Player_bullet.xcf')
playerBulletX = playerX + 16
playerBulletY = playerY + 10
bulletVel = 0.3
def player(x, y):
screen.blit(player_big, (playerX, playerY))
def bullet(x, y):
screen.blit(playerBulletImg, (playerBulletX, playerBulletY))
# Game Loop
running = True
while running:
# RGB
screen.fill((18.8, 83.5, 78.4))
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT] and playerX > 0:
playerX -= vel
playerBulletX -= vel
if keys[pygame.K_RIGHT] and playerX < 800 - 48:
playerX += vel
playerBulletX += vel
if keys[pygame.K_SPACE]:
playerBulletY -= 0.5
if playerBulletY == 0:
playerBulletY = 480
bullet(playerBulletX, playerBulletY)
player(playerX, playerY)
pygame.display.update()
你好!我是一个刚开始使用 Pygame 的初学者。我正在制作 Space Invaders / Galaga 类型的游戏。当我按下空格键时,子弹会沿着 y 轴上升,但只有当我按住它时。我希望子弹继续向上移动屏幕,即使我没有按住空格键。此外,另一个问题是,当子弹在空中时,它仍然遵循玩家的 x 值。因此,当子弹射出时,它会根据玩家所在的位置四处移动。
解决方案
你应该将你的游戏作为一个类运行它更容易用你可以改变你的 b.move 到其他地方的类来编写 pygame
import pygame
# initialize the pygame
pygame.init()
# create the screen
screen = pygame.display.set_mode((800, 600))
# Title and icon
pygame.display.set_caption("Space Invaders")
icon = pygame.image.load('Invader2.xcf')
pygame.display.set_icon(icon)
# Player
class Player:
def __init__(self):
self.Img = pygame.image.load('Player.xcf')
self.big = pygame.transform.scale(playerImg, (48, 48))
self.x = 370
self.y = 480
self.vel = 0.15
def draw(self,screen):
screen.blit(self.big, (self.x, self.y))
class Bullet:
def __init__(self):
self.Img = pygame.image.load('Player_bullet.xcf')
self.x = playerX + 16
self.y = playerY + 10
self.vel = 0.3
def draw(screen):
screen.blit(self.Img, (self.y, self.y))
def move():
self.y -= self.vel
def draw(p,b):
p.draw()
for i in b:
i.draw()
# Game Loop
def main():
running = True
p = Player()
b = []
while running:
screen.fill((18.8, 83.5, 78.4))
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT] and p.x > 0:
p.x -= p.vel
if keys[pygame.K_RIGHT] and p.x < 800 - 48:
p.x += p.vel
if keys[pygame.K_SPACE]:
b.append(Bullet())
draw(p,b)
for bullet in b:
bullet.move()
pygame.display.update()
推荐阅读
- mysql - mariaDB 问题。尝试使用具有多项选择输入的约束创建表
- linux - youtube-dl 仅更改转换后的视频的输出路径(--recode-video)?
- java - 为什么我的 java 代码输出错误的数字?
- powershell - 如何最大化已在 Window 中最小化的应用程序?
- python - 如何仅读取特定键值并从 python 中的多个字典执行操作?
- excel - 如何更改列表框高度属性?
- javascript - 加载自定义模型并将字段添加到销售点中的 pos.order.line - Odoo 12
- python - Python函数回调和if问题
- python - 建立一个类:building_dict() 接受 1 个位置参数,但给出了 2 个
- azure - Azure 服务总线零星 MessageLockLostException