Autor Beitrag
Haegar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21



BeitragVerfasst: Mo 30.06.03 15:30 
hi,

ich hätt gern ein problem. und zwar hab ich angefangeinen lvl-editor zu schreiben, soweit so gut. ich habe zur objektauswahl folgendes gemacht. ich hab alle möglichen datein in einem speziellen ordner gesucht/gefunden. diese werden dann aufgelistet, wenn man nun in dieser liste einen namen markiert, so erscheint in der "Vorschau" (TImage-kompo) das bild zu dieser datei, sprich das objekt. als untergrund zum lvl-bauen (2D) hab ich dxDraw von delphiX genommen, da das spiel auch damit geproggt wird (gute entscheidung oder nicht, weiss ich grad selber nicht, war eben meine erste eingebung).

hin und her, ich wollte nun wenn in der vorscheu ein objekt gezeigt wird, und man mit der maus draufdrückt (MouseDown) ein TImageSprite erzeugt wird, und dieses könnte man dann auf die DXDraw-oberfläöche ziehen, wo bei MouseUp die jeweiligen koordinaten gespeichert werden (vielleicht auch erst zum zeitpunkt des speicherns, völlig egal erstmal).

das problem wenn ich ein TImageSprite nehme, dann vermute ich mal das man das wohl kaum so quer über ne form ziehen kann, wie man lustig ist, da ich denke das die nur auf DXDraw's angezeigt werden oder? wenn ja müsste ich dann wahrscheinlich noch nen timer oder so laufen lassen, damit die immer wieder neu gezeichtnet werden etc.

das problem nun ich kann dem TImageSprite einfach kein bild zuweisen, ich hab selber schon nen spiel, wo ich es aus ner DXImagelist bekomme, klappt alles wunderbar, aber ein laden aus dem jeweiligen dateinamen is quasi unmöglich, da das programm immer wieder abstürzt. ich weiss aber nicht warum, der pfad stimmt 100%-ig.

soweit dazu, das war eigentlich meine idee vom objekte plazieren, ich wollte nicht unbedingt knöpfe machen (vonwegen "hinzufügen" etc.) oder fällt euch noch eine andere variante ein, wie ich es realisieren könnte?
den code hab ich bestimmt schon wieder gelöscht (also vom Mousedown), aber beim TImageSprite gibt es dann vielleicht sowas wie Source:
ausblenden Delphi-Quelltext
1:
bild.image.picture.bitmap.loadfromfile(.....);					

damit hab ich es dann probiert, was immer wieder zum absturz führte. die fehlermeldung bezog sich dabei allgemein auf den Editor, nicht auf dateinamen/variablen oder dergleichen. deswegen kann ich mit dieser auch nix anfangen, nur durch schrittweises debuggen (F7) war es möglich herauszufinden an welchem punkt überhaupt der absturz kam, und jedesmal am zuweisen des bildes. erzeugt wurde das objekt aber, darauf hab ich schon geachtet )

vielleicht habt ihr ja andere tolle ideen, die man verwirklichen könnte!
gruss haegar

Moderiert von user profile iconTino: Delphi-Tags hinzugefügt.
maximus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 896

Win XP, Suse 8.1
Delphi 4/7/8 alles prof
BeitragVerfasst: Mo 30.06.03 15:56 
zu der verwirklichung kann ich mom. nix sagen, aber zum laden des bildes:
Zitat:
ausblenden Delphi-Quelltext
1:
bild.image.picture.bitmap.loadfromfile					

KA was 'bild' ist ? ...ich kenne es so:
ausblenden Delphi-Quelltext
1:
2:
imageItem.picture.bitmap.loadfromfile('...');
imageItem.restore;

hat immer geklappt, wenn nicht, dann liegts ganz woanders drann.

mfg

Moderiert von user profile iconTino: Delphi-Tags hinzugefügt.

_________________
mfg.
mâximôv
Haegar Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21



BeitragVerfasst: Mo 30.06.03 16:13 
na das war für mich ne simple lokale variable vom typ TImageSprite. was bringt dieses restore???

gruss haegar
maximus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 896

Win XP, Suse 8.1
Delphi 4/7/8 alles prof
BeitragVerfasst: Mo 30.06.03 17:20 
Mit dem restore wird das soneben geladene bild in eine korrekte DirectX-surface verwandelt...ohne restore würdest du das bild nicht sehen können.

