Найти - Пользователи
Полная версия: pygame rotate
Начало » Python для новичков » pygame rotate
1
rocket
Мучаю PyGame и себя. Не могу понять как работает функция pygame.transform.rotate. Инструкцию прочитал
pygame.transform.rotate

rotate an image
pygame.transform.rotate(Surface, angle): return Surface

Unfiltered counterclockwise rotation. The angle argument represents degrees and can be any floating point value. Negative angle amounts will rotate clockwise.

Unless rotating by 90 degree increments, the image will be padded larger to hold the new size. If the image has pixel alphas, the padded area will be transparent. Otherwise pygame will pick a color that matches the Surface colorkey or the topleft pixel value.
Но я так и не понял относительно чего изменяеться угол .
Frog-king
Тоже долго мучался с этим методом - место вращения получалось искривление пространства ))

Само вращение нужно совершать с копией спрайта. Вообщем смотри
import pygame
pygame.init()
pygame.key.set_repeat(1, 1)
display = pygame.display.set_mode((640, 480))  
org_spriteImg = pygame.image.load(u'1.jpeg').convert_alpha()
spriteImg = org_spriteImg
spriteRect = org_spriteImg.get_rect()
spriteRect.center = (320, 240) 
angle = 0                
run = 1
while run:
    display.fill((255, 255, 255)) 
    display.blit(spriteImg, spriteRect)
    pygame.display.flip() 
    for event in pygame.event.get(): 
        if event.type == pygame.QUIT:
            run = 0
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_1:
                run = 0
            if event.key == pygame.K_UP:
                spriteRect = spriteRect.move(0, -1)
            elif event.key == pygame.K_DOWN:
                spriteRect = spriteRect.move(0, 1)
            if event.key == pygame.K_LEFT:
                angle += 1
                spriteImg = pygame.transform.rotate(org_spriteImg, angle)
                
            elif event.key == pygame.K_RIGHT:
                angle -= 1
                spriteImg = pygame.transform.rotate(org_spriteImg, angle)
                

Но можно вращать и вокруг центра приблизительно так ( только координаты центра нужно хранить)
            elif event.key == pygame.K_RIGHT:
                angle -= 1
                spriteImg = pygame.transform.rotate(org_spriteImg, angle)
                spriteRect = spriteImg.get_rect()
                spriteRect.center = (320, 240)      

Вообщем прошу заценить и почитать исходники моей игры

rocket
Там каким лучше метдом пользоваться , FroG-King? Вращение вокруг центра? И почему в инструкции написано что функция
screen.blit выводит на определеную координату левый-верхний угол rectangla , но я проверял в программе выводит центр прямоугольника.
Относительно чего происходит вращение я так и не понял , чесно. И это ужасно . Все так программисты работа
ют? Вводишь данные - получаешь результат. Что делают эти фреймйорки - не понятно.
Frog-king
Мне кажется ты запутался.
По поводу blit - причём здесь blit я не понял. И как ты проверял тоже интересно (кинь как проверял)

Вообщем я не совсем правильно в прошлый раз выразился
Но можно вращать и вокруг центра приблизительно так ( только координаты центра нужно хранить)

это не вращение вокруг центра - это просто смещение картинки так чтоб вращение выгладило как вокруг центра. вот как. Дело в том что при вращении у изображения изменяется rectangle, поэтому изображение смещается. Именно поэтому лучше использовать вот так.
import pygame
pygame.init()
pygame.key.set_repeat(1, 1)
display = pygame.display.set_mode((640, 480))  
org_spriteImg = pygame.image.load(u'1.png').convert_alpha()
spriteImg = org_spriteImg
spriteRect = org_spriteImg.get_rect()
spriteRect.center = (320, 240) 
angle = 0
def rotate(alfa):
    global spriteImg, spriteRect, angle
    angle += alfa
    spriteImg = pygame.transform.rotate(org_spriteImg, angle)
    spriteRect = spriteImg.get_rect()
    spriteRect.center = (320, 240)      
run = 1
while run:
    display.fill((255, 255, 255)) 
    display.blit(spriteImg, spriteRect)
    pygame.display.flip() 
    for event in pygame.event.get(): 
        if event.type == pygame.QUIT:
            run = 0
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                rotate(1)                
            elif event.key == pygame.K_RIGHT:
                rotate(-1)
и будет тебе счастье. Лучше найди книжку в сети по пугейму и почитай. ))

ИМХО Pygame хороший фреймворк. А документация заслуживает особенного респекта, Не каждая билиотека может похвастаться такой
Frog-king
вот картинка для тебя
rocket
Спасибо ,Frof-King , что отвечаешь .Читаю книгу “beginning-game-development-with-python-and-pygame-from-novice-to-professional” , но технический английский мне пока тяжеловат.
Frog-king
Да у меня с английским тоже не лады но когда читал - интуитивно понятно было. )))
Вообще не совсем понимаю зачем ты так замарачиваешься, по мне так не важно как он там крутится, главное как крутить правильно. Скажи зачем тебе эта правда ? Попробуй, покрути, напиши сам и все будет pygame! ))

В этой книжке по поводу rotate тоже немного есть.

+ картинка - По моему вот так ( это по моему как по правде не знаю) )))
(заданный, простите за безграмотность
rocket
Да у меня мания, постоянно хочу докопаться до самых основ. И понимаю что-бы писать игры не так уж и важно как видеокарта рендит изображение на монитор , но … вообщем мания, постоянно чувство что-то потерял. Вопрос такой - эта
функция
org_spriteImg = pygame.image.load(u'1.png').convert_alpha() 
. У меня не выходит convert_alpha ,ни просто convert ,пишет
'pygame.Surface' object has no attribute 'convert_alha
. Чем это чревато? В тупую пишу org_spriteImg = pygame.image.load(u'1.png'), тогда прогамма работает. Гуглил , но так и не нашел вразумительного ответа
Frog-king
'convert_alha
Может опечатка ? А может забыл поставить скобочки convert_alpha()

Должно всё работать. Насколько я помню этот метод делает доступным у изображения альфа-канал ( прозрачные пиксели) грубо говоря ))
его необязательно использовать если изображение прозрачности не имеет. но разработчики рекомендуют использовать всегда.
ckolobok
rocket
У меня не выходит convert_alpha ,ни просто convert ,пишет
Попробуйте так:
org_spriteImg = pygame.image.load('1.png').convert_alpha()
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB