Einzelnen Beitrag anzeigen

TitanNano
(Gast)

n/a Beiträge
 
#1

TImage Top stimmt nicht...

  Alt 15. Nov 2011, 16:39
Hallo,

Ich habe diese kleine Funktion:
Delphi-Quellcode:
procedure TChar.walkTimerRun(Sender :TObject);
begin
  if(self.walkPos.X < self.finalPos.X) and not(self.X = 'r')then
  begin
    self.walkPos.X:= self.walkPos.X+4;
    self.layer.Left:= self.walkPos.X;
    TCObjectControler.walk_rigth(self);
    self.X:= 'l';
    end else if(self.walkPos.X > self.finalPos.X) and not(self.X = 'l')then
    begin
      self.walkPos.X:= self.walkPos.X-4;
      self.layer.Left:= self.walkPos.X;
      TCObjectControler.walk_left(self);
      self.X:= 'r';
      end else if(self.walkPos.Y < self.finalPos.Y) and not(self.Y = 'u') then
      begin
        self.walkPos.Y:= self.walkPos.Y+4;
        self.layer.Top:= self.walkPos.Y;
        TCObjectControler.walk_down(self);
        self.Y:= 'd';
        end else if(self.walkPos.Y > self.finalPos.Y) and not(self.Y = 'd') then
        begin
          self.walkPos.Y:= self.walkPos.Y-4;
          self.layer.Top:= self.walkPos.Y;
          TCObjectControler.walk_up(self);
          self.Y:= 'u';
          end else
          begin
            self.walkTimer.Enabled:= false;
            showmessage(IntToStr(self.layer.Top)+' == '+IntToStr(self.finalPos.Y));
            self.walkTimer.Enabled:= false;
            self.layer.Picture.Bitmap.Assign(nil);
            self.stand.GetBitmap(0, self.layer.Picture.Bitmap);
            self.Y:= '';
            self.X:= '';
            end;
  end;
Also, ich bewege das Bild erst nach rechts oder links und dann nach oben oder nach unten bis es die gewünschte Position erreicht. Die X Koordinaten stimmen auch immer, aber es erreicht nie ganz die Y Koordinate. Das heißt, die Message Box am ende gibt z.b. aus:

405 == 400

also sollte das Bild ja sogar ein bisschen drüber hinaus "fahren" aber sie bleibt immer ca. 20 Pixel vorher stehen
Das Bild ist auf einem Pannel:
Delphi-Quellcode:
tom:= TChar.Create(Form1);
tom.layer.Parent:= Form1.haus;
Die Create Funktion:
Delphi-Quellcode:
constructor Tchar.Create(AOwner: TComponent);
Begin
Inherited Create(AOwner);
//layer
layer:= TImage.Create(AOwner);
layer.Height:= 170;
layer.Width:= 100;
layer.Stretch:= true;
layer.Transparent:= false;
//stand
stand:= TImageList.Create(AOwner);
//walkLeft
walkLeft:= TImageList.Create(AOwner);
//walkRight
walkRigth:= TImageList.Create(AOwner);
//walkUP
walkUp:= TImageList.Create(AOwner);
//walkDown
walkDown:= TImageList.Create(AOwner);
//walkTimer
walkTimer:= TTimer.Create(AOwner);
walkTimer.OnTimer:= walkTimerRun;
walkTimer.Enabled:= false;
walkTimer.Interval:= 100;
//standTimer
standTimer:= TTimer.Create(AOwner);
standTimer.Enabled:= false;
end;
Die Koordinaten bekommen ich von der Mausposition:
Delphi-Quellcode:
self.walkTo(tom, Sender.ScreenToClient(Mouse.CursorPos).X, Sender.ScreenToClient(Mouse.CursorPos).X);
  
procedure TObjectControl.walkTo(objekt : TChar; posX, posY : integer);
begin
  objekt.walkPos.X:= objekt.layer.Left;
  objekt.walkPos.Y:= objekt.layer.Top;
  objekt.finalPos.X:= posX;
  objekt.finalPos.Y:= posY;
  objekt.walkTimer.Enabled:= true;
end;
Hat jemand eine Ahnung was ich falsch gemacht habe oder wieso das so ist??

mfg. TitanNano
  Mit Zitat antworten Zitat