title: Love2d how to make Bullets
body: <p>Hey guys so I tried to create some bullets in my game, and I thought you maybe could help me with a problem I am having.</p>
  
  <p>So my bullets fire with a speed and all that, but how do I make them fire from the player?
  And how do I make so it can fire in all directions? Since it only can fire up atm.</p>
  
  <p>this is my code.</p>
  
  <pre><code>local AdvTiledLoader = require("AdvTiledLoader.Loader")
  require("camera")
  
  function love.load()
  love.graphics.setBackgroundColor( 204, 255, 204 )
  crazy = love.graphics.newImage("wizard3.png")
  key1 = love.graphics.newImage("key1.png")
  
  bullets = {}
  bullet_speed = 100
  
  
  width = crazy:getWidth()
  height = crazy:getHeight()
  
  
  AdvTiledLoader.path = "maps/"
  map = AdvTiledLoader.load("map.tmx")
  map:setDrawRange(0, 0, map.width * map.tileWidth, map.height * map.tileHeight)
  
  camera:setBounds(0, 0, map.width * map.tileWidth - love.graphics.getWidth(), map.height * map.tileHeight - love.graphics.getHeight() )
  
  world =     {
              gravity = 1536,
              ground = 512,
              }
  
  player =    {
              x = 256,
              y = 256,
              x_vel = 0,
              y_vel = 0,
              jump_vel = -1024,
              speed = 512,
              flySpeed = 700,
              state = "",
              h = 48,
              w = 40,
              standing = false,
              }
  
  item =      {
              x = 100,
              y = 3222,
              h = 32,
              w = 32,
              picked = false,
              }
  
  function player:jump()
      if self.standing then
          self.y_vel = self.jump_vel
          self.standing = false
      end
  end
  
  function player:pick()
      if ((self.x - width/2 &lt; item.x and self.x + width/2 &gt; item.x) and (self.y - height/2 &lt; item.y and self.y + height/2 &gt; item.y)) then
          print("picked")
      else
          print("no item found")
      end
  end
  
  function player:right()
      self.x_vel = self.speed
  end
  
  function player:left()
      self.x_vel = -1 * (self.speed)
  end
  
  function player:stop()
      self.x_vel = 0
  end
  
  function player:collide(event)
      if event == "floor" then
          self.y_vel = 0
          self.standing = true
      end
      if event == "cieling" then
          self.y_vel = 0
      end
  end
  
  function player:update(dt)
      local halfX = self.w / 2
      local halfY = self.h / 2
  
      self.y_vel = self.y_vel + (world.gravity * dt)
  
      self.x_vel = math.clamp(self.x_vel, -self.speed, self.speed)
      self.y_vel = math.clamp(self.y_vel, -self.flySpeed, self.flySpeed)
  
      local nextY = self.y + (self.y_vel*dt)
      if self.y_vel &lt; 0 then
          if not (self:isColliding(map, self.x - halfX, nextY - halfY))
              and not (self:isColliding(map, self.x + halfX - 1, nextY - halfY)) then
              self.y = nextY
              self.standing = false
          else
              self.y = nextY + map.tileHeight - ((nextY - halfY) % map.tileHeight)
              self:collide("cieling")
          end
      end
      if self.y_vel &gt; 0 then
          if not (self:isColliding(map, self.x-halfX, nextY + halfY))
              and not(self:isColliding(map, self.x + halfX - 1, nextY + halfY)) then
                  self.y = nextY
                  self.standing = false
          else
              self.y = nextY - ((nextY + halfY) % map.tileHeight)
              self:collide("floor")
          end
      end
  
      local nextX = self.x + (self.x_vel * dt)
      if self.x_vel &gt; 0 then
          if not(self:isColliding(map, nextX + halfX, self.y - halfY))
              and not(self:isColliding(map, nextX + halfX, self.y + halfY - 1)) then
              self.x = nextX
          else
              self.x = nextX - ((nextX + halfX) % map.tileWidth)
          end
      elseif self.x_vel &lt; 0 then
          if not(self:isColliding(map, nextX - halfX, self.y - halfY))
              and not(self:isColliding(map, nextX - halfX, self.y + halfY - 1)) then
              self.x = nextX
          else
              self.x = nextX + map.tileWidth - ((nextX - halfX) % map.tileWidth)
          end
      end
  
      self.state = self:getState()
  end
  
  function player:isColliding(map, x, y)
      local layer = map.tl["Solid"]
      local tileX, tileY = math.floor(x / map.tileWidth), math.floor(y / map.tileHeight)
      local tile = layer.tileData(tileX, tileY)
      return not(tile == nil)
  end
  
  function player:getState()
      local tempState = ""
      if self.standing then
          if self.x_vel &gt; 0 then
              tempState = "right"
          elseif self.x_vel &lt; 0 then
              tempState = "left"
          else
              tampState = "stand"
          end
      end
      if self.y_vel &gt; 0 then
          tempState = "fall"
      elseif self.y_vel &lt; 0 then
          tempState = "jump"
      end
      return tempState
  end
   end
  
   function love.draw()
  camera:set()
  
  
  for i,v in ipairs(bullets) do
     love.graphics.rectangle("fill", 300, v.y, 5, 10)
   end
  
  love.graphics.draw(key1, item.x - item.w/2, item.y - item.h/2)
  
  love.graphics.draw(crazy, player.x - width/2, player.y - height/2)
  
  --love.graphics.setColor( 255, 161, 65 )
  --love.graphics.rectangle("fill", player.x - player.w/2, player.y - player.h/2, player.w, player.h)
  
  love.graphics.setColor( 255, 255, 255 )
  map:draw()
  
  camera:unset()
  end
  
  function love.update(dt)
  if dt &gt; 0.05 then
      dt = 0.05
  end
  
  
  
  
  for i,v in ipairs(bullets) do
    v.y = v.y - bullet_speed * dt
    if v.y &lt; 100 then
       table.remove(bullets, 1)
    end   
  end
  
  
  if love.keyboard.isDown("d") then
      player:right()
  end
  if love.keyboard.isDown("a") then
      player:left()
  end
  if love.keyboard.isDown(" ") and not(hasJumped) then
      player:jump()
  end
  if love.keyboard.isDown("p") then
      player:pick()
  end
  
  player:update(dt)
  
  camera:setPosition( player.x - (love.graphics.getWidth()/2), player.y - (love.graphics.getHeight()/2))
  end
  
  function love.keyreleased(key)
  if (key == "a") or (key == "d") then
      player.x_vel = 0
  end
  end
  
  function love.mousepressed(x, y, k)
  print("Fire")
    if k == "l" then
       bullets[#bullets + 1] = {
           y = 495
          }
      end
  end
  </code></pre>
  
  <p>If you can see something else I write a bad way please say it :) It helps me out alot.</p>
  
  <p>Thanks :)</p>