-5

我有一个代表 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
4

2 回答 2

2

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

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)
于 2013-09-29T23:15:57.583 回答
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 可以轻松地在内存中加载和存储 3 个元素的 256 个元组,并在动画循环的中间以最小的性能成本快速浏览它们。

于 2013-09-29T23:41:17.857 回答