Pygame - инопланетное вторжение - PullRequest
2 голосов
/ 21 июня 2020

Я играю в игру про вторжение пришельцев, и мои пули только появляются и исчезают. Я проверял свой код много раз и не знаю, почему он не перемещается вверх по экрану. может кто-нибудь помочь мне. Я не хочу пробовать другой метод, которому хочу научиться, увидев fl aws в моем коде, чтобы не повторять те же ошибки снова

import sys
import pygame

pygame.init()

# Setting up a window
screen = pygame.display.set_mode((1200, 800))
screen_rect = screen.get_rect()

# Caption
pygame.display.set_caption("space shooter".title())

# Setting up the icon
icon = pygame.image.load("undertake.png").convert_alpha()
pygame.display.set_icon(icon)

# Identifying a Background
bg = pygame.image.load("bg.png").convert_alpha()

# Adding the jet
jet = pygame.image.load("jet.png").convert_alpha()
jet_rect = jet.get_rect()
jet_rect.centerx = screen_rect.centerx
jet_rect.bottom = screen_rect.bottom


# Adding bullets to the left of the jet
bullet = pygame.image.load("pixel_laser_red.png").convert_alpha()
bullet_rect = bullet.get_rect()
bullet_state = "ready"


# Moving the jet
def move_jet(x):
   jet_rect.centerx += x


# Firing the bullet
def fire_bullet(x, y):
   bullet_state = "fire"
   screen.blit(bullet, (x, y))


# Adding Boundaries
def boundaries():
   if jet_rect.left >= 1200:
       jet_rect.right = 0
   elif jet_rect.right <= 0:
       jet_rect.left = 1200


# Game Loop
while True:
   screen.blit(bg, (0, 0))
   screen.blit(jet, jet_rect)

   # EVENTS
   for event in pygame.event.get():
       # Quitting
       if event.type == pygame.QUIT:
           sys.exit()


       # KeyStrokes
   pressed = pygame.key.get_pressed()
   jet_xincrement = 0
   if pressed[pygame.K_RIGHT]:
       jet_xincrement += 3
   if pressed[pygame.K_LEFT]:
       jet_xincrement -= 3


   if pressed[pygame.K_SPACE]:
           bullet_x = jet_rect.centerx
           bullet_y = jet_rect.top
           fire_bullet(bullet_x - 28, bullet_y + 7)

   if bullet_state == "fire" :
       bullet_y -= 10

   boundaries()
   move_jet(jet_xincrement)

   pygame.display.flip()

1 Ответ

1 голос
/ 21 июня 2020

На самом деле пуля просто рисуется при нажатии пробел . Вы должны рисовать пулю непрерывно в каждом кадре.

Функция fire_bullet просто устанавливает состояние и положение маркера. Переменные находятся в глобальном пространстве имен. Следовательно, вы должны использовать оператор global , чтобы установить их:

bullet_state = "ready"
bullet_x = 0
bullet_y = 0

# Firing the bullet
def fire_bullet(x, y):
    global bullet_state, bullet_x, bullet_y
    bullet_state = "fire"
    bullet_x = x
    bullet_y = y

Когда нажата пробел , то вызывается fire_bullet. Аргументы - текущее положение струи. Когда bullet_state равно "fire", то пуля должна быть нарисована в основном приложении l oop:

while True:
   # [...]


   if pressed[pygame.K_SPACE]:
        fire_bullet(jet_rect.centerx - 28, jet_rect.top + 7)

   if bullet_state == "fire":
       bullet_y -= 10
       screen.blit(bullet, (bullet_x, bullet_y))

   # [...]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...