在Pygame中旋转图像
我知道这个问题之前有人问过,主要是因为我几乎看过这里所有提到这个话题的帖子,但我还是无法实现我想要的效果。根据我的理解,我的数学和代码都是正确的。简单来说,我正在制作一个90度的射击游戏,想让玩家的形象能够转动,朝向鼠标的位置。目前,形象只能稍微向左和向右转动,但并没有完全转向鼠标。正如我所说,我查阅了很多教程,但还是搞不明白。任何帮助或建议都非常感谢。我的代码在下面。谢谢!
#Import pygame
import pygame, sys
from pygame.locals import *
import math
#Initialize pygame
pygame.init()
#System variables
running = True
dispWidth = 800
dispHeight = 600
pygame.mouse.set_visible(False)
pygame.key.set_repeat(1, 50)
player = pygame.image.load('resources/player_handgun.png')
playerX = 50
playerY = 50
background = pygame.image.load('resources/grass.png')
crosshair = pygame.image.load('resources/crosshair.png')
gameScreen = pygame.display.set_mode( ( dispWidth, dispHeight) )
pygame.display.set_caption('Zombie Shooter')
gameScreen.blit( player, ( playerX, playerY))
gameScreen.blit( background, ( 0, 0))
pygame.display.update()
#def updateScreen():
# playerX = playerX + movement
#Game Loop
while running:
blue = (0,0,255)
velX = 0
velY = 0
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_d:
velX = 10
if event.key == pygame.K_a:
velX = (-10)
if event.key == pygame.K_w:
velY = (-10)
if event.key == pygame.K_s:
velY = 10
playerX = playerX + velX
playerY = playerY + velY
pos = (pygame.mouse.get_pos()[0], pygame.mouse.get_pos()[1])
playerDirection = math.atan2(playerY-pos[1], playerX-pos[0])
char = pygame.transform.rotate(player, playerDirection)
gameScreen.blit( background, (0, 0))
gameScreen.blit( char,(playerX,playerY))
gameScreen.blit( crosshair, (pos[0]-16,pos[1]-16))
print playerDirection
pygame.display.update()
1 个回答
1
pygame.transform.rotate
这个函数需要一个角度,单位是度(度数),而 math.atan2
这个函数返回的角度是弧度(弧度制)。所以在使用这两个函数的时候,你需要把度和弧度之间进行转换。
playerDirection = math.degrees(math.atan2(playerY-pos[1], playerX-pos[0]))
相关链接: