使用Python的布尔&运算符检查pygame表面中的标志不会返回预期的标志

问题描述 投票:0回答:1

在 pygame 中编写游戏时,我尝试使用 XOR (^) 二元运算符来“切换”我传递给函数的任何标志。然而,我不断遇到溢出错误(和

Warning: re-creating window in toggle_fullscreen action()
错误)。 为了调试这个,我尝试使用 & 运算符来检查是否正确检测到标志并将其与 pygame 提供的常量值进行比较。

print(pygame.display.get_surface().get_flags() & exampleflag, exampleflag)

虽然这在检查 pygame.NOFRAME 时有效(当不处于无边界模式时,结果是

0 32
;当处于无边界模式时,结果是
32 32

但是,当尝试检查在我的游戏中始终启用的
pygame.SCALED
时,它总是会输出
0 512
,即使
pygame.SCALED
存在并且我期待
512 512

另外,在检查
pygame.FULLSCREEN
时(我使用
pygame.display.toggle_fullscreen()
切换它,如果这有任何帮助的话),结果是
0 -2147483648
(因为窗口不是全屏,所以期待
0 0
),这显然是不正确的,可能是为什么我收到溢出错误。

我真的不明白 pygame 标志是如何工作的,超出了基本二元运算符的作用,因为它没有很好的记录(事实上,你可以使用 & 本身检查标志,这是我在另一个问题上发现的堆栈溢出)。有人可以解释为什么会发生这种情况吗?

python pygame binary-operators
1个回答
0
投票

pygame 表面标志与您传递给

pygame.display.set_mode
的标志完全不同。
SCALED
FULLSCREEN
NOFRAME
set_mode
标志。您无法使用
Surface.get_flags()
来测试它们。

这些是表面标志,如Surface.get_flags下的

记录

SWSURFACE      0x00000000    # Surface is in system memory
HWSURFACE      0x00000001    # (obsolete in pygame 2) Surface is in video memory
ASYNCBLIT      0x00000004    # (obsolete in pygame 2) Use asynchronous blits if possible
HWACCEL        0x00000100    # Blit uses hardware acceleration
SRCCOLORKEY    0x00001000    # Blit uses a source color key
RLEACCELOK     0x00002000    # Private flag
RLEACCEL       0x00004000    # Surface is RLE encoded
SRCALPHA       0x00010000    # Blit uses source alpha blending
PREALLOC       0x01000000    # Surface uses preallocated memory
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.