Как сделать всенаправленные пули в Pygame Zero

#python #pgzero

Вопрос:

Я решил, что собираюсь сделать шутер с видом сверху, но я не могу понять, как выполнять всенаправленную съемку. Каждый веб-сайт и видео основаны на pygame, а не на нуле, и пока это мой код:

 #Imports
import pgzrun
import random

#Pygame Zero window size
WIDTH = 400
HEIGHT = 400

#Actors
floor = Actor("floor")
sadboy = Actor("sadboy")

#Variables
sadboy.x = WIDTH//2
sadboy.y = HEIGHT//2

#Lists
sadtears = []
        
def update():
    #Movement
    if keyboard.a:
        sadboy.x -= 2
    if keyboard.d:
        sadboy.x  = 2
    if keyboard.w:
        sadboy.y -= 2
    if keyboard.s:
        sadboy.y  = 2
            
#Drawing floor and character
def draw():
    screen.clear()
    screen.blit("floor", (0, 0))
    sadboy.draw()
    for sadtear in sadtears:
        sadtear.draw()
  
def on_key_down(key):
    if key == keys.UP:
        sadtears.append(Actor('sadtear'))
        sadtears[-1].x = sadboy.x
        sadtears[-1].y = sadboy.y
        sadtear.y -= 5
    if key == keys.DOWN:
        sadtears.append(Actor('sadtear'))
        sadtears[-1].x = sadboy.x
        sadtears[-1].y = sadboy.y
        sadtear.y  = 5
    if key == keys.LEFT:
        sadtears.append(Actor('sadtear'))
        sadtears[-1].x = sadboy.x
        sadtears[-1].y = sadboy.y
        sadtear.x -= 5
    if key == keys.RIGHT:
        sadtears.append(Actor('sadtear'))
        sadtears[-1].x = sadboy.x
        sadtears[-1].y = sadboy.y
        sadtear.x  = 5
        
pgzrun.go()
 

Если кто-нибудь может мне помочь, пожалуйста, сделайте это, потому что я уже некоторое время борюсь с этим. Большое спасибо!

Комментарии:

1. Я не знаю, что это значит omni directional shooting . Если вы хотите двигаться в каком-то направлении, то вам нужно angle , а затем вы можете рассчитать dx = speed * sin(angle) dy = speed * cos(angle) (или, может быть, сначала должно быть cos() и второе sin() ). И PyGame должна pygame.math сделать это проще. И pgzero также должен иметь его.

2. и если вы двигаетесь только left, right, up, down тогда , вы можете уменьшить его до значений dx = -speed, dy = 0 для left , dx = 0, dy = -speed для up и т. Д. И вы должны использовать их update для изменения x, y

Ответ №1:

Я не знаю , понимаю ли я вас, и я не могу проверить, работает ли это, но я бы поставил speed_x speed_y на каждую пулю

 def on_key_down(key):
    if key == keys.UP:
        bullet = Actor('sadtear')
        bullet.x = sadboy.x
        bullet.y = sadboy.y
        bullet.speed_x = 0
        bullet.speed_y = -5
        sadtears.append(bullet)
 

(для других направлений требуются другие значения speed_x , speed_y )

и я бы использовал его, update() чтобы переместить его

 def update():
       
    for bullet in sadtears:
        bullet.x  = bullet.speed_x
        bullet.y  = bullet.speed_y