Pygame.transform.rotate比例旋转

时间:2013-08-03 13:35:54

标签: python pygame

最近我决定开始我的第三场pygame游戏。在那场比赛中,玩家应该通过用鼠标指向飞机从屏幕底部的大炮射向飞机。我把代码放在更多的模块中(更多.py文件)为了更容易理解。我开始试图让大炮向鼠标当前位置旋转。所以我们走了。

main.py

import pygame,sys
import screen
import constants
from pygame.locals import *
from loop import *

screen.screen = pygame.display.set_mode((800,600))
main_loop()

constatns.py

import pygame

pygame.init()

scr = pygame.display.list_modes()
resolution = (scr[0][0],scr[0][1])
angle = 0
barell = pygame.image.load("barell.png")
tux = pygame.image.load("tux.png")
tux2 = pygame.transform.scale(tux,(100,100))

loop.py

import pygame,event
import screen
import constants
import math
import random
import groups
from faster_barell import *


faster_barell = faster_barell()
faster_barell.add_to_group()

def main_loop():
    while True:
        mx,my = pygame.mouse.get_pos()
        event.Event()
        screen.screen.fill([0,0,0])
        groups.barell_group.draw(screen.screen)
        for t in groups.barell_group:
            dx = mx - t.rect.x
            dy = my - t.rect.y
            angle = math.atan2(dx,dy)
            angle2 = math.degrees(angle)
            constants.angle = angle2
            t.image = pygame.transform.rotate(constants.barell,angle2)

         pygame.display.flip()

screen.py

import pygame
import constants

pygame.init()

screen = None

event.py

import pygame,sys
from pygame.locals import *

class Event(object):
    def __init__(self):
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                sys.exit()

faster_barell.py

import pygame
import constants
import groups

class faster_barell(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = constants.barell
        self.rect = self.image.get_rect()
        self.rect.x = 750
        self.rect.y = 550

    def add_to_group(self):
        groups.barell_group.add(self)

groups.py

import pygame

barell_group = pygame.sprite.Group()

现在不是旋转pygame(我无法解释如何)缩放裸露的图像。简单图像只是一个空白(白色)10x30图像)。现在这里出现了更奇怪的部分。当在t.image = pygame.transform.rotate(constants.barell,angle2)我将constants.barell更改为constants.tux2(这只是一个tux图像(仅用于测试它不会在游戏中)一切正常!这是晚礼服我与http://upload.wikimedia.org/wikipedia/commons/3/3e/Tux-G2.png合作过。我试图解决这个问题 通过将math.atan2中的dx和dy更改为其他东西(dy,dx,-dy,dx,-dx,-dy等),请帮助我试图解决这个问题大约6个小时(我从来没有问过stackoverflow除非我真的无法做任何事情来使代码工作)

2 个答案:

答案 0 :(得分:0)

以下是一些有用的链接: docs

来自旋转功能doc:

“除非以90度为增量旋转,图像将被填充得更大以保持新尺寸。”

解决方案是在每次旋转后裁剪图像。您可以通过编写将创建新曲面的小函数进行裁剪,并将中间部分blit到新曲面上。 此问题已在此处解决:so

答案 1 :(得分:0)

感谢您的回答,我尝试了所有这些,但没有一个对我有用。 而是我像这样修理它

pygame.transform.rotozoom(constants.barell,angle2,1)而不是pygame.transform.scale。

谢谢大家:D