微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

移动显示表面上的 Pygame 旋转精灵枢轴

如何解决移动显示表面上的 Pygame 旋转精灵枢轴

所以我尝试将武器添加到我的游戏中并在指向鼠标的枢轴点上旋转它,我做到了,但我遇到了一个无法解决的问题,当我和我的玩家一起走路时,在我之后沿着地图中间走下去,旋转角度看起来不对。

我给您链接一个 gif 以便更好地理解。

这是工作轮换代码的一部分:

import pygame,os,math
from weapon_constants import *
from level_constants import *
from pygame.math import Vector2

class Weapon(pygame.sprite.Sprite):
    def __init__(self,game,name,label,x,y):
        self._layer = WEAPON_LAYER
        self.groups = game.all_sprites,game.weapons
        
        pygame.sprite.Sprite.__init__(self,self.groups)
        self.options = WEAPONS[name]
        self.label = label
        self.game = game
        
        self.file = os.path.join(os.getcwd(),DEFAULT_WEAPON_IMAGE_PATH,self.get_option('image'))
        self.image = pygame.transform.scale(pygame.image.load(self.file).convert_alpha(),DEFAULT_WEAPON_SIZE)
        self.original_image = self.image
        self.rect = self.image.get_rect(center=(x,y))

        self.offset = Vector2(25,0)
        self.pos = Vector2(self.rect.x,self.rect.y)
        self.angle = 0
        
    def get_option(self,option):
        if option in self.options:
            return self.options[option]
        
        return False

    def update(self):
        self.pos = Vector2(self.game.player.rect.center)
        rel_x,rel_y = pygame.mouse.get_pos() - self.pos
        self.angle = (180 / math.pi) * math.atan2(rel_y,rel_x)
        if self.pos.y > pygame.display.get_surface().get_width() // 2:
            print('bad rotation happen \n pos_y : {},\n angle : {},\n mouse_pos : {}'.format(self.pos.y,self.angle,pygame.mouse.get_pos()))
            pass
        self.rotate()
        
    
    def rotate(self):
        self.image = pygame.transform.rotozoom(self.original_image,-self.angle,1)
        rotated_offset = self.offset.rotate(self.angle)
        self.rect = self.image.get_rect(center= self.pos + rotated_offset)
  

这是第一个输出(我看到它大约是地图的一半宽度):

bad rotation happen 
 pos_y : 452.0,angle : 23.962488974578186,mouse_pos : (450,468)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。