解决pygame三角函数错误

时间:2013-12-22 01:02:08

标签: python pygame

我正在设计一个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像素以内的情况下进行拍摄,以便将错误降至最低。

1 个答案:

答案 0 :(得分:1)

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

这样做首先需要阅读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

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