Man kann vermutlich besser was dazu sagen, wenn du schon mal einen gewissen Ansatz hast, an dem man werkeln kann. Versuch dich nur gleich von Anfang an von der (weit verbreiteten) Vorstellung zu lösen, dass ein 2D-Spiel am besten aus 5000 TImages bestehen sollte
. "Richtig" ginge man es so an, dass man zunächst eine Basisklasse hat, die erstmal alles an Eigenschaften kapselt, die ein "Ding" im Spiel haben muss. Etwa sowas
Delphi-Quellcode:
type
TGameEntitiy = class(TObject)
private
....
public
property Position: TVector;
property Rotation: Single;
property BoundingBox: TBoundingBox; // = record von 4 TVectors, ähnlich TRect
property IsSolid: Boolean;
property Sprite: TBitmap;
property LocallyRotatedSprite: TBitmap;
end;
Davon lassen sich dann alle weiteren Entitätstypen ableiten, und haben gleich alles was für Spiellogik und Anzeige nötig ist huckepack. Zum Zeichnen riecht dann nachher quasi schon sowas:
Delphi-Quellcode:
procedure TDisplayForm.Paint;
var
entity: TGameEntity;
begin
ClearCanvas;
DrawBackground;
foreach entity in AllGameEntities do
if entity.IsVisibleInRect(DisplayForm.ClientRect) then
entity.DrawRotatedAndCentered({to} DisplayForm.Canvas, {at center} FormCenter);
end;
Alles natürlich Pseudomethoden ohne Ausformulierung, da die ja eben ganz maßgeblich dann von dem Spiel und den sonstigen Gegebenheiten abhängen. Aber das wäre ein sehr vereinfachtes, ganz allgemeines Gerüst.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)