AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Rechenintensiven Code bei OnMouseMove optimieren - aber wie?
Thema durchsuchen
Ansicht
Themen-Optionen

Rechenintensiven Code bei OnMouseMove optimieren - aber wie?

Ein Thema von Yheeky · begonnen am 30. Aug 2003 · letzter Beitrag vom 31. Aug 2003
Antwort Antwort
Seite 1 von 2  1 2      
Yheeky

Registriert seit: 7. Jun 2002
1.339 Beiträge
 
#1

Rechenintensiven Code bei OnMouseMove optimieren - aber wie?

  Alt 30. Aug 2003, 22:40
Hi,

also ich programmiere gerade eine Art "Map-Editor". Ich habe die Spielfläche in 2600 Teile (Tiles) eingeteilt. Diese sind im Editor jeweils Weiß umrahmt, sollen aber, wenn man mit der Maus über ein Tile geht rot werden.

Mit dem folgenden Code erstelle ich die weißen Rechtecke, die die einzelnen Teils voneinander abtrennen.

Code:
  for X := 0 to XWert do
  for Y := 0 to YWert do
  Rectangle(x*12,y*12,x*12+12,y*12+12);
Bei "OnMouseMove" der Oberfläche frage ich ab, welches der Tiles rot markiert werden muss. Die anderen werden in der Zwischenzeit wieder weiß gezeichnet (logischerweise).

Mein Problem: Da 2600 Tiles doch schon sehr viel sind, ist die ganze Procedure sehr rechenintensiv. Wie könnte ich das denn besser verarbeiten?

Falls jemand mein Problem nicht verstanden hat, kann ich ja mit eventuellen Screenshots weiterhelfen.

Gruß Christian
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Rechenintensiven Code bei OnMouseMove optimieren - aber

  Alt 30. Aug 2003, 22:48
Moin Yheeky,

warum beschränkst Du Dich nicht darauf, das Tile, über dem sich der Cursor befindet rot einzufärben, und nur die maximal acht die um dieses Tile herum sind wieder mit einem weissen Rahmen zu versehen?
Alle anderen behalten ja sowieso ihren weissen Rahmen.

Du würdest dann, im Prinzip, einen 3x3 Tile grossen Rahmen, bei dem immer die Mitte rot eingefärbt ist, über Deine Map bewegen.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Yheeky

Registriert seit: 7. Jun 2002
1.339 Beiträge
 
#3

Re: Rechenintensiven Code bei OnMouseMove optimieren - aber

  Alt 30. Aug 2003, 22:52
Guter Ansatz...das werde ich mal probieren. Danke dir!

Gruß Christian
  Mit Zitat antworten Zitat
Yheeky

Registriert seit: 7. Jun 2002
1.339 Beiträge
 
#4

Re: Rechenintensiven Code bei OnMouseMove optimieren - aber

  Alt 30. Aug 2003, 23:33
Mhmm, naja funktioniert nicht so, wie ich mir das erhofft hatte. Vom Prinzip her kein Problem, da funktioniert es, aber wenn man die Maus schneller bewegt und aus dem "Zeichenbereich" rauskommt, sind nunmal die alten Markierungen wieder da. Wenn ich den Zeichenbereich erhöhe, tritt das alte Problem der Geschwindigkeit wieder auf.

Gibt´s da vielleicht noch andere Möglichkeiten?
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Rechenintensiven Code bei OnMouseMove optimieren - aber

  Alt 30. Aug 2003, 23:41
Moin Yheeky,

Du könntest während gezeichnet wird die MouseMove Prozedur deaktivieren, und sobald Du mit dem Zeichnen fertig bist wieder zur Verfügung stellen.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Yheeky

Registriert seit: 7. Jun 2002
1.339 Beiträge
 
#6

Re: Rechenintensiven Code bei OnMouseMove optimieren - aber

  Alt 31. Aug 2003, 00:02
Wie kann ich sie denn deaktivieren?
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Rechenintensiven Code bei OnMouseMove optimieren - aber

  Alt 31. Aug 2003, 00:22
Moin Yheeky,

so sollte es gehen, dann wird erst mal die Routine deaktiviert, gezeichnet, und die Routine neu aktiviert.

Delphi-Quellcode:
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);

var
  mmSave : TMouseMoveEvent;

begin
  mmSave := self.FormMouseMove;
  self.OnMouseMove := nil;
  try
  // Zeichnen
  finally
    self.OnMouseMove := mmSave;
  end;
end;
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Yheeky

Registriert seit: 7. Jun 2002
1.339 Beiträge
 
#8

Re: Rechenintensiven Code bei OnMouseMove optimieren - aber

  Alt 31. Aug 2003, 00:34
Mhmm, ne, funktioniert nicht.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Rechenintensiven Code bei OnMouseMove optimieren - aber

  Alt 31. Aug 2003, 00:39
Moin Yheeky,

und wenn Du Dir zusätzlich merkst, wo Du zuletzt das rote Feld gezeichnet hast, und dieses dann zuerst mal wieder mit einem weissen Rahmen versiehst, bevor Du das neue zeichnest?
Eventuell könntest Du noch prüfen, dass das neue Feld <> dem alten ist, damit es nicht unnötig flackert.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Yheeky

Registriert seit: 7. Jun 2002
1.339 Beiträge
 
#10

Re: Rechenintensiven Code bei OnMouseMove optimieren - aber

  Alt 31. Aug 2003, 00:44
Das mit dem Prüfen des Feldes war meine erste Idee. Die hatte damals auch nicht so richtig funktioniert, aber vielleicht jetzt mit der neuen Funktion zusammen. Ich probier´s mal eben...
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:39 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz