Pygame: изображение, преследующее курсор мыши с определенной длины - PullRequest
2 голосов
/ 14 марта 2019

Первоначально изображение начинает двигаться в направлении (0,0).В течение каждого кадра объект просматривает текущее местоположение курсора, используя pygame.mouse.get_pos(), и обновляет его направление на direction = .9*direction + v, где v - это вектор длины 10, который указывает от центра вашего изображения на положение мыши.

вот что у меня есть:

    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)

Проблема в том, что когда я запускаю код, изображение перемещается курсором мыши, а не идет за ним.Как я могу улучшить это?

1 Ответ

0 голосов
/ 14 марта 2019

Если вы хотите, чтобы изображение слегка перемещалось в направлении мыши, то вам нужно добавить вектор к текущей позиции изображения, которая указывает в направлении мыши.Длина должна быть меньше, чем расстояние до мыши:

dx, dy = (x - self.x), (y - self.y)
self.x, self.y = self.x + dx * 0.1, self.y + dy * 0.1 

, поэтому шарик делает маленький шаг к мышке в каждом кадре.

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

    def draw(self, surface):
        mosx = 0
        mosy = 0
        x,y = pygame.mouse.get_pos()
        dx, dy = (x - self.x), (y - self.y)
        self.x, self.y = self.x + dx * self.t, self.y + dy * self.t
        w, h = self.image.get_size()
        surface.blit(self.image, (self.x - w/2, self.y - h/2))
        pygame.display.update()
...