AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi [Andorra2D] Löschen von Sprites (Problem gelöst)
Thema durchsuchen
Ansicht
Themen-Optionen

[Andorra2D] Löschen von Sprites (Problem gelöst)

Ein Thema von Phill · begonnen am 25. Jan 2009 · letzter Beitrag vom 26. Jan 2009
Antwort Antwort
Phill

Registriert seit: 18. Dez 2008
11 Beiträge
 
#1

[Andorra2D] Löschen von Sprites (Problem gelöst)

  Alt 25. Jan 2009, 19:39
Hi DPler,
Ich arbeite nun gut 3Monate an einem Shoot-em-up, behilflich is mir dabei die grandiose Engine von Andorra 2D und nun bin ich auf ein Problem gestoßen, was glaube ich sehr simpel zu lösen sein müsste und ich staune das ich es während meiner Arbeit an dem Projekt noch nie brauchte aber es ist wies ist und hier mal ausführlich:

Ich habe eine ganze Reihe von TImageSprites die alle einer AdSpriteEngine unterworfen sind, Manche dieser TImageSprites beinhalten Grafiken des Interfaces (Spielzeit, Punkte, Leben, Levelanzeige etc) und andere TImageSprites währen zum Beispiel die feindlichen Schiffe.
Nun ist es der Fall das ich mehrere (selbstdefinierte TImagesprite-klassen (glaube man nennt das Records)) löschen möchte (.dead) aber andere nicht!...
ich weiß ich kann mit AdSpriteEngine.items.dead; ALLE Sprites killen und ich kann mit Adspriteengine.Items.Delete(integer); Das, je nach Integerwert, erste, zweite, dritte etc Sprite killen. Ich hatte Versucht eine zweite Spriteengine zu implementieren um alles was gelöscht werden kann in diese zweite zu packen und dann eben nur sie zu löschen, aber schon das implementieren einer zweiten SpriteEngine endete in Fehlermeldungen....

hoffe ich konnte erklären was ich meine. Danke im Vorraus
  Mit Zitat antworten Zitat
Benutzerbild von Codewalker
Codewalker

Registriert seit: 18. Nov 2005
Ort: Ratingen
945 Beiträge
 
Delphi XE2 Professional
 
#2

Re: [Andorra2D] Löschen von Sprites

  Alt 26. Jan 2009, 15:30
Die SpriteEngine bietet doch dafür eine Methode Items.Remove(Sprite) an.
Siehe auch in der Andorra-Doku: hier
  Mit Zitat antworten Zitat
Phill

Registriert seit: 18. Dez 2008
11 Beiträge
 
#3

Re: [Andorra2D] Löschen von Sprites

  Alt 26. Jan 2009, 15:41
Hallo Codewalker. Danke für den Tipp, nur habe ich den Befehl bereits probiert und habe folgendes Problem: wenn ich ein Sprite mehrfach verwende:

ShopGegner := TImageSprite.Create(adSpriteengine); with ShopGegner do begin x:=100; z:=22; end;
ShopGegner := TImageSprite.Create(adSpriteengine); with ShopGegner do begin x:=200; z:=22; end;
ShopGegner := TImageSprite.Create(adSpriteengine); with ShopGegner do begin x:=300; z:=22; end;
(er malt nun ein Bild an drei verschiedene Stellen

Nun löscht AdSpriteengine.items.remove(shopgegner) nur den letzten Sprite, also den bei x:=300, die andern bleiben erzahlten.

Das ist Problem nummer 1 und garnicht mal so schlimm, schlimmer ist jedoch das die meißten Sprites in Klassen zusammgefasst sind:

TGegner1 = class(TImageSprite) XSpeed,YSpeed,HP,AP:integer;
private protected procedure DoMove(TimeGap:double);override;
procedure DoShoot(Sprite: TSprite);
public constructor Create(AParent:TSprite);override; end;

AdSpriteengine.items.remove(TGegner1) geht leider nicht, ich weiß auch nicht wie ich die einzelnen Sprites der klasse anspreche



edit:

also ich seh grad mit viel mühe und schreib und rechenaufwand könnte man mein problem via form1.AdSpriteEngine.Items.Remove(Adspriteengine.G etSpriteAt(x,y)); lösen, aber das ist eigentlich nicht optimal, würde mich freuen wenn mir wer weiter hilft
  Mit Zitat antworten Zitat
Benutzerbild von Codewalker
Codewalker

Registriert seit: 18. Nov 2005
Ort: Ratingen
945 Beiträge
 
Delphi XE2 Professional
 
#4

Re: [Andorra2D] Löschen von Sprites

  Alt 26. Jan 2009, 16:49
ShopGegner := TImageSprite.Create(adSpriteengine); with ShopGegner do begin x:=100; z:=22; end;
ShopGegner := TImageSprite.Create(adSpriteengine); with ShopGegner do begin x:=200; z:=22; end;
ShopGegner := TImageSprite.Create(adSpriteengine); with ShopGegner do begin x:=300; z:=22; end;

Das ist imho ganz schlechter Programmierstil. Wenn du auf das Objekt nacher noch zugreifen willst, dann behalte Dir auch eine Referenz. Verwalte die ShopGegner in einem Array und du kannst problemlos auf jeden einzelnen zugreifen.
  Mit Zitat antworten Zitat
Phill

Registriert seit: 18. Dez 2008
11 Beiträge
 
#5

Re: [Andorra2D] Löschen von Sprites

  Alt 26. Jan 2009, 17:06
Hmpf ja das macht natürlich Sinn^^ danke.
Kannst du mir noch dabei helfen die (Klassen? Records?) einzeln zu löschen? (Weiß nicht genau wie man das nennt, hab 2 posts über dem hier nen Beispiel dafür).

Danke

edit: habe einige Teile des Programms so umgeschrieben dass ich mit der Spriteengine.items.remove() funktion arbeiten kann. danke für die Hilfe
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:35 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz