Also ich will/mache es so:
Ich habe ein Set:
Delphi-Quellcode:
TCollisionKind = (ckNone, ckLeft, ckTop, ckRight, ckBottom);
TCollisionPoints = Set of TCollisionKind;
Ist z.B ckRight im Set dann kann der Spieler nicht mehr nach rechts gehen:
Delphi-Quellcode:
var FCollision: TCollisionPoints;
if (GetAsyncKeyState(VK_RIGHT) < 0) and (not (ckRight in FCollision)) then
begin
// ...
end;
In TTestSprite (mein Spieler) DoCollision:
Delphi-Quellcode:
procedure TTestSprite.DoCollision(Sprite: TSprite; var Done: boolean);
begin
inherited DoCollision(Sprite,Done);
FCollision := GetCollisionPoints(Sprite);
=>
Delphi-Quellcode:
function TTestSprite.GetCollisionPoints(
ASprite: TSprite): TCollisionPoints;
begin
// Nix machen wenn man mit dem Hintergrund kollidiert oder mit sich selbst
if (ASprite is TBackGroundSprite) or (ASprite is TTestSprite) then
exit;
Result := FCollision;
if (X + Width >= ASprite.X) and (Y + Height >= ASprite.Y) and (Y <= ASprite.Y + ASprite.Height) then
Result := Result + [ckRight]
else
Result := Result - [ckRight];
//...
end;
Ich hoffe das sind genug Infos
Gruß
Neutral General
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."