1 import pygame 2 from pygame.locals import * 3 from pygame.math import * 4 import sys 5 6 pygame.init() 7 size = width, height = 1600, 900 8 screen = pygame.display.set_mode(size) 9 color = (0, 0, 0) # 设置颜色 10 ball = pygame.image.load(\'dabai_new.gif\') 11 ballrect = ball.get_rect() 12 sp = Vector2(0,0) #设置初始位置 13 speed = 3.0 14 clock = pygame.time.Clock() 15 mouse_xy = (0,0) 16 while True: 17 clock_time = clock.tick_busy_loop(60) 18 for event in pygame.event.get(): 19 if event.type == pygame.QUIT: 20 sys.exit() 21 elif event.type == pygame.MOUSEBUTTONDOWN: 22 mouse_xy = Vector2(event.pos)#获取鼠标的向量 23 dis = mouse_xy - sp 24 dis_lenth = dis.length()#计算物体到鼠标点击处的距离 25 if dis_lenth < speed: #做一个判断,如果距离小于速度,则不需要移动 26 mouse_xy = sp 27 elif dis_lenth != 0: # 28 dis.normalize_ip() #坐标归一化非常重要 29 dis = dis*speed #计算每一帧移动的坐标数 30 sp += dis #叠加每次移动的坐标 31 32 screen.fill(color) 33 screen.blit(ball, sp) 34 pygame.display.flip()
这个方案中最重要的就是坐标归一化,归一化之后长度永远为一,实际移动的坐标数就是帧数乘以速度的值
我把pygame.Vertor2中坐标归一化使用的公式列出来: