   @param [sourceObject] An object to exclude from the results.
   @returns {Array} An array of objects that collide with the given bounds.
   ###
-  collidesWith: (bounds, sourceObject) ->
-    collided = []
-
-    self.objects().each (object) ->
-      return unless object.solid()
-      if object != sourceObject && object.collides(bounds)
-        collided.push(object)
-
-    return collided if collided.length
+  collidesWith: (bounds, sourceObject, selector=".solid") ->
+    self.find(selector).select (object) ->
+      object != sourceObject and object.collides(bounds)
 
   ###*
   Detects collisions between a ray and the game objects.

        nearestHit = hit

    nearestHit

  @param source The origin point
  @param direction A point representing the direction of the ray
  @param [sourceObject] An object to exclude from the results.
  @param [selector] A selector to choos which objects in the engine to collide with
  ###
  rayCollides: ({source, direction, sourceObject, selector}) ->
    selector ?= ""

    hits = self.find(selector).map (object) ->
      hit = (object != sourceObject) and Collision.rayRectangle(source, direction, object.centeredBounds())
      hit.object = object if hit

      hit
