Python Pygame在鼠标位置绘制的圆圈存在位置不匹配和奇怪的显示故障
所以我一直在做一个类似ant模拟的项目,我遇到了这个问题,并在这里复制了它。本质上,我所做的是使用pygame.mouse.get_pos()在光标位置的每个曲面更新处绘制一个圆 但不知怎的,我得到了这样一个问题:当你把光标从窗口左上方移开时,圆圈的位置会随着时间的增长而远离光标。还有一个图形上的小故障,光标似乎带来了窗口本身的固定表面,其中包含圆后面对象的表面更新以及圆本身在其中移动。从下面的链接可以看到,它还会阻止该窗口后面对象的实际曲面 我在网上到处看看,到目前为止,我还没有接近解决这个问题。我不确定这是一个表面分层问题,是我的逻辑问题,还是pygame内部的小故障。在任何情况下,下面都是复制问题的代码 “”“ “”“ 版本 *Python 3.9.1 *pygame 2.0.1在Python Pygame在鼠标位置绘制的圆圈存在位置不匹配和奇怪的显示故障,python,pygame,Python,Pygame,所以我一直在做一个类似ant模拟的项目,我遇到了这个问题,并在这里复制了它。本质上,我所做的是使用pygame.mouse.get_pos()在光标位置的每个曲面更新处绘制一个圆 但不知怎的,我得到了这样一个问题:当你把光标从窗口左上方移开时,圆圈的位置会随着时间的增长而远离光标。还有一个图形上的小故障,光标似乎带来了窗口本身的固定表面,其中包含圆后面对象的表面更新以及圆本身在其中移动。从下面的链接可以看到,它还会阻止该窗口后面对象的实际曲面 我在网上到处看看,到目前为止,我还没有接近解决这个
屏幕上画一个圆圈
。此函数不会生成类似圆形对象的对象。请参阅。然而,
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()