我目前正在2D顶视图中进行太空探索游戏 . 我有很多行星,因为 Map Span 比显示器大得多,我最终会在展示区域外放置很多行星精灵 . 目前我认为Pygame实际上不会对精灵进行blit,如果它们不在显示器中(因为我理解它是blitting并且绘制到表面会减慢很多东西)是真的吗?或者我是否需要添加一个条件来检查精灵在blit调用之前是否位于显示内?我问的原因是我的游戏工作方式是每次发现行星时都会创建2个新行星......这意味着游戏可能变得非常大,而且可能非常慢 .
谢谢
不,它不会使图像blit . 如果你试图搞砸屏幕之外的东西,Pygame就会忽略它 . 它不应该减慢你的程序,除非有大量的对象,因为pygame需要一小部分时间来确定图像在屏幕之外 . 这不是一个大问题 .
实现我的答案缺乏证据(这是坏的,mkay ......),所以我进行了一些测试以证明我的观点 . 我测试了3个条件:blitting到屏幕,在屏幕外面blitting,什么都不做 . 他们采取的秒数是微不足道的,因为它们是基于我的计算机的性能(一台5岁的笔记本电脑),所以寻找它们之间的因素;他们应该对每个人都相似 .
内部:0.033265519510593734秒
外:0.002402466401003767秒
没什么:0.00023237229449441657秒
内部:3.639024520190433秒
外:0.23328839021967726秒
没什么:0.023549600850092247秒
内部:360.48034191795153秒
外:23.317473949049596秒
没什么:2.3507101910654455秒
正如你所看到的,在屏幕外面进行blitting比不进行blitting需要更多的时间,但它实际上并不需要花费与屏幕实际上相同的时间 . 在屏幕外面炫目只是一个成本 .
为了进一步参考,这是我创建的测试:
setup = """ import pygame pygame.init() screen = pygame.display.set_mode((100, 100)) image = pygame.Surface((100, 100)) """ statement1 = """ for i in range(5000): screen.blit(image, (0, 0)) """ statement2 = """ for i in range(5000): screen.blit(image, (200, 200)) """ statement3 = """ for i in range(5000): pass """ from timeit import timeit num_of_times = 10000 inside = timeit(stmt=statement1, setup=setup, number=num_of_times) outside = timeit(stmt=statement2, setup=setup, number=num_of_times) nothing = timeit(stmt=statement3, setup=setup, number=num_of_times) print("Inside: {} seconds".format(inside/num_of_times)) print("Outside: {} seconds".format(outside/num_of_times)) print("Nothing: {} seconds".format(nothing/num_of_times))
1 回答
不,它不会使图像blit . 如果你试图搞砸屏幕之外的东西,Pygame就会忽略它 . 它不应该减慢你的程序,除非有大量的对象,因为pygame需要一小部分时间来确定图像在屏幕之外 . 这不是一个大问题 .
实现我的答案缺乏证据(这是坏的,mkay ......),所以我进行了一些测试以证明我的观点 . 我测试了3个条件:blitting到屏幕,在屏幕外面blitting,什么都不做 . 他们采取的秒数是微不足道的,因为它们是基于我的计算机的性能(一台5岁的笔记本电脑),所以寻找它们之间的因素;他们应该对每个人都相似 .
5,000 blits
内部:0.033265519510593734秒
外:0.002402466401003767秒
没什么:0.00023237229449441657秒
500,000 blits
内部:3.639024520190433秒
外:0.23328839021967726秒
没什么:0.023549600850092247秒
50,000,000 blits
内部:360.48034191795153秒
外:23.317473949049596秒
没什么:2.3507101910654455秒
正如你所看到的,在屏幕外面进行blitting比不进行blitting需要更多的时间,但它实际上并不需要花费与屏幕实际上相同的时间 . 在屏幕外面炫目只是一个成本 .
为了进一步参考,这是我创建的测试: