1
\$\begingroup\$

the code below is the bullet class for my shooter game in pygame. as you can see if you run the full game (https://github.com/hailfire006/economy_game/blob/master/shooter_game.py) the code works great to fire bullets at the cursor as long as the player isn't moving. However, I recently added scrolling, where I change a global offsetx and offsety every time the player gets close to an edge. These offsets are then used to draw each object in their respective draw functions.

unfortunately, my bullet physics in the bullet's init function no longer work as soon as the player scrolls and the offsets are added. Why are the offsets messing up my math and how can I change the code to get the bullets to fire in the right direction?

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) 
\$\endgroup\$

1 Answer 1

0
\$\begingroup\$

To simply fix your error:

after the line self.dx,self.dy = self.mouse try adding

self.dx -= offsetx self.dy -= offsety 

Note this is not an ideal solution. In general though to avoid similar future problems I would further separate the concept of screen space and world space, possibly by the addition of something like a "camera" class. You could even add in features like zoom and rotate this way. Something like your Bullet class should have no awareness of your screen screen space or the mouse at all. It would receive only coordinates in the world space.

\$\endgroup\$

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.