NAME
Collision::2D::Entity - A moving entity. Don't use this directly.
DESCRIPTION
ATTRIBUTES
x,y,xv,yv
Absolute position and velocity in space. These are necessary if you want to do collisions through dynamic_collision
dynamic_collision($circ1, $circ2);
relative_x, relative_y, relative_xv, relative_yv
You shouldn't worry about these. Move along now.
Relative position and velocity in space. these are necessary if you want to do collisions directly through entity methods,
$circ1->_collide_circle($circ2);
In this case, both the absolute and relative position and velocity of $circ2 is not used. The relative attributes of $circ1 are assumed to be relative to $circ2.
METHODS
collide
my $collision = $self->collide ($other_entity, interval=>4);
Detect collision with another entity. $self must be normalized to $other. Takes interval as a parameter. Returns a collision if there is a collision. Returns undef if there is no collision.
With the collide method, the entity order is preserved. Consider this example:
my $collision1 = $panel->collide($droplet);
my $collision2 = $droplet->collide($panel);
If these objects collide, then its $collision1-
ent1> will be $panel
, and $collision2-
ent1> will be $droplet
.
intersect
my $t_or_f = $self->intersect ($other_entity, interval=>2.5);
Detect intersection (overlapping) with another entity. Takes interval as a parameter. Returns a collision if there is a collision. Returns undef if there is no collision.
interval
is optional. interval
is 1 by default.
Relative vectors and velocity are not considered for intersection.
normalize
You probably shouldn't use this directly. At all. Relative vectors are handled automatically in dynamic_collision
and in $ent1-
collide($ent2)>
$self->normalize($other); # $other isa entity
This compares the absolute attributes of $self and $other. It only sets the relative attributes of $self. This is necessary to call _collide_*($other) methods on $self.