我有两点-开始和目的地。 (X,Y)我必须创建一个项目符号。我创建了一个简单的代码:
def Entities():
##BULLETS
#bullets array
for x in gd.bulletList:
dist = gd.Dist(
gd.bulletList[x].X,
gd.bulletList[x].Y,
gd.bulletList[x].MX,
gd.bulletList[x].MY)
## MX - DestX, MY - DestY, X и Y. Speed - speed.
if (gd.bulletList[x].X < gd.bulletList[x].MX):
gd.bulletList[x].X = gd.bulletList[x].speed
if (gd.bulletList[x].X > gd.bulletList[x].MX):
gd.bulletList[x].X -= gd.bulletList[x].speed
if (gd.bulletList[x].Y < gd.bulletList[x].MY):
gd.bulletList[x].Y += gd.bulletList[x].speed
if (gd.bulletList[x].Y > gd.bulletList[x].MY):
gd.bulletList[x].Y -= gd.bulletList[x].speed
win.blit(spd.sprites['bullet'], (gd.bulletList[x].X, gd.bulletList[x].Y))
创建如下:
请帮助我! 如何创建匀速运动!
答案 0 :(得分:1)
使用pygame.math.Vector2
,计算从子弹位置到目标的矢量:
tragetPos = pygame.math.Vector2(bullet.MX, bullet.MY)
bulletPos = pygame.math.Vector2(bullet.X, bullet.Y)
bulletDir = tragetPos - bulletPos
计算向量的长度(pygame.math.length()
)。长度是从子弹到目标的当前距离:
distance = bulletDir.length()
归一化方向矢量(pygame.math.normalize()
)。这意味着向量变成长度为1的Unit vector:
bulletDir = bulletDir.normalize()
子弹必须沿着目标的方向移动,以最小的速度(bullet.speed
)和到目标的距离(子弹不应超出目标)。计算子弹的新位置:
bulletPos = bulletPos + bulletDir * min(distance, speed)
最后,可以设置属性X
和Y
,项目符号可以是blit
。该函数可能如下所示:
def Entities():
for bullet in gd.bulletList:
tragetPos = pygame.math.Vector2(bullet.MX, bullet.MY)
bulletPos = pygame.math.Vector2(bullet.X, bullet.Y)
bulletDir = tragetPos - bulletPos
distance = bulletDir.length()
if distance > 0:
bulletDir = bulletDir.normalize()
bulletPos = bulletPos + bulletDir * min(distance, speed)
bullet.X, bullet.Y = bulletPos
win.blit(spd.sprites['bullet'], (int(bullet.X), int(bullet.Y)))