Python Pygame在鼠标位置绘制的圆圈存在位置不匹配和奇怪的显示故障

Python Pygame在鼠标位置绘制的圆圈存在位置不匹配和奇怪的显示故障,python,pygame,Python,Pygame,所以我一直在做一个类似ant模拟的项目,我遇到了这个问题,并在这里复制了它。本质上,我所做的是使用pygame.mouse.get_pos()在光标位置的每个曲面更新处绘制一个圆 但不知怎的,我得到了这样一个问题:当你把光标从窗口左上方移开时,圆圈的位置会随着时间的增长而远离光标。还有一个图形上的小故障,光标似乎带来了窗口本身的固定表面,其中包含圆后面对象的表面更新以及圆本身在其中移动。从下面的链接可以看到,它还会阻止该窗口后面对象的实际曲面 我在网上到处看看,到目前为止,我还没有接近解决这个

所以我一直在做一个类似ant模拟的项目,我遇到了这个问题,并在这里复制了它。本质上,我所做的是使用pygame.mouse.get_pos()在光标位置的每个曲面更新处绘制一个圆

但不知怎的,我得到了这样一个问题:当你把光标从窗口左上方移开时,圆圈的位置会随着时间的增长而远离光标。还有一个图形上的小故障,光标似乎带来了窗口本身的固定表面,其中包含圆后面对象的表面更新以及圆本身在其中移动。从下面的链接可以看到,它还会阻止该窗口后面对象的实际曲面

我在网上到处看看,到目前为止,我还没有接近解决这个问题。我不确定这是一个表面分层问题,是我的逻辑问题,还是pygame内部的小故障。在任何情况下,下面都是复制问题的代码

“”“

“”“

版本 *Python 3.9.1 *pygame 2.0.1

屏幕上画一个圆圈
。此函数不会生成类似圆形对象的对象。请参阅。
然而,
self.screen.blit(self.screen,self.circle)
并没有达到您期望的效果。它将整个屏幕复制到圆圈所在的位置

删除此说明:

类游标或圆(精灵):
# [...]
def blitme(自):
“”“表面更新。”“”
pygame.draw.circle(self.screen、self.color、self.center、self.radius)

#self.screen.blit(self.screen,self.circle)非常感谢!我现在意识到。。我想我会用其他的方法来做。再次感谢!
import sys
from random import randint, uniform

import pygame
from pygame.sprite import Sprite


class MainGame:
    """Main pygame class."""

    def __init__(self):
        """Initialize game assets."""
        pygame.init()
        self.resolution = (1280, 720)
        self.screen = pygame.display.set_mode(
            self.resolution
            )
        self.screen_rect = self.screen.get_rect()
        pygame.display.set_caption('Circle Test')

        # Insert game objects below this line.
        self.ccirc = CursorCircle(self)
        self.sample1 = pygame.sprite.Group()
        self.sample2 = pygame.sprite.Group()

        for _ in range(10):
            self.sample1.add(SampleObject(self))
            sample = SampleObject(self)
            sample.front = 0
            self.sample2.add(sample)

    def start(self):
        """Main game loop."""
        while True:
            self._keyboard_basic()
            # Insert object update below this line.
            self.ccirc.update()

            self._update_screen()


    def _update_screen(self):
        """Game screen update."""
        self.screen.fill((77, 77, 77))
        # Insert surface update below this line. ###
        for i in self.sample2:
            i.blitme()
        self.ccirc.blitme()
        for i in self.sample1:
            i.blitme()

        pygame.display.flip()

    def _keyboard_basic(self):
        """Response to keypress and mouse events"""
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                sys.exit()
            elif event.type == pygame.KEYDOWN:
                self._event_keydown(event)
            elif event.type == pygame.KEYUP:
                self._event_keyup(event)

    def _event_keydown(self, event):
        """Keydown events."""
        if event.key == pygame.K_UP:
            print('Pressed ↑')
        elif event.key == pygame.K_DOWN:
            print('Pressed ↓')
        elif event.key == pygame.K_LEFT:
            print('Pressed ←')
        elif event.key == pygame.K_RIGHT:
            print('Pressed →')
        elif event.key == pygame.K_q:
            sys.exit()

    def _event_keyup(self, event):
        """Keyup events."""
        pass


class SampleObject(Sprite):
    """Sample object on screen."""

    def __init__(self, main_game):
        """Initialize class assets."""
        super().__init__()
        self.screen = main_game.screen
        self.screen_rect = self.screen.get_rect()

        self.image = pygame.image.load('pointer.png')
        self.image = pygame.transform.rotate(self.image, randint(1, 360))
        self.image1 = pygame.image.load('pointer-.png')
        self.image1 = pygame.transform.rotate(self.image1, randint(1, 360))
        self.rect = self.image.get_rect()

        self.rect.centerx = randint(1, main_game.resolution[0])
        self.rect.centery = randint(1, main_game.resolution[1])

        self.front = 1

    def blitme(self):
        """Surface update."""
        if self.front:
            self.screen.blit(self.image, self.rect)
        else:
            self.screen.blit(self.image1, self.rect)


class CursorCircle(Sprite):
    """Circle that follows the cursor."""

    def __init__(self, main_game):
        """Initialize class assets."""
        super().__init__()
        self.screen = main_game.screen
        self.screen_rect = self.screen.get_rect()

        self.color = (0, 102, 204)
        # self.center = [self.screen_rect.centerx, self.screen_rect.centery]
        # self.center = [0,0]
        self.radius = 100

    def update(self):
        """Loop update."""
        self.center = pygame.mouse.get_pos()

    def blitme(self):
        """Surface update."""
        self.circle = pygame.draw.circle(self.screen, self.color, self.center, self.radius)
        self.screen.blit(self.screen, self.circle)


if __name__ == '__main__':
    game = MainGame()
    game.start()