在我用 pygame 制作的小游戏中,我的光标周围总是有一个方框,其中所有颜色都是相反的(例如,如果我将光标放在黑色和红色背景上,光标周围的方 block 将是白色和青色)。这最初不是问题,因为最初的几个项目只需要键盘输入,但现在我想制作一个你必须点击很多的游戏,所以它看起来非常难看。如何删除此框?我正在使用 macOS High Sierra、python3 和 pygame 1.9.3。
最佳答案
我把它作为一个答案,因为评论太多了。另外,我没有 Mac,所以这个答案是假设的。
查看 github issue @Keno 发表:
黑色背景上有一个白色光标(黑色填充轮廓)的图像。
在我看来,随着最新的操作系统升级,MacOS 不再能够与 PyGame 使用的任何鼠标光标图像功能一起正常工作。显然光标外的像素应该是透明的。
轶事证据(即:谷歌搜索)表明其他软件在 macOS High Sierra 上也存在光标问题。
也许可以解决这个问题。
如果 PyGame 应用程序不使用鼠标,隐藏光标可能会很有用。
pygame.mouse.set_visible() # Perhaps this just gives a black-box though
但是,如果 PyGame 通过设置完全透明的光标来“隐藏”鼠标,结果可能仍然是一个完全黑色的方 block 。所以鼠标可以移到窗口外(或至少移到右下角):
w, h = pygame.display.get_surface().get_size() # get window size
pygame.mouse.set_pos( [w, h] ) # move cursor outside window
我对这个问题有点不知所措,最后写了一堆测试用例。
import sys
import time
import pygame
from pygame.locals import *
WHITE = 255,255,255
BLUE = 0,0,60
WINDOW_WIDTH=600
WINDOW_HEIGHT=500
pygame.init()
screen = pygame.display.set_mode((WINDOW_WIDTH, WINDOW_HEIGHT))
pygame.font.init()
clock = pygame.time.Clock()
text_font = pygame.font.Font(None,60)
STARTUP_MS = int(time.time() * 1000.0) # Epoch time programme started
MANUAL_CURSOR = pygame.image.load('finger_cursor_16.png').convert_alpha()
cursor_test = 0
time_last_test = 0
while (True):
NOW_MS = int(time.time() * 1000.0) - STARTUP_MS # current time in milliseconds-since-start
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
# Try different cursor styles
if ( cursor_test == 4 ):
text_image = text_font.render( 'Off-Screen-Cursor', True, WHITE )
pygame.mouse.set_pos( [ WINDOW_WIDTH, WINDOW_HEIGHT ])
pygame.mouse.set_visible(True)
elif ( cursor_test == 3 ):
text_image = text_font.render( 'Manual-Cursor', True, WHITE )
pygame.mouse.set_visible(False)
# cursor drawn as part of the screen, see below
elif ( cursor_test == 2 ):
text_image = text_font.render( 'Transparent-Cursor', True, WHITE )
pygame.mouse.set_cursor((8,8),(0,0),(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0))
pygame.mouse.set_visible(True)
elif ( cursor_test == 1 ):
text_image = text_font.render( 'Hidden-Cursor', True, WHITE )
pygame.mouse.set_visible(False)
elif ( cursor_test == 0 ):
text_image = text_font.render( 'Default-Arrow-Cursor', True, WHITE )
pygame.mouse.set_visible(True)
pygame.mouse.set_cursor(*pygame.cursors.arrow)
# test for 3-seconds each
if ( NOW_MS - time_last_test > 3000 ):
pygame.mouse.set_pos( [ WINDOW_WIDTH//2, WINDOW_HEIGHT//2 ])
time_last_test = NOW_MS
cursor_test += 1
if ( cursor_test > 4 ):
cursor_test = 0
# Paint the screen
screen.fill(BLUE)
# Write the mode
screen.blit(text_image, ( 0, 0 ))
# if we're in manual-cursor mode, paint a cursor too
if (cursor_test == 3):
screen.blit( MANUAL_CURSOR, ( pygame.mouse.get_pos() ) )
pygame.display.update()
clock.tick_busy_loop(60)
编辑:我忘记上传 finger_cursor_16.png
图片:
关于python - 光标周围的框pygame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49842142/