鼠标线性运动图像

时间:2019-03-03 15:08:22

标签: python python-3.x pygame transform

我有两点-开始和目的地。 (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))

创建如下:

Preview

请帮助我! 如何创建匀速运动!

1 个答案:

答案 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)

最后,可以设置属性XY,项目符号可以是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)))