Autor Beitrag
IhopeonlyReader
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 600
Erhaltene Danke: 23


Delphi 7 PE
BeitragVerfasst: Sa 21.04.12 13:38 
guten Tag,
ich weiß aus der Überschrift kann man nicht viel erfahren. Das liegt daran das ich noch ein z8iemlicher Anfänger bin und mich Programm für Programm durch einige Foren lese und immer weiter komme... nun bin ich bei einem Towerdefense Spiel angekommen... theoretisch habe ich mir überlegt wie es geht, jedoch fehlt es mir an der Praxis.

Ich würde gerne wissen, wie ich einen Constructor immer wieder aufrufe und den alten bestehen lasse, alles durch ein und denselbem Button. Beispiel;
ich drücke auf einen button und ein Kreis bewegt sich von links oben nach rechts oben, drück ich nochmal auf den button soll der alte kreis sich weiter nach rechts bewegen, aber es soll zusätzlich ein neuer kreis erscheinen, der für sich selbst läuft (auch von links nach rechts) die Y Koordinaten (und Start X) koordinate werden per Edit festgelegt.

Istz es möglich ohne eine andeuernde Schliefe zu machen??
(ich hatte es bis jetzt so gedacht)(a1,a2.. sind entsprechend uzgeweisen bei den var miz a1, a2...:TForm1;
und x ist eine einfache integer Zahl, variable ist eine integer zahl (begintn mir 1) also var variable:integer=1;)

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure TForm1.Button1click(Sender: TObject);
begin
x:= x+1;
if x=1 then
a1.schusscreate(Mausposx,Mausposy);

if x=2 then
a2.schusscreate(Mausposx,Mausposy);
... (immer so weiter)
end;


und im Timer dann
ausblenden Delphi-Quelltext
1:
2:
if x>=1 then a1.schussbewegen;
if x>=2 then a2.schussbewegen;...


kann man das, ohne diese Schleife machen? irgendwie mit a[x].schusscreate(Mausposx,Mausposy);
und im timer dann entsprechend while variable<x begin
a[variable].schussbewegen(Mausposx,Mausposy);
variable:=variable+1;
end;

Moderiert von user profile iconMartok: Delphi-Tags hinzugefügt
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Sa 21.04.12 15:52 
Erst mal herzlich willkommen im Forum.
Der Konstruktor ist Teil der Klasse, die Klasse selbst wird nie verändert.
Über den Konstruktor bekommst Du Objekte.
Das kann man sich vorstellen wie MeinKuchen := MeinRezepte.Backe.
Du kannst Dir beliebig viele Instanzen erstellen um mit diesen etwas zu tun wirst Du um eine Schleife nicht herumkommen, allerdings keine Schleife für die Aktion sondern eine über Deine Objekte.
Deine Objekte könntest könntest Du in einem Array verwalten, anbieten würde sich hierfür aber eine Liste, oder spezieller hier gleich eine Objektliste. Wie bequem damit zu arbeiten ist hängt ein wenig von Deiner Delphiversion ab, ab D2009 könntest Du Generics verwenden, quasi Objektlisten die schon wissen was für eine Sorte Objekt sie verwalten.
Ich gehe jetzt mal davon aus daß Du Delphi < 2009 verwendest.

Als erstes würdest Du eine Objektliste anlegen.

FObjectlist := TObjectlist.Creste;

diese musst Du am Schluss wieder freigeben, hierbei werden standardmäßig alle Objekte die Du hinzugefügt hast ebenfalls freigegeben (da kannst dies über die Eigenschaft ownsobject umschalten, musst dann aber Deine Objekte sebst wieder frei geben)


Das Erzeugen funktioniert grob so

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
var
DummyVar:TMyObject;
begin
   DummyVar := TMyObject.Create;
   DummyVar.Irgendwas ...
   FMyObjectList.Add(DummyVar);  
end;


in Deinem Timer benötigst Du jetzt eine Schleife
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
var
 i:Integer;
 DummyVar:TMyObject;
begin 
  For i := 0 to FMyObjectList.Count - 1 do
  begin
          DummyVar:=TMyObject(FMyObjectList[i]);
          DummyVar.RechneUndZeichnewasauchimmer        
        end;
end;


Objekte die Du nicht mehr benötigst kannst Du per FMyObjectList.Delete(Nr) entfernen

Das nur als grober Anriss...

EDIT

Ich habe ein kleines Beispiel angehängt ...
Einloggen, um Attachments anzusehen!
_________________
Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
IhopeonlyReader Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 600
Erhaltene Danke: 23


