TDummySprite inherits from TComponentEx which implements the Observable/Observer pattern.
So for example bubbles are solid temporally so any enemy or hero itself can be on top of them, but since a bubble can suddenly explode, the sprites needs to be informed in order to remove the reference, this is how I did it:
procedure TGameSprite.SetCarryTile(aTile: ISprite);
begin
if FCarryTile = aTile then
Exit;
TriggerSpring(aTile);
TriggerBalls(aTile);
StopJumping;
if aTile <> nil then
begin
//So for instance if a sprite is on top of a bubble and this bubble explodes (it dies), sprite is informed and can react
(aTile as IObservable).AddObserver(self);
Y := GetContactPlatformY(Gravity, aTile);
if Gravity = gDown then
Y := Y - Height;
if State = ssFalling then
State := ssWalking;
end else
begin
HorizontalSpeed := 0;
VerticalSpeed := 0;
RestoreSpeeds;
end;
FCarryTile := aTile;
end;
And then override the method Update()
procedure TGameSprite.Update(aMessage: TMessage);
begin
inherited;
if aMessage.Sender = CarryTile as TObject then
CarryTile := nil;
end;
And there you can update your pointer to nil.
No comments:
Post a Comment