对游戏图形阵列的快速操作

时间:2015-02-13 22:35:24

标签: python arrays python-3.x graphics pygame

我已经编程了一段时间,但我对图形,图形用户界面,事件收集等方面的经验很少。最近我正在尝试编写一个带有游戏生命力学的简单游戏。这就是我想逐像素控制的原因。

我正在使用pygame和surfarray.blit_array(),它的效果非常好,除了帧率非常差,大约5 fps。我发现像素绘图没有问题 - 当我使用numpy数组并使用fill()时,fps非常非常快。但是当我尝试一个简单的程序时,它会将随机值设置为数组元素,它会变得很慢,大约是5 fps。

我尝试在列表列表上操作而不是numpy数组,然后将其转换为numpy数组,但速度并不快。

我做错了什么?我已经读过在C ++中使用SDL可以获得更好的帧速率,但这里的问题似乎是数组操作,而不是图形处理。

编辑: 对不起,我想我一切都过于复杂。我的问题的核心是这样的程序:

import time
import numpy
import random

a = numpy.zeros((600,600))

b = time.clock()

for i in range(600):
    for j in range(600):
        if random.random()>0.5:
            a[i][j] = 1
        else:
            a[i][j] = 0

print(time.clock()-b)

需要0.26秒,因此简单地渲染噪声是不可能的。我想必须有一个更快的方法。我正在使用IDLE Python 3.4

1 个答案:

答案 0 :(得分:1)

如果你正在使用数组,你也可以使用基于数组的函数。每当你逐步完成一个数组时,就可能有更好的解决方案。在这种情况下,您可以使用numpy.random.randint()

import numpy as np
b = time.clock()    
a = np.random.randint(2,size=(600,600))
print time.clock() - b

将返回一个600 x 600的0和1的数组。就我而言,输出为0.006798

(在python 2.7中完成,但是numpy功能应该相同)。