(Nov-05-2019, 08:58 PM)SheeppOSU Wrote: Are there any problems in using the boomerang. Also, there's a question that's been itching at me. What is pos? Whenever I make a game, I make it representing an x and y value. But the way pos is being interacted with makes it look like it's not made that sort of way. Could you give me an example of what it would look like printed?
I'm not sure if you mean this:
WEAPONS['boomerang'] = {'img': 'boomerang.png',
'speed': 340,
'lifetime': 550,
'rate': 900,
'kickback': 0,
'spread': 3,
'damage': 8,
'size': 'boomerang',
'count': 1}
This is in the player class, that the player is able to shoot weapons:
def shoot(self):
if self.shoot_ammo == True:
now = pg.time.get_ticks()
if now - self.last_shot > WEAPONS[self.weapon]['rate']:
self.last_shot = now
dir = vec(1, 0).rotate(-self.rot)
pos = self.pos + BARREL_OFFSET.rotate(-self.rot)
self.vel = vec(-WEAPONS[self.weapon]['rate'], 0).rotate(-self.rot)
for i in range(WEAPONS[self.weapon]['count']):
spread = uniform(-WEAPONS[self.weapon]['spread'], WEAPONS[self.weapon]['spread'])
Blowpipe(self.game, pos, dir.rotate(spread))
The position is a vector. vec is defined as this: vec = pg.math.Vector2
class Boomerang(pg.sprite.Sprite):
def __init__(self, game, pos, dir):
self.groups = game.all_sprites, game.blowpipes
pg.sprite.Sprite.__init__(self, self.groups)
self.game = game
self.image = game.blowpipe_images[WEAPONS[game.player.weapon]['size']]
self.rect = self.image.get_rect()
self.pos = vec(pos)
self.rect.center = pos
# spread = uniform(-BLOWPIPE_SPREAD, BLOWPIPE_SPREAD)
self.vel = dir * WEAPONS[game.player.weapon]['speed']
self.spawn_time = pg.time.get_ticks()
self.rot = 360
self.last = pg.time.get_ticks()
self.cooldown = 300
self.direction = +1
def update(self):
self.pos += self.vel * self.game.dt
self.rect.center = self.pos
if pg.sprite.spritecollideany(self, self.game.walls):
self.kill()
if pg.time.get_ticks() - self.spawn_time > WEAPONS[self.game.player.weapon]['lifetime']:
self.kill()
if self.game.player.weapon == 'boomerang':
now = pg.time.get_ticks()
if now - self.last >= self.cooldown:
self.direction = -1
#self.pos -= self.vel * self.game.dt
self.pos += self.vel * self.game.dt
self.rect.center = self.pos
And yes, I can use the boomerang. It flies forward but is not coming back to the player.