AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

map editor

Ein Thema von delphi-n · begonnen am 5. Okt 2009 · letzter Beitrag vom 6. Okt 2009
Antwort Antwort
delphi-n

Registriert seit: 6. Sep 2009
88 Beiträge
 
#1

map editor

  Alt 5. Okt 2009, 11:07
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
  Mit Zitat antworten Zitat
stho

Registriert seit: 16. Sep 2009
Ort: 127.0.0.1
288 Beiträge
 
Delphi 2007 Professional
 
#2

Re: map editor

  Alt 5. Okt 2009, 11:56
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?
  Mit Zitat antworten Zitat
delphi-n

Registriert seit: 6. Sep 2009
88 Beiträge
 
#3

Re: map editor

  Alt 5. Okt 2009, 12:02
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.
  Mit Zitat antworten Zitat
Teekeks

Registriert seit: 19. Okt 2008
Ort: Dresden
765 Beiträge
 
FreePascal / Lazarus
 
#4

Re: map editor

  Alt 5. Okt 2009, 12:07
Für was für ein Spiel soll das den der Map-Editor werden?
Wir wissen ja gar nicht was du vor hast...
Peter
"Div by zero Error" oder auch: "Es geht auch ohne Signatur!".
  Mit Zitat antworten Zitat
guidok

Registriert seit: 28. Jun 2007
417 Beiträge
 
#5

Re: map editor

  Alt 5. Okt 2009, 12:25
Zitat von delphi-n:
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.
Hast du denn schon irgendwas dazu programmiert, oder ist das jetzt eine grundsätzliche Frage zum Vorgehen?

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.
  Mit Zitat antworten Zitat
delphi-n

Registriert seit: 6. Sep 2009
88 Beiträge
 
#6

Re: map editor

  Alt 5. Okt 2009, 17:57
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)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: map editor

  Alt 5. Okt 2009, 18:11
Objekt erzeugen, OnClick zuweisen, Grafik ggf. mit Image.Picture.Assign(anderesImage.Picture) kopieren
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Deep-Sea
Deep-Sea

Registriert seit: 17. Jan 2007
907 Beiträge
 
Delphi XE2 Professional
 
#8

Re: map editor

  Alt 6. Okt 2009, 08:05
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
Das mit den zwei Klassen, wie es guidok vorgeschlagen hat, ist wohl ein schönerer Weg ...

*gähn* Achya, guten Morgen DP
Chris
Die Erfahrung ist ein strenger Schulmeister: Sie prüft uns, bevor sie uns lehrt.
  Mit Zitat antworten Zitat
guidok

Registriert seit: 28. Jun 2007
417 Beiträge
 
#9

Re: map editor

  Alt 6. Okt 2009, 12:37
Mal ein rudimentärer Ansatz für dein Problem:

Delphi-Quellcode:
  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;
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.ä.

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.
  Mit Zitat antworten Zitat
Antwort Antwort


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 17:04 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