如何按固定值添加元组或列表的每个元素?

时间:2013-09-29 23:13:37

标签: python pygame tuples

我有一个代表RGB颜色的元组。我的目标是通过在每个帧中添加固定值,在一秒钟内将其从黑色(0, 0, 0)变为白色(255, 255, 255)。我如何在函数中对此进行编码?

这是更新功能:

def update(self, dt):
        now = pygame.time.get_ticks() / 1000
        if now - self._spawn_time >= BALL_WAIT_TIME: 
            self.rect = self.calcnewpos(dt)
            self.handle_collision()
        else:
            # ANIMATION HERE

2 个答案:

答案 0 :(得分:1)

由于你的元组只重复相同的数字,只需使用一个范围循环并从头开始创建元组:

for i in range(256):
    rgb = (i, i, i)

此处无需加载。

或者,从框架中计算i。一秒钟30帧?将256除以30得到步长,然后使用帧编号:

step = 256 / 30.0
value = int(frame * step)
rgb = (value, value, value)

答案 1 :(得分:1)

如果您严重关注每帧的性能,可以预先分配所需的所有元组。

那么为什么不为你想做的任何事情制作颜色词典呢?

# Pre-animation allocation
colors = {}

for i in xrange(256):
    colors[i] = (i,i,i)
# Divide 256 by frames per second
step = 256 / 60
# current RGB value
RGB_val = 0

# During animation, suppose loop iterates 60 times per second
while True:
    # During update
    RGB_val += step
    color = colors[min(RGB_val,255)]
    # Draw to display surface

如果您在尝试做的任何事情开始时预先分配元组而不是尝试生成元组,那么您将拥有最高的性能,因为您的代码在帧中快速翻转。 Python可以轻松地在内存中加载和存储256个3元素元组,并在动画循环中以最小的性能成本快速翻转它们。