| Autor |
Beitrag |
J:org
      
Beiträge: 17
|
Verfasst: Mo 01.12.03 12:19
Hallo zusammen,
bisher kann ich mein bild wild auf dem form bewegen jedoch sollte das ganze nun in eine art raster gesteckt werden, wie auf einem schachbrettartigen feld eben.
sprich das image soll zB. nur 50 pixel nach vorne oder 60 quer oder 50 rechts etc.
ist mein ansatz richtig oder würdet ihr dies total anders realisieren?
eine andere möglichkeit wäre natürlich das image anklicken, dann das entsprechende feld anklicken und dann wandert die figur. wäre das so einfacher?
mit welchen functionen geht sowas?
vielen dank!
J:org
|
|
Andreas Pfau
      
Beiträge: 997
|
Verfasst: Fr 05.12.03 21:24
Hallo,
welcher Ansatz...? Also, nimm doch einfach die gewünschte Position des Users, teile sie durch 50 (X und Y separat), runde die Zahl, und wieder mit 50 multiplizieren. Die neuen Koordinaten passen genau auf dein 50x50-Raster.
Der Code ungefähr:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); var NewX, NewY: Integer; begin NewX := Round(X / 50) * 50; NewY := Round(Y / 50) * 50; end; |
Und an [NewX, NewY] kannst du dein Image zeichnen.
_________________ Life is a bad adventure, but the graphic is really good!
|
|
Theophilus
      
Beiträge: 16
D6
|
Verfasst: Fr 05.12.03 22:08
Eine andere Möglichkeit wäre, die Berechnung erst beim MouseUp-Event durchzuführen. Da bewegt sich die Figur mit der Maus und sucht sich beim Auslassen die richtige Position.
|
|
Andreas Pfau
      
Beiträge: 997
|
Verfasst: Fr 05.12.03 22:28
Hallo,
ja, je nach dem, ob man einen "Hot-Track-Effekt" haben will oder nicht. Wenn nein ist klar, dass man es in OnMouseUp() setzt.
Wenn man aber HotTrck will (also schon beim bewegen der Muas zeichnen), unbdedingt zuerst in ein Speicher-Bitmap rendern, nicht direkt auf die Zeichenfläche im Fenster (sei es ein Image oder eine PaintBox oder was auch immer). Wenn du direkt zeichnest kommt es zu enormem Flimmern!
_________________ Life is a bad adventure, but the graphic is really good!
|
|
J:org 
      
Beiträge: 17
|
Verfasst: Mo 08.12.03 11:08
hallo, danke für eure hilfe es funktioniert jetzt soweit.
allerdings, wie du schon gesagt hast, flimmert es jetzt... wie kann ich das denn rendern? hab schon die suche benutzt aber nix gefunden.
|
|
CodeWicht
      
Beiträge: 90
Win98, WinXP
D6
|
Verfasst: Mo 08.12.03 12:27
Versuche es doch mal mit
Form1.DoubleBuffered := True; *
*keine Gewähr auf Richtigkeit der Syntax!
_________________ The equal is true.
|
|
Andreas Pfau
      
Beiträge: 997
|
Verfasst: Mo 08.12.03 17:28
Hallo,
nein, das wird nichts bringen - sobald du pro Frame mehr als einein Zeichenbefel aufrufst, flimemrt es. Das geht nur, wenn du Objekte verschiebst. Aber da du mindestens 2 Zeichenbefehle brauchst (Raster zeichnen, Spielfigur zeichnen), flimmert es.
Was du machen musst: erzeuge ein Bitmap, zeichne da rein. Wenn alles gezeichnet ist, das Bitmap auf die Zeichenfläche kopieren (TCanvas.Draw()). Am besten, du verwendest als Zeichenfäche eine TPaintBox (Reigster "System"). Bei einem TImage wäre ich mir nicht so sicher, ob das dann nicht trotzdem flimmert. Und bei einer Paintbox beachten: in OnPaint() jedesmal das Speicherbitmap neu reinkopieren!!!
_________________ Life is a bad adventure, but the graphic is really good!
|
|
J:org 
      
Beiträge: 17
|
Verfasst: Mi 10.12.03 09:46
Quelltext 1:
| Form1.DoubleBuffered := True; |
funktioniert auch.
danke
|
|
Andreas Pfau
      
Beiträge: 997
|
Verfasst: Mi 10.12.03 16:38
Hallo,
na ja, es ist aber so, zeig' mal den code, den du zum Zeichnen verwendest. Das flimmert nur dann nicht, wenn du Delphi-Objekt (z.B. ein Panel) verschiebst. Wenn du selber zeichnest, wie soll das gehen? Du zeichnest den Hintergrund, du siehst den Hintergrund. Du zeichnest das Objekt, du siehst das Objekt. Du siehst 2 Bilder nacheinander. Das nennt man flimmern.
Villeicht reden wir aber auch aneinander vorbei, ich weiß nicht, bitte zeig' mal deinen code, ich meine, wenn er wirklich nicht flimmert, wäre ich begeistert.
_________________ Life is a bad adventure, but the graphic is really good!
|
|
J:org 
      
Beiträge: 17
|
Verfasst: Mi 10.12.03 17:04
ich glaub wir haben aneinander vorbei geredet, ich zeichne das Bild nicht. es ist ein Bitmap in einem TImage. Sprich ich zeichne keinen Hintergrund und kein Kreis in den Hintergrund (oder dergleichen).
ich denke deshalb geht es mit diesem doublebuffered -> true.
oder meintest du es flimmert auch wenns n bitmap ist?
|
|
Andreas Pfau
      
Beiträge: 997
|
Verfasst: Mi 10.12.03 17:47
Hallo,
du hast also 2 Images: eines mit dem Hintergrund, eines mit dem bewegten Objekt? Ja, das geht. Ich dachte, es soll selber gezeichnet werden. Sorry...
_________________ Life is a bad adventure, but the graphic is really good!
|
|
J:org 
      
Beiträge: 17
|
Verfasst: Do 11.12.03 08:43
ja stimmt fast, der hintergrund wird gezeichnet (schachbrett), figuren sind images.
|
|