AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Andorra 2d Klasseninstanzen (Sprites)
Thema durchsuchen
Ansicht
Themen-Optionen

Andorra 2d Klasseninstanzen (Sprites)

Ein Thema von Noobmaster · begonnen am 31. Jul 2010 · letzter Beitrag vom 2. Aug 2010
Antwort Antwort
Noobmaster

Registriert seit: 18. Jul 2010
114 Beiträge
 
FreePascal / Lazarus
 
#1

Andorra 2d Klasseninstanzen (Sprites)

  Alt 31. Jul 2010, 13:14
Hallo Leute!
Wie kann ich auf einzelne Instanzen einer von TImageSprite abgeleiteten Klasse zugreifen?
Delphi-Quellcode:
          for i:=1 to Kugelanzahl do
          begin
               with TKugel.Create(AdSpriteEngine) do
               begin
                    Image := AdImageList.Find('Kugel'+IntToStr(i));
                    Nummer := i;
               end;
          end;
Ich möchte also jetzt zum Beispiel schreiben: Kugel1.X := Kugel2.X - Kugel3.X
Aber wie greife ich auf Kugel1.X zu?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Andorra 2d Klasseninstanzen (Sprites)

  Alt 31. Jul 2010, 13:15
Schlechte Lösung: FindComponent()
Besser: Ablage der Kugeln in Array oder Liste
Markus Kinzler
  Mit Zitat antworten Zitat
Noobmaster

Registriert seit: 18. Jul 2010
114 Beiträge
 
FreePascal / Lazarus
 
#3

AW: Andorra 2d Klasseninstanzen (Sprites)

  Alt 31. Jul 2010, 13:17
Wie muss ich dann obiges Beispiel abwandeln, um die Instanzen in Arrays abzulegen?
Ich habe bisher Klasseinstanzen immer mit Arrays erstellt, aber Andorra 2d verwirrt mich immer ein bisschen.
Kugel[1] := TKugel.Create(AdSpriteEngine) ?

Geändert von mkinzler (31. Jul 2010 um 13:25 Uhr) Grund: Delphi-Tag eingefügt
  Mit Zitat antworten Zitat
Noobmaster

Registriert seit: 18. Jul 2010
114 Beiträge
 
FreePascal / Lazarus
 
#4

AW: Andorra 2d Klasseninstanzen (Sprites)

  Alt 31. Jul 2010, 13:24
Gut hat geklappt, danke!
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#5

AW: Andorra 2d Klasseninstanzen (Sprites)

  Alt 31. Jul 2010, 14:10
Bitte nichts in ein zusätzliches Array speichern! Du kannst einfach über SpriteEngine.Items darauf zugreifen.

Beispiel:
Delphi-Quellcode:
var
  k: TKugel;

for i := 0 to SpriteEngine.Items.Count - 1 do
begin
  if SpriteEngine.Items[i] is TKugel then
  begin
    k := TKugel(SpriteEngine.Items[i]);
    k.TuWasMitDerKugel();
  end;
end;
Andreas
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein
  Mit Zitat antworten Zitat
Noobmaster

Registriert seit: 18. Jul 2010
114 Beiträge
 
FreePascal / Lazarus
 
#6

AW: Andorra 2d Klasseninstanzen (Sprites)

  Alt 31. Jul 2010, 17:25
Dumme Frage: Was passiert denn, wenn man trotzdem in einem weiteren Array abspeichert?
Ich mein, ob ich jetzt k als Array mache und dort alle Klasseninstanzen abspeichere oder alle Klasseninstanzen sofort als Array erstelle macht doch im Prinzip keinen Unterschied. Ich finde, dass letztere Lösung sogar die einfachere und elegantere Lösung ist. Sollte ich mich irren - so gut kenne ich mich da ja nicht aus - dann sag bitte bescheid, wieso man das nicht machen sollte.
Danke

Geändert von Noobmaster (31. Jul 2010 um 17:27 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#7

AW: Andorra 2d Klasseninstanzen (Sprites)

  Alt 31. Jul 2010, 17:57
Problem ist, dass du dich zusätzlich darum kümmern musst die Referenzen in deinem Array zu löschen, sobald du ein Sprite entfernst - mit der anderen Methode ist sichergestellt, dass du auch nur auf Sprites zugreifen kannst, die noch existieren.
Andreas
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein
  Mit Zitat antworten Zitat
Noobmaster

Registriert seit: 18. Jul 2010
114 Beiträge
 
FreePascal / Lazarus
 
#8

AW: Andorra 2d Klasseninstanzen (Sprites)

  Alt 1. Aug 2010, 10:29
Dass heißt, dass ich die Anstanzen auch freigeben muss, also Kugel[x].free ?
Dabei bekomme ich aber nur Fehlermeldungen am Ende (SIGSEGV)

Geändert von Noobmaster ( 1. Aug 2010 um 10:41 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#9

AW: Andorra 2d Klasseninstanzen (Sprites)

  Alt 1. Aug 2010, 11:08
Nein, wie im Tutorial geschrieben, solltest du Sprites niemals mit Free, sondern mit der Funktion "Dead" freigeben.

Ich meinte nur, dass wenn du in deinem Array noch eine Referenz auf das Sprite-Objekt hast, du aber das Sprite mit
Dead freigibst, das Sprite zwar nicht mehr existiert, in deinem Array jedoch noch eine Referenz auf die Speicherstelle ist, an der mal das Sprite war. Versuchst du jetzt dennoch darauf zuzugreifen, bekommst du einen Zugriffsfehler.

Du musst dich also nochmal explizit darum kümmern, die Referenz in deinem Array auf nil zu setzen oder das Array ein Element zu verkürzen und alle anderen Elemente nach zu rücken etc.

Verwendest du gleich die Liste der Sprites hast du dieses zusätzliche Problem nicht.

Sonst spricht eigentlich nichts gegen das Array, außer dass es dein Programm fehleranfälliger macht, wenn du nicht genau weißt, was du eigentlich machst.
Andreas
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein
  Mit Zitat antworten Zitat
Noobmaster

Registriert seit: 18. Jul 2010
114 Beiträge
 
FreePascal / Lazarus
 
#10

AW: Andorra 2d Klasseninstanzen (Sprites)

  Alt 2. Aug 2010, 09:54
Wenn ich aber nicht mehr auf die Arrays zugreifen muss, wenn die Sprites nicht mehr existieren, dann sollte ich doch eigentlich keine Probleme haben, oder?
In Zukunft werde ich natürlich die von dir vorgeschlagene Methode verwenden, aber für mein derzeitiges Projekt würden die Arrays für mich ausreichen.
  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 02:57 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