![]() |
map editor
Hi!
Ich möchte einen Map-Editor programmieren. Nun wollte ich mal fragen, wie das genau mit Parent und child funktioniert. Ich werd aus der Hilfs-datei nicht schlau. Das problem ist auch, dass man geclonten Images auch anklicken soll, und bei jedem etwas anderes Passieren soll. wie mache ich das am besten? Vielen Dank für eure Hilfe |
Re: map editor
Bitte definiere deine frage mal genauer o.O
ich versteh nähmlich net was du möchtest. Map-Editor, okay... doch wofür? was soll der tun?! Mit welchen Dateien willst du dein Programm füttern? Welches Format? Was genau soll er damit machen? :| |
Re: map editor
man soll erst auf ein bild klicken, dann auf ein Rasterfeld. Wenn das Bild blau war, soll das Rasterfeld auch blau werden.
Leider weiß ich nicht wie man das mit imagesclonen macht, sonst hätte ich das alte image geclonet und auf das raster kopiert. Oder kann man das auch einfacher lösen? P.S. Ich weiß ja auch nicht, welche Rastergröße( wie viele Felder) der Benutzer einstellt. |
Re: map editor
Für was für ein Spiel soll das den der Map-Editor werden?
Wir wissen ja gar nicht was du vor hast... |
Re: map editor
Zitat:
Wenn ich deine Fragen so lesen, dann kommen mir leise Zweifel, ob das Projekt für deinen Wissenstand (ohne dir zu nahe treten zu wollen) nicht etwas zu groß ist. Grundsätzlich würde ich so vorgehen, dass ich mir mindestens zwei Klassen definiere: Eine Klasse für das Editorfeld, die auch die Raster enthält und eine weitere, die ein einzelnes Feld repräsentiert. |
Re: map editor
mal ganz generell gefragt, wie "clont" man images? (oder erstellt welche)
am besten, dass jedes geklonte beim klick etwas macht ( alle geklonten sollen das gleiche machen) |
Re: map editor
Objekt erzeugen, OnClick zuweisen, Grafik ggf. mit
Delphi-Quellcode:
kopieren
Image.Picture.Assign(anderesImage.Picture)
|
Re: map editor
Ich gebe zu, auf den ersten Blick sieht die Methode mit dem klonen leicht und schnell aus, aber IMHO verbraucht sie (je nach Anwendungsfall natürlich) extrem viel Speicher. Selbst wenn es nur 8x8 Felder sind liegt, falls alle das gleiche Bild enthalten, dieses 64 mal im Speicher - 63 mal zu viel, wie ich finde :wink:
Das mit den zwei Klassen, wie es guidok vorgeschlagen hat, ist wohl ein schönerer Weg ... *gähn* Achya, guten Morgen DP :mrgreen: |
Re: map editor
Mal ein rudimentärer Ansatz für dein Problem:
Delphi-Quellcode:
TMapItem ist ein einzelnes Feld in deinder Map. Es enthält seine Position im Raster, einen ImageIndex für sein Icon und ein Ereignis, in dem du programmieren kannst, was beim Klicken auf das Feld passieren soll, o.ä.
TItemAction = procedure (Sender: TMapItem) of Object;
TMapItem = class private FPosition : TPoint; //Enthält die Rasterposition in der Map FImageIndex: Integer; //Bildindex für die Bildliste FAction: TItemAction; //Ereignisbehandlung, wenn das Item geklickt wird public constructor Create(Position: TPoint); property Position: TPoint read FPosition; property OnAction: TItemAction read FAction write FAction; end; TMap = class(TGraphicControl) private FImageList: TImageList; //Bildliste für die darzustellenden Icons FRowsCount: Integer; //Anzahl der Reihen in der Map FColumnsCount: Integer; //Anzahl der Spalten in der Map FItems: TObjectList; //Enthält die bereits bearbeiteten Zellen procedure SetRowsCount(const Value: Integer); procedure SetColumnsCount(const Value: Integer); public constructor Create(AOwner: TComponent); override; destructor Destroy; override; property RowsCount: Integer read FRowsCount write SetRowsCount; property ColumnsCount: Integer read FColumnsCount write SetColumnsCount; end; TMap ist die eigentliche Karte. Hier werden alle eingefügten MapItems in einer Liste verwaltet. Hier wird auch das Klicken auf die Map verwaltet. Die Icons, sind alle in einer ImageList gespeichert und werden anhand des ImageIndex von TMap auf den Canvas gezeichnet. Interessant daran wäre z.B. auch, dass du die Karte auch relativ einfach vergrößern oder verkleinern kannst, indem du die Icons mit StretchBlt auf das Canvas kopierst. Das Zeichnen könnte nun so aussehen, dass du jede Zelle, Reihe für Reihe, durchgehst und in FItems nachschaust, ob bereits etwas vorhanden ist. Falls ja wird an diese Stelle im Canvas das entsprechende Bild gezeichnet, falls nein ein "Empty"-Image. Edit: Ok, vermutlich ist es wesentlich schneller, zunächst eine leere Map zu zeichnen und anschließend die Liste durchzugehen und die vorhandenen Icons an die entsprechende Position zu kopieren. Was in dem Quellcode drin steckt ist natürlich nur ein Ansatz von dem, was ich grad mal beschrieben habe. Da ist noch viel zu implementieren. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:57 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz