pygame bullet物理通过滚动搞砸了

时间:2015-08-02 16:52:31

标签: python vector pygame

下面的代码是我在pygame中射击游戏的子弹类。正如你可以看到的那样,如果你运行完整的游戏(https://github.com/hailfire006/economy_game/blob/master/shooter_game.py),只要玩家没有移动,代码就可以很好地在光标处发射子弹。但是,我最近添加了滚动功能,每次玩家接近边缘时我都会更改全局偏移量和偏移量。然后使用这些偏移在各自的绘制函数中绘制每个对象。

不幸的是,当玩家滚动并添加偏移时,子弹初始化功能中的子弹物理不再起作用。为什么补偿会弄乱我的数学,如何更改代码以使子弹朝正确的方向射击?

class Bullet:
    def __init__(self,mouse,player):
        self.exists = True
        centerx = (player.x + player.width/2)
        centery = (player.y + player.height/2)
        self.x = centerx
        self.y = centery
        self.launch_point = (self.x,self.y)
        self.width = 20
        self.height = 20
        self.name = "bullet"
        self.speed = 5
        self.rect = None
        self.mouse = mouse
        self.dx,self.dy = self.mouse

        distance = [self.dx - self.x, self.dy - self.y]
        norm = math.sqrt(distance[0] ** 2 + distance[1] ** 2)
        direction = [distance[0] / norm, distance[1] / norm]
        self.bullet_vector = [direction[0] * self.speed, direction[1] * self.speed]

    def move(self):
        self.x += self.bullet_vector[0]
        self.y += self.bullet_vector[1]

    def draw(self):
        make_bullet_trail(self,self.launch_point)
        self.rect = pygame.Rect((self.x + offsetx,self.y + offsety),(self.width,self.height))
        pygame.draw.rect(screen,(255,0,40),self.rect)

1 个答案:

答案 0 :(得分:1)

在计算播放器和鼠标之间的角度时,您不会考虑偏移量。您可以通过更改这样的距离来解决此问题:

distance = [self.dx - self.x - offsetx, self.dy - self.y - offsety]