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