Этот вопрос включает в себя реализацию способности стрелять пули, когда нажата космическая планка, сохраняя при этом символ игрока на экране. [
у кода Asker изначально была проблема, когда персонаж игрока исчез при съемке. Это связано с тем, что движение стрельбы и игрока были разделены на разные петли. Чтобы решить эту проблему, нам нужно объединить их в единый основной цикл, где оба поведения обновляются одновременно.
Другая проблема была неспособностью сломать цикл съемки, когда пуля достигла вершины экрана. Оригинальный код использовал цикл «Время», которая продолжалась бесконечно. Чтобы исправить это, нам нужно использовать цикл Whink с условием, которое проверяет, достигла ли пуля. &&&]
импорт pygame, os # Настройка Cowerplate опущена для краткости Игрок класса: def __init __ (self, x, y, height, width): ... def Draw (Self): ... def move_left (self): ... def move_right (self): ... классная пуля: def __init __ (self, x, y): ... def Update (Self): ... def Draw (Self): ... # Списки пуль пуль = [] # Инициализировать игрока P = игрок (600, 500, 50, 30) # Основной игров run = true во время пробега: clock.tick (100) # Обрабатывать события для события в pygame.event.get (): if event.type == pygame.quit: run = false if event.type == pygame.keydown: if event.key == pygame.k_space: Bullets.append (Bullet (P.X P.Width // 2, P.Y)) # Обновить объекты keys = pygame.key.get_pressed () Если ключи [pygame.k_left]: p.move_left () Если ключи [pygame.k_right]: p.move_right () Для B в пулях: B.Update () # Обновите положение и удалите пулю, если она выходит за рамки экрана Если B.y & lt; 0: пули. РЕМОВА (б) # Обновить кадр D.Fill ((98, 98, 98)) Для B в пулях: B.Draw () p.draw () win.update ()
import pygame, os
# Boilerplate setup omitted for brevity
class Player:
def __init__(self, x, y, height, width):
...
def draw(self):
...
def move_left(self):
...
def move_right(self):
...
class Bullet:
def __init__(self, x, y):
...
def update(self):
...
def draw(self):
...
# Lists of bullets
bullets = []
# Initialize player
p = Player(600, 500, 50, 30)
# Main game loop
run = True
while run:
clock.tick(100)
# Handle events
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_SPACE:
bullets.append(Bullet(p.x p.width//2, p.y))
# Update objects
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
p.move_left()
if keys[pygame.K_RIGHT]:
p.move_right()
for b in bullets:
b.update()
# Update position and remove bullet if it goes off-screen
if b.y < 0:
bullets.remove(b)
# Update frame
d.fill((98, 98, 98))
for b in bullets:
b.draw()
p.draw()
win.update()
] Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3