Delphi 7 PE
BeitragVerfasst: Sa 21.04.12 16:22 
user profile iconbummi hat folgendes geschrieben Zum zitierten Posting springen:
Ich gehe jetzt mal davon aus daß Du Delphi < 2009 verwendest.

das ist richtig, ich benutze Delphi 7 PE !

Und danke für dein beigeletegtes Project, jedoch fehlt Form 2 :DD (so hab ich das aus der Fehlermeldung gelsen)

Fehlermeldung

Moderiert von user profile iconNarses: Zitat kenntlich gemacht.

Moderiert von user profile iconNarses: Beiträge zusammengefasst

user profile iconbummi hat folgendes geschrieben Zum zitierten Posting springen:
Erst mal herzlich willkommen im Forum

danke ;)

user profile iconbummi hat folgendes geschrieben Zum zitierten Posting springen:

Das Erzeugen funktioniert grob so

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
var
DummyVar:TMyObject;
begin
   DummyVar := TMyObject.Create;
   DummyVar.Irgendwas ...
   FMyObjectList.Add(DummyVar);  
end;


in Deinem Timer benötigst Du jetzt eine Schleife
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
var
 i:Integer;
 DummyVar:TMyObject;
begin 
  For i := 0 to FMyObjectList.Count - 1 do
  begin
          DummyVar:=TMyObject(FMyObjectList[i]);
          DummyVar.RechneUndZeichnewasauchimmer        
        end;
end;


Objekte die Du nicht mehr benötigst kannst Du per FMyObjectList.Delete(Nr) entfernen



dann muss ich anstatt das (unübersichtlich) im Quelltext zu schreiben das in der FMyobjectlist reinmachen?
vom aufwand sehe ich da keinen unterschied... gibt es keine möglichkeit mit steigernde variable auch einen immer einen neues Object per Constructor aufzurufen? (OHNE schleife)
Einloggen, um Attachments anzusehen!
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Sa 21.04.12 16:43 
Die Meldung kannst Du ignorieren, liegt and Deiner Delphiversion, das Projekt sollte bis auf das Res das neu erstellt wird komplett sein.
Die "steigende Variable" ergibt sich beim einfügen in die Objectlist (Liste.Count).
Ich wüsste keinen Weg es noch einfacher umzusetzen.

_________________
Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
IhopeonlyReader Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 600
Erhaltene Danke: 23


Delphi 7 PE
BeitragVerfasst: Sa 21.04.12 17:51 
user profile iconbummi hat folgendes geschrieben Zum zitierten Posting springen:
Die Meldung kannst Du ignorieren, liegt and Deiner Delphiversion, das Projekt sollte bis auf das Res das neu erstellt wird komplett sein.
Die "steigende Variable" ergibt sich beim einfügen in die Objectlist (Liste.Count).
Ich wüsste keinen Weg es noch einfacher umzusetzen.


[Fehler] BallProject.dpr(11): Undefinierter Bezeichner: 'MainFormOnTaskbar'

Mainformontaskbar? was ist das? sowohl ich als auch meine delphi version kennen das noch nicht :D <- neuling ;)

Edit: Programm funzt und ich bin gerade dabei das zu verstehen, aber ich habe jetzt die Frage, kann jede Position (jedes Balles) bestimmt werden?
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: So 22.04.12 00:27 
Ja X und Y, wie man an die Bälle kommst siehst Du z.B. dort wo b := TBall(BL[i]);
steht

_________________
Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
IhopeonlyReader Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 600
Erhaltene Danke: 23


Delphi 7 PE
BeitragVerfasst: So 22.04.12 14:00 
user profile iconbummi hat folgendes geschrieben Zum zitierten Posting springen:
Ja X und Y

x und Y des Mittelpunktes des Kreises? oder beide X und beide Y Koordinaten? oder die X ganz libnks und die Y ganz oben?
oder kommt es darauf an, wie ich den Ball zeichnen lasse?
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: So 22.04.12 14:50 
siehst Du wenn Du Dir die Setter/Getter von Top und Left anschaust ....

_________________
Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
IhopeonlyReader Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 600
Erhaltene Danke: 23


Delphi 7 PE
BeitragVerfasst: Mo 23.04.12 16:02 
user profile iconbummi hat folgendes geschrieben Zum zitierten Posting springen:
siehst Du wenn Du Dir die Setter/Getter von Top und Left anschaust ....

Setter und Getter? sowas wie property?
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Mo 23.04.12 17:23 
Die Prozeduren / Funtionen der Properties ja ..

_________________
Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS