2013-02-26 4 views
1

Я новичок как на питоне, так и на 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() 

Я могу изменить степень, чтобы получить разное вращение, но вращение вокруг центра. Я хочу установить точку, отличную от центра прямоугольника, в качестве точки поворота.

Пожалуйста, помогите. Thanks

ответ

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) 

Так что у вас есть it.The единственное, что вам нужно сделать, это вектор класс с методами «оных()», «к югу()», «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) 

(Если бы эскиз, было бы гораздо больше смысла, но поверьте мне:. Он работает и на мой взгляд, проста в использовании и понять, чем другие решения)

Смежные вопросы