Pygame制作一个物体追逐光标

时间:2014-10-30 22:17:07

标签: python pygame

过去几个小时一直在这里,尝试制作一个图像追逐光标的小程序。到目前为止,我已设法使图像直接位于光标顶部并沿着该方向跟随它。然而,我需要的是图像实际上“追逐”光标,所以它需要最初远离它然后在它之后运行,直到它在鼠标顶部。

基本上碰到一堵墙出了什么问题以及需要解决的问题,这就是我到目前为止所得到的:

from __future__ import division
import pygame
import sys
import math
from pygame.locals import *


class Cat(object):
    def __init__(self):
        self.image = pygame.image.load('ball.png')
        self.x = 1
        self.y = 1

    def draw(self, surface):
        mosx = 0
        mosy = 0
        x,y = pygame.mouse.get_pos()
        mosx = (x - self.x)
        mosy = (y - self.y)
        self.x = 0.9*self.x + mosx
        self.y = 0.9*self.y + mosy
        surface.blit(self.image, (self.x, self.y))
        pygame.display.update()


pygame.init()
screen = pygame.display.set_mode((800,600))
cat = Cat()
Clock = pygame.time.Clock()

running = True
while running:
    screen.fill((255,255,255))
    cat.draw(screen)

    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()

    pygame.display.update()
    Clock.tick(40)

可能不是最好的编码形式,现在只用了5个多小时就弄乱了。任何帮助深表感谢!谢谢:))

1 个答案:

答案 0 :(得分:1)

假设您希望猫以固定速度移动,例如每个刻度X个像素,则需要向鼠标光标选择一个新的X像素位置。 (如果你反而希望猫移动越慢,你就会在当前位置和鼠标光标之间选择一个位置。如果你希望它移动得越快,它就越近,你需要分而不是乘法。依此类推。但我们首先要坚持使用简单的。)

现在,如何将X像素移向鼠标光标?通常的描述方法是:在从当前位置到光标的方向上找到单位向量,然后将其乘以X,这将为您提供添加的步骤。你可以把它减少到比平方根更好的东西:

# Vector from me to cursor
dx = cursor_x - me_x
dy = cursor_y - me_y

# Unit vector in the same direction
distance = math.sqrt(dx*dx + dy*dy)
dx /= distance
dy /= distance

# speed-pixel vector in the same direction
dx *= speed
dy *= speed

# And now we move:
me_x += dx
me_y += dy

请注意,me_xme_y将是浮点数,而不是整数。这是好事;当你每步向东北移动2个像素时,北边是1.414像素,东边是1.414像素。如果你将每一步向下舍入到1个像素,那么当对角线移动时最终会比垂直移动时慢41%,这看起来很傻。