gpt4 book ai didi

python - 解决 pygame 三角函数错误

转载 作者:太空宇宙 更新时间:2023-11-03 11:53:08 42 4
gpt4 key购买 nike

我正在制作一款 pygame 游戏,其设计目的是让子弹朝鼠标的方向射击。我在用着一个类来定义列表中的项目符号,如下所示:

class Bullet:
def __init__(self,pos,speed,size):
self.pos = pos
self.speed = speed
self.size = size
def move(self):
self.pos[0] = int(self.pos[0] + self.speed[0])
self.pos[1] = int(self.pos[1] + self.speed[1])

我正在使用这个三角函数来获取我要射击子弹的角度的向量。

def getUnitVector(x1, y1, x2, y2):
delx = x2 - x1
dely = y2 - y1
m = math.sqrt(delx * delx + dely * dely)
unit = (delx / m, dely / m)
return unit
level = [

我没有使用角度,因为我必须解决 pygame 舍入错误。这些是我插入到函数中的变量。

mousex, mousey = pygame.mouse.get_pos()
startx = 50
starty = 400
aim = getUnitVector(startx, starty, mousex, mouse

这就是我处理目标并让子弹从 x,y 开始射击的方式

if pygame.mouse.get_pressed()[0]:
if reload>10:
bx = BULLETSPEED * aim[0]
by = BULLETSPEED * aim[1]
bullet = Bullet([startx,starty], [bx,by],10)
bullets.append(bullet)
reload=0
reload = reload + 1

我只是想让你知道。我正在做一项学校作业,我将在下一个单元更深入地学习向量和三角函数,所以我现在真的不想花太多时间学习这些东西:L。此外,如果您知道任何可能对回答此问题更有帮助的活跃 python 论坛,请发表评论。我找不到任何。感谢您的宝贵时间。

我可能只是构建一个变通方法,只允许它在鼠标在 20 像素以内或其他范围内拍摄,以便将错误降至最低。

最佳答案

子弹类应具有矩形属性,以便子弹的行进方向穿过子弹的中心。

这样做首先需要阅读 Pygame 文档:Pygame.Rect Docs

将子弹矩形置于行进方向的中心可以通过这样的移动方法实现:

    def move(self):
self.dir = self.get_direction(self.target) # get direction
if self.dir: # if there is a direction to move

self.trueX += (self.dir[0] * self.speed) # calculate speed from direction to move and speed constant
self.trueY += (self.dir[1] * self.speed)
self.rect.center = (round(self.trueX),round(self.trueY)) # apply values to bullet.rect.center

更多信息可以在这个有用的 Sprite 移动示例中找到:Pygame Sprite Movement

关于python - 解决 pygame 三角函数错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20725137/

42 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com