Entwickler-Ecke
Sonstiges (Delphi) - Ansprechen von Shapes, die durch Array erzeugt wurden
TiRoCkx - Fr 15.03.19 15:39
Titel: Ansprechen von Shapes, die durch Array erzeugt wurden
Hey liebe Programmierfreunde,
ich habe ein Problem. Ich programmiere Mensch ärgere dich nicht.
Ich habe am Anfang Shapes mittels eines Array erst durch den Quellcode erzeugt und ihnen dort Positionen durch eine Datenbank zugewiesen.
Das funktioniert reibungslos.
Das Problem kommt dann, wenn ich die Figuren setzen möchte. Ich übergebe den nächsten Left- und Topwert mittels einer Funktion. Danach habe ich schon die Position der Shape mit showmessage abgefragt, welche mir den korrekten Wert der nächsten Position wiedergibt...
ABER die Figur bewegt sich auf dem Feld nicht.
Kann mir jemand auf die Sprünge helfen?
Delete - Fr 15.03.19 15:53
- Nachträglich durch die Entwickler-Ecke gelöscht -
TiRoCkx - Fr 15.03.19 15:58
So erzeuge ich die Figuren
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45:
| type TForm2 = class(TForm) Panel1: TPanel; Field: TImage; private Shapes: array of TShape; public Madn: TMadn; end;
var Form2: TForm2; count: byte;
implementation
uses UFigure;
{$R *.dfm}
procedure TForm2.CreateShapes(n: word; wc: TWinControl); begin SetLength(Shapes, n); Field.Parent := Form2; while n > 0 do begin Shapes[n] := TShape.Create(Self); Shapes[n].Parent := wc; case n of 1,2,3,4: Shapes[n].Brush.Color := rgb(255,0,0); 5,6,7,8: Shapes[n].Brush.Color := RGB(255,216,0); 9,10,11,12: Shapes[n].Brush.Color := RGB(0,148,255); 13,14,15,16: Shapes[n].Brush.Color := RGB(58,196,0); end; Shapes[n].Shape := stcircle; Shapes[n].Height := 30; Shapes[n].Width := 30; Shapes[n].Left := UMadn.Start[n].X; Shapes[n].Top := UMadn.Start[n].Y; Shapes[n].Pen.Width := 3; Shapes[n].Visible := true; Shapes[n].Enabled := false; n := n-1; end; end; |
So setze ich sie dann ein, aber die Figuren auf dem Feld bewegen sich eben nicht.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| procedure TForm2.BtgoClick(Sender: TObject); var a,next,i: byte; begin a := 1 + (Madn.get_actplayer - 1)*4; next := 0; for i := 0 to 3 do if (Figure[a+i].currentposition = 0) and (next = 0) then next := a+i; showmessage(inttostr(next)); Figure[next].currentposition := 1; Shapes[next].Left := Madn.get_nx(next); showmessage(inttostr(Shapes[next+1].Left)); Shapes[next].Top := Madn.get_ny(next); Btgo.Enabled := false; end; |
Delete - Fr 15.03.19 16:07
- Nachträglich durch die Entwickler-Ecke gelöscht -
TiRoCkx - Fr 15.03.19 16:28
nein das hat sie nicht. Ich hab das alles überprüft.
Die currentposition ist dann 0, wenn die Figur nicht auf dem Feld ist. Da es hier ums einsetzen am Anfang des Spiels geht, ist next Position auf jeden Fall dann 1, da ja noch alle Figuren im Haus sind.
Das ist nicht der Fehler.
Delete - Fr 15.03.19 16:42
- Nachträglich durch die Entwickler-Ecke gelöscht -
TiRoCkx - Fr 15.03.19 16:59
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| function TMadn.get_nx(n: byte): integer; begin result := UMadn.play[Figure[n].currentposition].X; end;
function TMadn.get_ny(n: byte): integer; begin result := UMadn.play[Figure[n].currentposition].Y; end; |
Die beiden Funktionen geben einfach nur die X- und Y-werte der nächsten Position wider.
Aber eben auch die stimmen, da ich mir das alles als showmessage ausgeben lasse und sehe ja dass es eine andere Position widergibt, als die Figur auf dem Spielfeld hat.
Delete - Fr 15.03.19 17:22
- Nachträglich durch die Entwickler-Ecke gelöscht -
TiRoCkx - Fr 15.03.19 17:49
Es hat sich tatsächlich erledigt....
Es war mehr als einfach... Die Parent-Eigenschaft war das Problem...
Ich hab unter dem Field noch ein Panel liegen und Parent war aber die Form selbst. Jetzt habe ich Parent auf das Panel gesetzt und es geht.
Danke dir dennoch für deine eifrige Hilfe Frühlingsrolle! :D :wink:
MfG, TiRoCkx.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!