There are 2 issues.
(有2个问题。)
The current position of the bullets is multiplied by its the normalized direction vector. (子弹的当前位置乘以其归一化方向矢量。)
That doesn't make sense: (那没有道理:)
for bullet in list_of_bullets: bullet[0] = bullet[0] * bullet[2][0] bullet[1] = bullet[1] * bullet[2][1]
Add the direction vector to the position of the bullet:
(将方向向量添加到项目符号的位置:)
for bullet in list_of_bullets:
bullet[0] += bullet[2][0]
bullet[1] += bullet[2][1]
If you want to increase the speed of the bullets, then you've to scale the vector by a speed
.
(如果要提高子弹的速度,则必须按speed
缩放矢量。)
eg: (例如:)
def spawn_bullet(x,y):
global list_of_bullets
initial_x = x
initial_y = y
mouse_x, mouse_y = pygame.mouse.get_pos()
vector_x, vector_y = mouse_x - x, mouse_y - y
distance = math.sqrt(vector_x ** 2 + vector_y **2)
speed = 5
move_vec = (speed*vector_x/distance, speed*vector_y/distance)
list_of_bullets.append([initial_x, initial_y, move_vec])
the 2nd issue is, that the display is cleared, after the bullets are draw, so you'll never "see2 the bullets.
(第二个问题是,在抽出子弹后清除了显示内容,因此您将永远不会“看到”子弹。)
Draw the bullets in update_game
after the display is cleared:
(清除显示后,在update_game
绘制项目符号:)
def update_game(x,y,width,height,char):
win.fill((0,0,0))
for bullet in list_of_bullets:
pygame.draw.rect(win,(0,0,255),(int(bullet[0]),int(bullet[1]),20,20))
point_to_mouse(x,y,char)
pygame.display.update()
(Delete the drawing for the main application loop)
((删除主应用程序循环的图形))