Python 使旋转平滑

Python 使旋转平滑,python,animation,pygame,Python,Animation,Pygame,我正在做一个小游戏,涉及链条的旋转部分。我是pygame的新手,但现在是开始 #!/usr/bin/python import pygame def draw(square): (x,y) = square pygame.draw.rect(screen, black, (100+x*20,100+y*20,20,20), 1) def rotate(chain, index, direction): (pivotx, pivoty) = chain[index]

我正在做一个小游戏,涉及链条的旋转部分。我是pygame的新手,但现在是开始

#!/usr/bin/python
import pygame
def draw(square):
    (x,y) = square
    pygame.draw.rect(screen, black, (100+x*20,100+y*20,20,20), 1) 

def rotate(chain, index, direction):
    (pivotx, pivoty) = chain[index]
    if (direction == 1):
        newchain = chain[:index]+[(y-pivoty+pivotx, (x-pivotx)+pivoty) for (x,y) in chain[index:]]
    else:
        newchain = chain[:index]+[(y-pivoty+pivotx, -(x-pivotx)+pivoty) for (x,y) in chain[index:]]

    if (set(chain) & set(newchain[index+1:]) == set()):
        return newchain
    else:
        print "Collision!"
        return chain

pygame.init()

size = [600, 600]
screen = pygame.display.set_mode(size)
white = (255,255,255)
black = (0,0,0)

n = 20
chain = [(i,0) for i in xrange(n)]

screen.fill(white)
for square in chain:
    draw(square)

pygame.display.flip()
raw_input("Press Enter to continue...")
newchain = rotate(chain, 5, 1)
print chain
print newchain
screen.fill(white)
for square in newchain:
    draw(square)

pygame.display.flip()
raw_input("Press Enter to continue...")

是否可以使旋转以动画的形式平滑显示,而不是跳转到pygame中的正确位置?

您应该创建一个函数,该函数不会将状态更改为最终状态,但会执行一小部分移动,如果动画未完成,则会调用自身并超时

例如(这是伪pygame)

不会使对象平滑设置动画,但

f(object):
     if object.position.x >= 10:
         return
     object.position.x += 1
     setTimer(10, f(object))

确实如此。

您应该创建一个函数,该函数不会将状态更改为最终状态,但会执行一小部分移动,如果动画未完成,则会调用自身并超时

例如(这是伪pygame)

不会使对象平滑设置动画,但

f(object):
     if object.position.x >= 10:
         return
     object.position.x += 1
     setTimer(10, f(object))

是。

分多个步骤进行。分多个步骤进行。如何刷新屏幕?我目前有screen.fill(白色)这似乎不太合理。编写另一个函数Drawerything,它将绘制您想要的每个对象,并每隔X毫秒调用此函数。它是否应该在每次更新图形之前进行screen.fill(白色)操作?您将如何进行屏幕刷新?我现在有screen.fill(白色),这似乎不太合理。编写另一个函数drawerything,它将绘制您想要的每个对象,并每隔X毫秒调用此函数。它是否应该在每次更新图形之前都执行screen.fill(白色)?