python - 在pygame中围绕中心点旋转玩家
问题描述
我正在制作一个游戏,其中有两个玩家,他们可以互相射击。它们的移动将由围绕固定点的旋转定义,该点将是 (600, 300),它是我们屏幕的中心。只要玩家按下某个按钮(不断为我们的玩家提供力量),他们就会一直围绕该点旋转,否则他们会跌倒(由于重力)。我认为将其视为使用绳子连接到点的球会有所帮助。只要按下按钮,绳子就会被连接,而一旦按钮被释放并且球飞走,绳子就会松开。这是我的播放器类
class Player:
def __init__(self):
self.pos = [500, 200]
self.width = 30
self.height = 30
self.player = pygame.image.load("player.png").convert_alpha()
self.player = pygame.transform.scale(self.player, (self.width, self.height))
self.rect = self.player.get_rect()
self.rotated_player = None
self.anguler_vel = 0
self.Fg = 0.05
self.Fp = 0
self.arm_length = 0
Fp
是垂直于重力的力Fg
。Fg
是把它拉到我们的玩家身上的力量。Fp
由 定义math.sin(theta) * Fg
。我正在跟踪,Fp
因为我希望玩家在从绳子上脱离后继续沿旋转方向移动。arm_length
是字符串的长度。
我有一个Point
类,这是我们的玩家将旋转的点。这是重点课程。
class Point:
def __init__(self,x, y):
self.pos = [x, y]
dx = self.pos[0] - player.pos[0]
dy = self.pos[1] - player.pos[1]
self.angle = math.atan2(dy, dx)
现在,我需要实际旋转本身的帮助。我知道在每一帧的角度上添加一个特定的值会让它四处走动。但是我如何让它绕过我指定的某个点,以及臂长如何与此相关?我发现实现所有这些真的很困难,因为 y 轴是翻转的,并且由于 FPS 速率,在计算中使用它们时所有位置值都必须按比例缩小。任何有关如何完成此操作的帮助也将不胜感激。谢谢
解决方案
推荐阅读
- python - 为什么 pynput.mouse.Controller 的导入方式很重要?
- android - 无法从存储库中观察片段中的 LiveData
- assembly - 使用 IN 指令使 x86 程序崩溃
- excel - Private Sub Worksheet_Change VBA 代码合并问题
- androidx - Navigation 组件是否支持 Dialog Fragments 的动画?
- php - WP REST API:如何通过自定义插件使用 WordPress 更改每页的最大项目数?
- angularjs - angularjs NgTable ng-repeat groupby 显示/隐藏
- android - 如何使用 CMake 将 FreeType 导入我的 Android Studio NDK 项目
- typescript - 将类型化参数传递给 TypeScript 中的函数时遇到问题
- google-chrome - 如何为我的 chrome 扩展获取产品价格?