微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

让移动更真实

如何解决让移动更真实

我编写此代码是为了让一个圆圈跟随我的鼠标,但运动真的很机械,并没有提供我想要的 360 度运动。

代码如下:

mx,my = pygame.mouse.get_pos()

for event in pygame.event.get():
    if event.type == pygame.QUIT:
        Running = False

mpos = (mx,my)
X = (playerX)
Y = (playerY)


if mpos[1] >= Y: 
    playerY += vel


if mpos[1] <= Y:
    playerY -= vel

    
if mpos[0] <= X:
    playerX -= vel

if mpos[0] >= X:
    playerX += vel

解决方法

您需要计算方向 vector,对其进行标准化并将其乘以所需的速度,然后将其应用于圆圈位置。

最简单的方法是使用 pygame 的内置 Vector2 类:

import pygame

def main():
    pygame.init()
    screen = pygame.display.set_mode((600,600))
    pos = pygame.Vector2()
    clock = pygame.time.Clock()
    speed = 10
    while True:
        
        for e in pygame.event.get():
            if e.type == pygame.QUIT:
                return 
                
        movement = pygame.mouse.get_pos() - pos 
        if movement.length() > 6: # some margin so we don't flicker between two coordinates
            if movement.length() > 0: # when we move,we want to move at a constant speed
                movement.normalize_ip()
            pos += movement * speed # change the position
    
        screen.fill((20,20,20))
        pygame.draw.circle(screen,'dodgerblue',pos,30)
        pygame.display.flip()
        clock.tick(30)
        
main()

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。