光标pygame周围的框

Jon*_*aar 6 python pygame

在我在pygame中制作的小游戏中,我的光标周围总是有一个方框,其中所有颜色都是相反的(例如,如果我将光标放在黑色和红色背景上,光标周围的方形将为白色和青色).这最初不是问题,因为前几个项目只需要键盘输入,但现在我想制作一个你必须点击很多的游戏,所以它看起来很难看.如何删除此框?我正在使用macOS High Sierra,python3和pygame 1.9.3.

Kin*_*ley 4

我将其作为答案,因为对于评论来说太多了。另外,我没有 Mac,所以这个答案是假设。

查看@Keno 发布的github 问题
光标坏了

黑色背景上有一个白色光标的图像(黑色填充轮廓)。

在我看来,随着最新的操作系统升级,MacOS 不再与 PyGame 使用的任何鼠标光标图像功能正常工作。显然光标之外的像素应该是透明的。

轶事证据(即:谷歌搜索)表明其他软件在 macOS High Sierra 上也存在光标问题。

也许可以解决这个问题。

如果 PyGame 应用程序不使用鼠标,则隐藏光标可能会很有用。

 pygame.mouse.set_visible()  # Perhaps this just gives a black-box though
Run Code Online (Sandbox Code Playgroud)

然而,如果 PyGame 通过设置完全透明的光标来“隐藏”鼠标,结果可能仍然是一个全黑的方块。因此鼠标可以移到窗口之外(或至少移到右下角):

w, h = pygame.display.get_surface().get_size() # get window size
pygame.mouse.set_pos( [w, h] )  # move cursor outside window
Run Code Online (Sandbox Code Playgroud)

我对这个问题有点得意忘形,最后写了一堆测试用例。

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)
Run Code Online (Sandbox Code Playgroud)

编辑:我忘记上传图片finger_cursor_16.png

Finger_cursor_16.png