我正在用python和pygame
制作一个游戏。几天前我遇到了一个问题,我需要给我的游戏一个调整大小和保持纵横比的功能。此外,屏幕上的所有内容都按比例调整大小。幸运的是,我得到了一个快速的解决方案来创建两个不同的pygame曲面。一个是用户可见的屏幕,另一个是管理闪电传输功能。事实上,假屏幕的所有内容都被闪电式传输,然后它本身就被使用闪电式传输到主屏幕上
main_screen.blit((pygame.transform.scale(fake_screen, main_screen.get_rect().size), [0, 0]).
主要问题是,现在由于MOUSEBUTTONDOWN
事件是在主屏幕上触发的,而不是在假屏幕上,但是点击是根据假屏幕处理的。这意味着,当我在调整大小后点击按钮时,按钮看起来是它们的,但实际上是在假屏幕上的相应位置。这使得所有按钮在VIDEORESIZE
事件之后失去其功能。有人能帮我吗?我希望我能解释清楚。
简单答案:使用pygame。SCALED显示标志。
它为您和鼠标事件调整了主屏幕的大小,而您的程序无需了解任何信息。记录在本页上:https://www.pygame.org/docs/ref/mixer.html
使用这意味着你根本不需要使用假屏幕,也不需要做任何有缩放功能的事情。
DIY答案:如果你仍然想自己控制缩放,你只需要随着屏幕缩放鼠标事件。就像缩放一样,然后以相反的方式缩放假屏幕。
在您的情况下,这似乎需要将鼠标事件x除以fakescreen宽度和屏幕宽度之间的比率,与y(高度为c(相同。
我自己找到了一个非常简单的解决方案。我刚得到鼠标的x和y坐标,就把它们按比例改成了对应的点。用一个简单的数学。我的意思是,如果x坐标是主屏幕宽度的15%,那么将其转换为假屏幕宽度的15%。这样,假屏幕将获得适当缩放的坐标。数学方程式如下:-
mouse_x = mouse_x/(xd/100)
mouse_x *= 10
mouse_y = mouse_y/(yd/100)
mouse_y *= 6
这里xd和yd分别是可调整大小的主屏幕的宽度和高度。10和6是1000和600的1%,1000和600是假屏幕的宽度和高度。这解决了我的问题,游戏现在运行得很好。非常感谢。