下面的代码是我在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)
答案 0 :(得分:1)
在计算播放器和鼠标之间的角度时,您不会考虑偏移量。您可以通过更改这样的距离来解决此问题:
distance = [self.dx - self.x - offsetx, self.dy - self.y - offsety]