Python 当我按下空格键并同时指向它时,如何让这艘宇宙飞船朝着鼠标光标移动

Python 当我按下空格键并同时指向它时,如何让这艘宇宙飞船朝着鼠标光标移动,python,python-3.x,pygame,pygame2,Python,Python 3.x,Pygame,Pygame2,我对PyGame2(实际上是一般的python)很陌生,我想为学校制作一个小游戏。我使用了中的代码,但当我按空格键时,无法使其移向光标。我不希望它在x/y轴上移动。。。 这是代码btw import sys, pygame, math from pygame.locals import * spaceship = ('spaceship.png') mouse_c = ('cursor.png') backg = ('background.jpg') lazer = pygame.mixer.S

我对PyGame2(实际上是一般的python)很陌生,我想为学校制作一个小游戏。我使用了中的代码,但当我按空格键时,无法使其移向光标。我不希望它在x/y轴上移动。。。 这是代码btw

import sys, pygame, math
from pygame.locals import *
spaceship = ('spaceship.png')
mouse_c = ('cursor.png')
backg = ('background.jpg')
lazer = pygame.mixer.Sound("pew.WAV")
pygame.init()

display_width = 1280
display_height = 720
screen = pygame.display.set_mode((display_width,display_height))
pygame.display.set_caption("Space Survival")

bk = pygame.image.load(backg).convert_alpha()
space_ship = pygame.image.load(spaceship).convert_alpha()
mousec = pygame.image.load(mouse_c).convert_alpha()
clock = pygame.time.Clock()
pygame.mouse.set_visible(False)
Ammo = 20
Fuel = 200

while True:
    for event in pygame.event.get():
    if event.type == QUIT:
        pygame.quit()
        sys.exit()
    elif event.type == MOUSEBUTTONDOWN and event.button == 1 and Ammo <= 20:
        print("Pew")
        pygame.mixer.Sound.play(lazer)
    elif event.type == MOUSEBUTTONDOWN and event.button == 3 and Fuel <= 200:
        print("Boost")

