python - 光标周围的框pygame

标签 python pygame

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

最佳答案

我把它作为一个答案,因为评论太多了。另外,我没有 Mac,所以这个答案是假设的。

查看 github issue @Keno 发表:
bad cursor

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

在我看来,随着最新的操作系统升级,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 图片:

finger_cursor_16.png

关于python - 光标周围的框pygame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49842142/

相关文章:

python - 使用 plotly 在条形图上传播值

python - 创建一个 bool 数组,将 numpy 元素与 None 进行比较

Python + Pygame; screen.fill() 崩溃窗口

python - 如何在 Pygame 中设置延迟/冷却时间?

python - PIL 和 pygame.image

python - Unicode解码错误: 'utf-8' codec can't decode byte 0xe3 in position 1: invalid continuation byte

Python 插入变量输出

python - Canon SDK bulb_mode 命令抛出错误 44313 (0xAD19)

python - Pygame Python 窗口停止响应

python - Pygame 文本变量不显示类型错误 : text must be a unicode or bytes