Okay, dann werde ich wohl eher die Bilder auf eine Größe bringen.
Wo wir gerade bei Größe sind:
Kann ich irgendwie sagen, wann zwei Sprites kolidieren?
Weil ich habe einen Diamanten und eine schmale Person. Nun kolidieren die schon, sobald das eine Sprite das andere berührt.
Außerdem bekomme ich jetzt eine
AV. Ich weiß zwar wie ich die auslöse, habe aber keine Ahnung, wie ich verhindere, dass sie ausgelöst wird ohne dabei den Auslöser zu entfernen. xD
Also ich habe mehrere Sprite Klassen:
Delphi-Quellcode:
TFrInteractiveObject = clas(TImageSprite);
TFrPlayer = class(TFrInteractiveObject);
Wenn nun ein Objekt vom Typ TFrPlayer sich bewegt rufe ich "Collision" auf und damit auch "DoCollision". Dort überprüfe ich, ob das Objekt, mit dem es kolidert von TFrInteractiveObject ist.
Nun bewege ich das weiter (wie die Person), und teste dann, ob das Objekt mir irgendwas koldiert (z.B. einer Wand).
Wenn ich die zweite Überprüfung entferne funzt alles, ansonsten bekomme ich eine
AV, und bleibt in folgender Funktion hängen (Zeile 14).
Delphi-Quellcode:
procedure TSprite.Collision2;
var
i: Integer;
begin
//Cancel if this sprite doesn't support collisions.
if CanDoCollisions then
begin
if (Self<>FEngine.FCollisionSprite) and
OverlapRect(FEngine.FCollisionRect,BoundsRect) and
TestCollision(FEngine.FCollisionSprite) then
begin
FEngine.FCollisionCount := FEngine.CollisionCount + 1;
FEngine.FCollisionSprite.DoCollision(self, FEngine.FCollisionDone);
if FEngine.FCollisionSprite.Deaded or (not FEngine.FCollisionSprite.CanDoCollisions) then
begin
FEngine.CollisionDone := true;
end;
end;
if not FEngine.FCollisionDone then
begin
for i := 0 to FList.Count - 1 do
begin
FList[i].Collision2;
if FEngine.CollisionDone then
begin
break;
end;
end;
end;
end;
end;
MfG
xZise