screen.blit(bk, (0, 0))
pos = pygame.mouse.get_pos()
angle = 270-math.atan2(pos[1]-(display_height/2),pos[0]-(display_width/2))*180/math.pi
rotimage = pygame.transform.rotate(space_ship,angle)
rect = rotimage.get_rect(center=((display_width/2),(display_height/2)))
screen.blit(rotimage,rect) #I need space_ship to rotate towards my cursor
screen.blit(mousec, (pos))
pygame.display.update()
clock.tick(60)   #FPS
导入系统、pygame、数学
从pygame.locals导入*
spaceship=('spaceship.png')
鼠标_c=('cursor.png')
backg=('background.jpg')
lazer=pygame.mixer.Sound(“pew.WAV”)
pygame.init()
显示宽度=1280
显示高度=720
screen=pygame.display.set_模式((显示宽度、显示高度))
pygame.display.set_标题(“太空生存”)
bk=pygame.image.load(backg.convert_alpha())
space\u ship=pygame.image.load(spaceship.convert\u alpha())
mousec=pygame.image.load(mouse_c.convert_alpha()
clock=pygame.time.clock()
pygame.mouse.set_可见(False)
弹药=20
燃料=200
尽管如此:
对于pygame.event.get()中的事件:
如果event.type==退出:
pygame.quit()
sys.exit()
elif event.type==MOUSEBUTTONDOWN和event.button==1,Ammo编写一个“跟踪目标:

def FollowMe(持久性有机污染物、FPO、步骤):
# [...]
我建议计算宇宙飞船和鼠标之间的距离以及单位方向向量,从(
fpos
)到(
pops
)。
可以通过计算.Pygame提供的来获得距离。可以通过将方向向量除以距离或通过规范化()方向向量来计算第个单位的方向向量:

target\u vector=pygame.math.Vector2(pops)
follower_vector=pygame.math.Vector2(fpos)
距离=跟随者向量。距离(目标向量)
方向向量=目标向量-跟随向量
如果距离>0:
方向\矢量/=距离
现在,您可以定义精确的
步距
,并沿精灵方向移动到跟随者:

如果距离>0:
新的跟随器向量=跟随器向量+方向向量*步距。
定义一个
步长
,并确保步长距离不大于步长:

step_distance=min(距离,步长)
最大步距为

max\u step=距离-最小距离
总而言之:

def FollowMe(持久性有机污染物、FPO、步骤):
target_vector=pygame.math.Vector2(pops)
follower_vector=pygame.math.Vector2(fpos)
new\u follower\u vector=pygame.math.Vector2(fpos)
距离=跟随者向量。距离(目标向量)
如果距离>0:
方向向量=(目标向量-跟随向量)/距离
步距=最小值(距离,步距)
新的跟随器向量=跟随器向量+方向向量*步距
返回(新的跟随者向量x,新的跟随者向量y)
另见

使用该功能沿鼠标和
pygame.key.get_pressed()的方向移动太空船
在按下空格键时移动飞船。返回包含每个键状态的列表。如果按住某个键,则该键的状态为
True
,否则为
False
。用于评估按钮的当前状态并获得连续移动:

ship\u pos=display\u width//2,display\u height//2
尽管如此:
# [...]
keys=pygame.key.get_pressed()
如果键[pygame.K_SPACE]:
ship_pos=FollowMe(pos,ship_pos,3)
角度=270数学atan2(位置[1]-装运位置[1],位置[0]-装运位置[0])*180/math.pi
rotimage=pygame.transform.rotate(空间、角度)
rect=rotimage.get_rect(中心=发货位置)
有关图像的旋转,请参见和

另请参见Pertivley和问题的答案


不使用任何外部资源(声音和图像)的最小示例:

导入系统、pygame、数学
从pygame.locals导入*
pygame.init()
def跟踪(pops、FPO、step):
target_vector=pygame.math.Vector2(pops)
follower_vector=pygame.math.Vector2(fpos)
new\u follower\u vector=pygame.math.Vector2(fpos)
距离=跟随者向量。距离(目标向量)
如果距离>0:
方向向量=(目标向量-跟随向量)/距离
步距=最小值(距离,步距)
新的跟随器向量=跟随器向量+方向向量*步距
返回(新的跟随者向量x,新的跟随者向量y)
显示宽度=1280
显示高度=720
screen=pygame.display.set_模式((显示宽度、显示高度))
pygame.display.set_标题(“太空生存”)
clock=pygame.time.clock()
bk=pygame.Surface(screen.get_size())
space\u ship=pygame.Surface((20,50),pygame.SRCALPHA)
空间填充((0,255,0))
mousec=pygame.Surface((20,20),pygame.SRCALPHA)
mousec.fill((255,0,0))
发货位置=显示宽度//2,显示高度//2
尽管如此:
时钟滴答(60)
对于pygame.event.get()中的事件:
如果event.type==退出:
pygame.quit()
pos=pygame.mouse.get_pos()
keys=pygame.key.get_pressed()
如果键[pygame.K_SPACE]:
ship_pos=FollowMe(pos,ship_pos,3)
角度=270数学atan2(位置[1]-装运位置[1],位置[0]-装运位置[0])*180/math.pi
rotimage=pygame.transform.rotate(空间、角度)
rect=rotimage.get_rect(中心=发货位置)
屏幕光点(bk,(0,0))
屏幕。blit(旋转图像,矩形)
屏幕blit(鼠标,位置)
pygame.display.update()

这是否回答了您的问题?这确实很有用,但我希望它在您按下{spacebar}时直接移动到鼠标光标处。如果你按下空格键,我想让它移动,那么我应该在这些部分中的哪一部分添加if语句?@Darkslayer3220更改问题的方式不好。无论如何,我已经更改了答案。对此表示抱歉。。我忘了我需要那个部分:/无论如何!完成了!完成了!谢谢你的帮助!@Darkslayer3220谢谢。不客气。