我建立的光线投射器本身工作的很好,但是当我添加纹理的时候它就有问题了。我只得到~1-2fps运行的投射器与纹理,而〉120 fps否则。我是相当新的编程。所以我希望一些优化的帮助。
“list”是从光线投射中获得的所有距离值。“clist”是光线接触墙壁的x & y位置的mod。look是玩家正在观看的上/下Angular 。
我去掉了阴影和阴影,因为这会让它更慢
def disp(list , clist):
rayspace = ceil(WIDTH / len(list))
for i in range(len(list)):
top = round(HEIGHT / 2 + 12000/list[i] + (look))
bottom = round(HEIGHT / 2 - 12000/list[i] + (look))
if top > bottom:
tallness = top - bottom
else:
tallness = bottom - top
y = 0
j = bottom
while not(j == top):
y += HEIGHT/tallness
k = 0
while not(k == rayspace):
color = wallpaper.get_at((floor(clist[i]/rayspace + k * 2), floor(y)))
color = (color[0] , color[1] ,color[2] )
screen.set_at((round(i * rayspace) + k , j) , color)
k+=1
j+=1
我已经用while循环替换了for循环,删除了所有全局变量,并在导入时使用“from”,这有一点帮助,但仍然非常慢
如果有任何需要澄清的代码,我很乐意帮助
1条答案
按热度按时间a0zr77ik1#
首先,如果一个计算的结果对于一个循环的每一次迭代都是相同的,那么你不需要在循环的每一次迭代中都这样做,你只需要在循环之前做一次,试试这样的方法:
另外,
not(j == top)
是否应该比j != top
快?