und
ausblenden Delphi-Quelltext
1:
bild.image					

...ist bei dir richtig instanziert? Vielleicht gehts besser wenn du eine imageList benützt?
ausblenden Delphi-Quelltext
1:
bild.image := imageList.Items.Add;					

Da die image list ein link auf DXDraw hat.

..hilft?

Moderiert von user profile iconTino: Delphi-Tags hinzugefügt.

_________________
mfg.
mâximôv
Haegar Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21



BeitragVerfasst: Mo 30.06.03 18:00 
naja hier mal das layout quasi. die orangene linie zeigt den weg den ich das bild ziehen möchte! der ausgangspunkt dafür is eben ein TImage (der block). ich dachte wenn ich da die mause drücke (MouseDown) dann
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure Tform_objekte.FormMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var bild:TImageSprite;
begin
 bild:=TImageSprite.Create(form_haupt.dxspreng.Engine);
 bild.Image.Picture.Bitmap.LoadFromFile('bla');
 //weiterhin ausmase+position des bildes
end;  //ist nur für verständlichkeit, nicht fertig

das problem ich denke das ich ein TImageSprite nicht irgendwo lang ziehen kann, da doch sprites eigentlich auf DxDraws gehören oder? aber wie gesagt der fehler kommt immer erst beim laden des bildes. ihm müsste es doch egal sein ob ich es sehe oder nicht :roll: . tja und auf der DxDraw soll es erst landen, wenn ich die mouse wieder los lasse.

isses irgendwie deutlicher? wie gesagt ich zweifel noch am benutzen eines tsprites für den vorgang des ziehens.

gruss haegar
mimi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: Mo 30.06.03 18:07 
ich habe ein level editor für sokoubahn geschrieben, wenn du willst kann ich ihn dir senden.

_________________
MFG
Michael Springwald, "kann kein englisch...."
Haegar Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21



BeitragVerfasst: Mo 30.06.03 18:17 
das hilft mir auch nicht, was wär ich für ein programmierer wenn ich aufgebe, und immer gleich progs andrer nehme??

kannste mir vielleicht sagen wie man es noch machen könnte (andere ideen so ein ding möglichst einfach und schnell draufzubekommen...ich denk da an benutzerfreundl. und schnelle methoden).

kein hinzufügen button oder so
meine 2. idee ist bisher wenn ich bild ausgesucht hab mit linker maustaste auf dxdraw klicken (zur not doppelklick, da man ja öfter mal draufklickt...).

gruss haegar
mimi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: Mo 30.06.03 18:46 
ne ich meine ja auch nur das du es dir mal anschaust und es dann änlichst machst:)

_________________
MFG
Michael Springwald, "kann kein englisch...."
Haegar Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21



BeitragVerfasst: Mo 30.06.03 19:33 
naja schon gut ;))

gruss haegar
maximus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 896

Win XP, Suse 8.1
Delphi 4/7/8 alles prof
BeitragVerfasst: Mo 30.06.03 22:41 
@Both: *lol*

Ah..jetzt ja.

ich verstehe dein problem! Du hast das sprite korrekt erstellt, aber nicht gemerkt, dass du das image auch instanzieren musst. Normalerweise erstell man die images in einer liste (mit add) und weist, dem sprite, dann nur nocht eine referenz zu:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
// oben im objekt
 ...
  imgList : TPictureItemCollection; // oder so ;)


//

procedure Tform_objekte.FormMouseDown(Sender: TObject; 
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer); 
var bild:TImageSprite; 
begin 
 bild:=TImageSprite.Create(form_haupt.dxspreng.Engine); 
 bild.Image := ImgList.items.add;
 bild.Image.Picture.Bitmap.LoadFromFile('bla'); 
 bild.Image.restore;
...
 end;

hätte auch den vorteil, dass diese liste auch das frei-geben der bilder übernimmt...und nicht vergessen, die liste zu instanzieren ;)

hoffe es hilft..?

mfg

_________________
mfg.
mâximôv
Haegar Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21



BeitragVerfasst: Fr 11.07.03 20:22 
ich wollts ja eigentlich ohne imagelist machen ;/

gruss haegar
PS: konnte erst spät antworten da ich ja beim bund bin ;)