Autor Beitrag
mimi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: So 20.02.05 12:18 
Hallo,
habe ein seltsammn problem, mit meiner funktion:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
procedure TGame.MovePlatteX(Index:Integer);
var
  obj:TOBJTyp;
  r:integer;
begin
  with Walls[index] do begin
    r:=MovePlatten[Walls[index].Index].richtung;

{    if MovePlatten[Walls[index].Index].richtung = rechts then begin
      obj:=GetObj(x+rechts,y,w,h,0);
      if obj.f = Fest then
//        r:=Lings
    end
    else begin
    end;}


   ShowMessage('OK');
 //   if r = rechts then x:=x+rechts;
//    if r = lings then  x:=x+lings
  end;
end;

ich habe bei der ShowMessage ein haltepunkt gemacht um zu sehen was in r steht da das verhalten der plate fehrlerhaft war, sie fuhr umme rnach lings und nicht nach rechts.
in r steht -1 -> Falsch da müsste doch auch +1 stehen oder nicht ?
und in
"MovePlatten[Walls[index].Index].richtung steht +1" -> richtig

_________________
MFG
Michael Springwald, "kann kein englisch...."
Holgerwa
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 325

WIN XP Pro, Vista Business
Delphi 7 Pro, BDS 2006 Pro
BeitragVerfasst: So 20.02.05 12:36 
Hallo,

so, mit den Kommentaren, wie der Source-Code jetzt aussieht, würde r:=... ja garnicht ausgeführt werden, sondern vom Compiler sofort wegoptimiert, richtig?
r als lokale Variable wird später nicht mehr verwendet, deshalb ist (wie gesagt, mit den Kommentaren) die Anweisung für den Compiler ohne Sinn.
Dann müßte aber nach meiner Erfahrung bei einem Breakpoint bei ShowMessage der Wert von r ein "inaccessable value" sein.

Das war nur so als Anmerkung, ich denke mal, daß Du den Code vorher ohne die Kommentare hattest, und es trotzdem nicht funktioniert.

Wenn die Kommentare wieder weg sind, als r wirklich wieder verwendet wird, was passiert denn, wenn Du einen Breakpoint auf die Anweisung r:=... setzt, und Dir dann erstmal VOR der Ausführung der Anweisung, und dann (mit F8) NACH der Ausführung die Werte von r ansiehst?

Holger
mimi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: So 20.02.05 15:12 
dann auch....
das ist ganz seltsamm: wenn ich r mit einem "festen" wert installisire z.b. mit +1 dann steht im debugger auch +1 drin mache ich das so wie jetzt steht da -1 obwohlda eigentlich +1 stehen sollte. das ist ja das was ich nicht verstehe wenn.

nochmal:
wenn ich MovePlatten[Walls[index].Index].richtung unter strg + f7 einkopiere steht da +1 und wenn ich mir jetzt r anschaue stetht da -1 obwohl r nur einmal gesetzt wird und zwar(bei mir) in der 7 zeile.

Edit:
ich habs ebend nochmal getestet es hat was hiermier zu tuen MovePlatten[Walls[index].Index].richtung wo ich r installisiere....

_________________
MFG
Michael Springwald, "kann kein englisch...."
mimi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: So 20.02.05 15:21 
das wird immer besser:
Inzwischen kann ich mir r nicht mehr im debugger ansehen. Aber ich habs mir mit ShowMessage angeschaut und da steht
bei MovePlatten[Walls[index].Index].richtung -1 drin obwohl ich sie mit +1 belget habe es ist also ein fehlr beim erstellen der fehler muss hier sein:
ausblenden 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:
procedure TGame.AddMoveWalls(richtung,SpeedCount,ctc,rxCount,lxCount,wm,m:Integer);
begin
  SetLength(MovePlatten, high(MovePlatten)+2);
  ShowMessage(IntToStr(richtung));
  MovePlatten[high(MovePlatten)].richtung:=richtung;
  MovePlatten[high(MovePlatten)].CTC:=10;
  MovePlatten[high(MovePlatten)].SpeedCount:=4;
  MovePlatten[high(MovePlatten)].rxCount:=40;
  MovePlatten[high(MovePlatten)].lxCount:=40;
  MovePlatten[high(MovePlatten)].wm:=wm;
  MovePlatten[high(MovePlatten)].m:=m;

  MovePlatten[high(MovePlatten)].Speed:=0;
  MovePlatten[high(MovePlatten)].TC:=0;
  MovePlatten[high(MovePlatten)].LxI:=0;
  MovePlatten[high(MovePlatten)].RxI:=0;
  MovePlatten[high(MovePlatten)].OI:=0;
  MovePlatten[high(MovePlatten)].UI:=0;

  MovePlatten[high(MovePlatten)].TimeGo:=False;                
end;
//und so  rufe ich diese funktion auf:
 //richtung,speedcount,ctc,rxCount,lxCount,wm,m
  AddMoveWalls(rechts,10,10,40,40,none,none);

_________________
MFG
Michael Springwald, "kann kein englisch...."
mimi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: So 20.02.05 15:28 
HABE DEN FEHLER gefunden ist lag an:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
// Falsch
  with Walls[index] do begin
    r:=MovePlatten[Walls[index].Index].richtung;
..
// richtig
  with Walls[index] do begin
    r:=MovePlatten[Index].richtung;
..

aber warum ???

_________________
MFG
Michael Springwald, "kann kein englisch...."
Kroni
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 720

Win 98, Win ME, Win2k, Win XP
D3 Pro
BeitragVerfasst: So 20.02.05 15:46 
wegen dem with walls[index] do
du benutztest ja vorher ein movePlatten[walls[index].index].richtung
da du oben aber shcon ein with walls[index] stehtn hast, und sich das index auf das walls[index] bezieht, brauchste das ja nimmer dahin schreiben!
wenn du ein with form1.canvas do da stehen hast, schreibst du ja uach nicht mehr unter das do with form1.canvas do form1.canvas.line. irgendwas, dann schreibst ud ja auch nur
ausblenden Delphi-Quelltext
1:
with form1.canvas do line.irgendwas					
mimi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: So 20.02.05 15:55 
ja aber bei mir hatte das einen grund und zwar folgnder:
ich nutze weil arrays in einem stehen alle obj die ist gibt egal welche typ und in den zwei array sthet die obj eigenschaften drin die das obj erst ausmachen z.b.

obj:array of TOBJ // std.
moveplatte: array of TMovePlatte;

und TOBJ hat jetzt eine eigenschaft -1 und die zweite lieste(moveplatte) kann auch kleiner sein als die erste... deshalb....

_________________
MFG
Michael Springwald, "kann kein englisch...."