2013-02-26 99 views
1

我是python和pygame的新手。 我想旋轉一個關於中心以外的點的矩形。我的代碼到目前爲止是:在圖像上設置一個點作爲旋轉點Pygame.transform.rotate()


    import pygame 
    pygame.init() 
    w = 640 
    h = 480 
    degree =45 
    screen = pygame.display.set_mode((w,h)) 
    surf = pygame.Surface((25, 100)) 
    surf.fill((255, 255, 255)) 
    surf.set_colorkey((255, 0, 0)) 
    bigger = pygame.Rect(0, 0, 25, 100) 
    pygame.draw.rect(surf, (100, 0, 0), bigger) 
    rotatedSurf = pygame.transform.rotate(surf, degree) 
    screen.blit(rotatedSurf, (400,300)) 
    running = True 
    while running: 
     event = pygame.event.poll() 
     if event.type ==pygame.QUIT: 
      running = False 
     pygame.display.flip() 

我可以改變程度來獲得不同的旋轉,但旋轉是關於中心。我想將矩形中心以外的點設置爲旋轉點。

請幫忙。 謝謝

回答

0

我認爲你必須爲你自己做一個功能。

如果你製作Vector類,那就容易多了。

也許喜歡的東西:

def rotate(surf, angle, pos): 
    pygame.transform.rotate(surf, angle) 
    rel_pos = surf.blit_pos.sub(pos) 
    new_rel_pos = rel_pos.set_angle(rel_pos.get_angle() + angle) 
    surf.blit_pos = pos.add(new_rel_pos) 

所以你有後援只有你所要做的事情就是與方法Vector類 '的add()', '子()',「get_angle( )'和'set_angle()'。如果你只是在尋求幫助,Google正在苦苦掙扎。

最後你會得到一個漂亮的Vector類,你可以在其他項目中進行擴展和使用。

1

我也有這個問題,發現一個簡單的解決方案: 您可以創建一個更大的表面(加倍長度和加倍高度),並將較小的表面噴射到較大的表面,以便旋轉點是較大的中心一。現在,您可以圍繞中心旋轉較大的一個。

def rotate(img, pos, angle): 
    w, h = img.get_size() 
    img2 = pygame.Surface((w*2, h*2), pygame.SRCALPHA) 
    img2.blit(img, (w-pos[0], h-pos[1])) 
    return pygame.transform.rotate(img2, angle) 

(如果你會作出草圖,它將使更多的意義,但是請相信我:它的工作原理,是在我看來,易於使用,並且比其他解決方案,瞭解)