Ver Mensaje Individual
  #3  
Antiguo 06-03-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Reputación: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Yo desaconsejo el uso de FreeAndNil; ya ha habido varios debates en torno al tema

El problema que tenes es otro

Por que liberar la memoria de un objeto que vas a volver a usar?

Sobre todo si estas haciendo juegos, en donde como usas la memoria (o como no la aprovechas) se termina volviendo un problema

Ten en cuenta que la creacion de objetos es una operacion con costo, y hay objetos que son mas pesados que otros (TImage es uno de ellos)

Yo haria algo similar a esto:

Código Delphi [-]
uses
  Graphics;

type
  TTrafico = class
  strict private
    FImage: TImage;
    FChocado: Boolean;
  private
    procedure SetChocado(const Value: Boolean);
  public
    constructor Create;
    destructor Destroy; override;

    function VerificarChoque(const ATop, ALeft: Integer): Boolean;
    property Chocado: Boolean read FChocado write SetChocado;
    property Imagen: TImage read FImage;
  end;

implementation

{ TTrafico }

constructor TTrafico.Create;
begin
  inherited Create;
  FImage := TImage.Create;
  FChocado := False;
end;

destructor TTrafico.Destroy;
begin
  FImage.Free;
  inherited;
end;

procedure TTrafico.SetChocado(const Value: Boolean);
begin
  FChocado := Value;
end;

function TTrafico.VerificarChoque(const ATop, ALeft: Integer): Boolean;
begin
  Result := ...
end;

Ahora tendrias una clase propia en lugar de una imagen suelta, en la cual podes agegar un monton de informacion de estado, comportamiento, incluso eventos, etc

En lugar de un array de TImage, ahora tendrias un array of TTrafico

En cada elemento del array, tendrias una clase la cual contiene a su vez una imagen, accesible desde una propiedad, y una variable de bandera (Boolean) para saber si "esta chocado o no"
Responder Con Cita