struct SF::Rect(T)
inherits Struct
#
Utility struct for manipulating 2D axis aligned rectangles
A rectangle is defined by its top-left corner and its size.
It is a very simple struct defined for convenience, so
its member variables (left
, top
, width
and height
)
can be accessed directly, just like the vector classes
(Vector2
and Vector3
).
To keep things simple, SF::Rect
doesn't define
functions to emulate the properties that are not directly
members (such as right, bottom, center, etc.), it rather
only provides intersection functions.
SF::Rect
uses the usual rules for its boundaries:
- The left and top edges are included in the rectangle's area
- The right (left + width) and bottom (top + height) edges are excluded from the rectangle's area
This means that SF::IntRect.new(0, 0, 1, 1)
and
SF::IntRect.new(1, 1, 1, 1)
don't intersect.
SF::Rect
is a generic and may be used with any numeric type, but
for simplicity the instantiations used by SFML are aliased:
So that you don't have to care about the template syntax.
See also: SF.int_rect
, SF.float_rect
.
Usage example:
# Define a rectangle, located at (0, 0) with a size of 20x5
r1 = SF.int_rect(0, 0, 20, 5)
# Define another rectangle, located at (4, 2) with a size of 18x10
position = SF.vector2i(4, 2)
size = SF.vector2i(18, 10)
r2 = SF::IntRect.new(position, size)
# Test intersections with the point (3, 1)
r1.contains?(3, 1) #=> true
r2.contains?(3, 1) #=> false
# Test the intersection between r1 and r2
r1.intersects?(r2) #=> (4, 2, 16, 3)
Constructors#
.new(left : T, top : T, width : T, height : T)
#
Construct the rectangle from its coordinates
Be careful, the last two parameters are the width and height, not the right and bottom coordinates!
.new(position : Vector2(T), size : Vector2(T))
#
Construct the rectangle from position and size
Be careful, the last parameter is the size, not the bottom-right corner!
Methods#
#==(other : self) : Bool
#
Returns true if all corresponding coordinates of two rects are equal
#contains?(x : Number, y : Number) : Bool
#
Returns true if a point is inside the rectangle's area
#contains?(point : Vector2 | Tuple) : Bool
#
Returns true if a point is inside the rectangle's area
#intersects?(other : Rect(T)) : Rect(T) | Nil
#
Check the intersection between two rectangles
Returns the overlapped rectangle or nil if there is no overlap.