Entwickler-Ecke

Multimedia / Grafik - maussteuerung


axja - Mi 12.03.03 19:44
Titel: maussteuerung
hmm, kann mir zufällig wer helfen, oder sagen wo ich beißpiele bekomme?
ich möchte ein object dazu kriegen dass es sich immer in die richtung der maus bewegt, bis es bei ihr ankommt. wenn möglich solte es sich je weiter die maus weg ist desto schneller bewegen...
ich hab aber absolut keine idee wie ich das (vorallem ersteres) machen kann... vieleicht wer n par tips oder so? :D


Raphael O. - Mi 12.03.03 19:49

wo zeichnest du denn dein Objekt??
auf einem Image??


axja - Mi 12.03.03 21:48

si!


Raphael O. - Do 13.03.03 18:37

wenn du die Position von deinem Objekt auf dem Image weist, dann musst du bei image1.mousedown die Koordinaten des Klicks mit denen des Objekts vergleichen-> den Abstand ausrechen->daraus eine Geschwindigkeit errechnen->Objekt bewegen


axja - Do 13.03.03 19:59

ja, das ginge, danke für die idee, aber dazu brauche ich einen klick... ich möchte aber das es den cursor die ganze zeit verfolgt, wie diese desktop-katze die die ganze zeit hinter der maus herrent, kennst du? :)

aber danke schonmal, vieleicht noch ne idee?


mars - Do 13.03.03 20:00

Du könntest mit einem Timer die Mausposition abfragen.


Andreas Pfau - Do 13.03.03 20:34


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
var X, Y: Integer;

procedure TForm1.Timer1Timer(Sender:TObject);
begin
  If (X <> Mouse.CursorPos.X) Or (Y <> Mouse.CursorPos.Y) Then begin
    X := Mouse.CursorPos.X;
    Y := Mouse.CursorPos.Y;
    BildMitNeuenKoordinatenZeichnen();
  end;
end;


Oder du machst 'nen Hook. Aber wich würde den Timer arg empfehlen.


torstenheinze - Do 13.03.03 21:04

-1x timer (timer1)
-1x image (image2)



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:
procedure TForm1.FormCreate(Sender: TObject);
begin
form1.DoubleBuffered :=true;
end;


procedure TForm1.Timer1Timer(Sender: TObject);
var mouseX, mouseY, imageX, imageY, imageH,
    imageW, MovementX, MovementY,
    formx, formy: integer;
begin
imageh := image2.Height;
imagew := image2.Width;
formx := form1.Left + (imagew div 2)+3;
formy := form1.top + (imageh div 2) + 15;
mousex := mouse.CursorPos.x - formx;
mousey := mouse.CursorPos.y - formy;
imagex:= image2.Left;
imagey:= image2.top;
if imagex < mousex then
begin
movementx := (imagex - mousex) div 7;
imagex :=imagex - movementx;
end
else if imagex > mousex then
begin
movementx := (mousex - imageX) div 7;
imagex :=imagex + movementx;
end;
if imagey < mousey then
begin
movementy := (imagey - mousey) div 7;
imagey :=imagey - movementy;
end
else if imagey > mousey then
begin
movementy := (mousey - imagey) div 7;
imagey :=imagey + movementy;
end;

image2.Left := imagex;
image2.Top := imagey;

end;



der code ist net perfect, ich werde ihn noch verbessern


axja - Fr 14.03.03 15:39

JAA, das sind gute ideen, dankeschön! ich werd's gleich probieren!


axja - Fr 14.03.03 15:39

ps: viiiellen DANK!! :wink:


axja - Fr 14.03.03 16:09

hey, leute!
Habs mit nem timer probiert, das war's, es geht!!
danke schön! :D :)