Entwickler-Ecke
Multimedia / Grafik - Wie lösche ich daten aus einem array?
mimi - Di 20.07.04 18:46
Titel: Wie lösche ich daten aus einem array?
Hallo,
ich schreibe im moment ein pacman clone und habe ein array mit "kis" und nun möchte ich einen level editor schreiben und bin jetzt bei der löschen funktion angelangt.
Jetzt möchte ich einfach die richtige ki löschen.dazu muss ich erstmal ermittelen welche ki die richtige ist und die lösche ich dann einfach:
KI:index merken
kis in einen neuen array zu weisen und den auslasen der den index hat und fertig.
naja so habe ich mir es gedacht aber leider geht es nicht.....
er setzt index flasch. mein code dazu ist:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| for i:=0 to HIGH(ki) do begin if (ki[i].x = x div mapX) and (ki[i].y = y div mapY) then begin index:=i; break; end; end; ShowMessage(IntToStr(I));
for i:=0 to HIGH(KI) do begin if i <> index then begin SetLength(k,high(k)+2); k[HIGH(K)]:=ki[i]; end; end;
SetLength(ki,0); SetLength(ki,high(k));
for i:=0 to HIGH(KI) do begin ki[i]:=k[i]; end; |
Keldorn - Di 20.07.04 18:53
Hallo
warum 2 arrays?
du hast deinen zu löschenden index, und kopierst einfach die Elemente, die dahinter liegen um eins nach vorne, in etwa so:
Delphi-Quelltext
1:
| for i:=zu_löschender_Index to länge_des_array-1 do Array[i]:=array[i+1]; |
anschließend noch das array um eins verringern.
Oder du nimmst eine Tlist oder Objectlist, die haben das löschen von elementen schon drin und sind in dieser beziehung einfacher zu handhaben.
Mfg Frank
mimi - Di 20.07.04 21:17
mein problem ist irngendwie schon das der index nicht stimmt :(
könnte ich mal versuchen deinen tipp, danke !!!!
mimi - Do 29.07.04 12:15
ich habe es mal so gemacht wie du es gesagt hast:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| procedure TBO.DeleteBall(Index:Integer); var i:Integer; begin for i:=Index to HIGH(BALL)-1 do begin BALL[i]:=BALL[i+1]; end;
if HIGH(BALL)-1 >= 0 then SetLength(BALL,high(ball)-1);
if HIGH(BALL) < 0 then ShowmEssage('OK');
end; |
nur jetzt bekomme ich folgendes fehlermeldung:
Zitat: |
---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt BreakOut.exe ist eine Exception der Klasse EAccessViolation aufgetreten. Meldung: 'Zugriffsverletzung bei Adresse 00418867 in Modul 'BreakOut.exe'. Lesen von Adresse 00069B98'. Prozess wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen.
---------------------------
OK Hilfe
---------------------------
|
warum ?
BenBE - Do 29.07.04 23:04
Zeile 10 muss heißen:
Delphi-Quelltext
1:
| SetLength(HBALL, Length(HBALL)-1); |
Dann sollte es funzen.
mimi - Fr 30.07.04 08:44
ich hätte nicht gedacht das es an lenght liegen würde, habe in der hilfe zwar geschaut, naja, jetzt gehts so wie gewütnscht !!!
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 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!