2013-08-03 69 views
0

最近我決定開始我的第三個pygame遊戲。在那場比賽中,玩家應該從屏幕底部的大炮向飛機射擊,通過用鼠標指向飛機。將代碼放在更多模塊(more.py文件)中以便於理解。我開始嘗試讓cannon barel旋轉鼠標當前位置。因此,我們繼續。Pygame.transform.rotate比例是旋轉

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的(我真的不能解釋如何)縮放barell圖像。 barell圖像只是一個空白(白色)10x30圖像)。現在這裏來更奇怪的部分。當在t.image = pygame.transform.rotate(constants.barell,angle2)我改變constants.barell爲constants.tux2(這只是一個禮服圖片(僅用於測試它不會在遊戲中),一切正常!這裏是我與http://upload.wikimedia.org/wikipedia/commons/3/3e/Tux-G2.png工作的tux圖片。我試圖通過將math.atan2中的dx和dy更改爲其他內容(dy,dx,-dy,dx,-dx,-dy等)來解決問題 ,請幫助我試圖解決這個約6小時(我從來不問關於計算器,除非我真的不能做任何事情來得到的代碼工作)

+0

旋轉縮放圖像以適合,儘量 –

+0

之前裁剪圖像@BartlomiejLewandowski我不知道種植轉尺度圖像fit.Nice的想法,但我還在學習pygame的和我沒有在文檔中找到關於裁剪的內容。那麼請你告訴我怎麼做,在一些細節上?請 –

+0

另請參閱:http://www.pygame.org/wiki/RotateCenter?parent=CookBook – ninMonkey

回答

0

謝謝你的回答,我嘗試了所有這些,但都沒有爲我工作。 而是我修復它像這樣

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

謝謝大家:d

0

下面是一些有用的鏈接: docs

從旋轉功能文檔:

「除非以90度增量旋轉,否則圖像將填充較大以保持新尺寸。」

解決方案是在每次旋轉後裁剪圖像。你可以通過編寫一個小函數來裁剪,創建一個新的曲面,然後將中間部分噴射到新曲面上。 這個問題已經在這裏解決:so

相關問題