Autor Beitrag
Pantifex Maximus
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Mo 24.03.03 15:46 
Ich weiß nicht woran das liegt, aber ich schaff es einfach nicht. :oops:
Wie kann ich auf ein Sprite was zeichnen und in welche Prozedur muss das rein?
Hab versucht beim Erzeugen des Sprites und beim Timer auf die Canvas zu zeichnen, aber das will nicht :cry:

Bin für jede Hilfe dankbar!
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 24.03.03 18:09 
Huch...noch ein maximus.

Das geht schon mit dem canvas! Du must nur nachher, das imageItem wieder restoren (irgendwo gibt es da .restore)!

Wenn du einzelne pixel malen willst, dann kann ich dir nur empfehlen das zeichnen via ScanLine zu machen, da das 1000mal schneller ist, als über pixels[] :!:

mfg mx.
Pantifex Maximus Threadstarter
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Mo 24.03.03 21:02 
sry, aber irgendwie hilft mir das nicht sehr weiter. Ich kann ja mein Problem etwas präziser formulieren:
Ich bin grad dabei, eine 2D Engine zu erstellen. Am unteren Bildrand soll so ne Art panel hin, wo später die ganzen Funktionen aufgeruft werden können.
Das Bild wird als Sprite dargestellt. Um die Minimap zu zeichnen, muss ich auf dieses Bild was zeichnen. Und genau da ist mein Problem. Wie und in welcher Prozedur? Wenn ich das Zeichnen im Timer mache, dann wird die Minimap jede Millisekunde neu gezeichnet, was ja nicht gerade gut für die Geschwindigkeit des Programms ist. Außerdem ändert sich die Map nicht, d.h. eigentlich muss sie nur 1 Mal gezeichnet werden, nachdem sie erstellt wurde.
ShadowCaster
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 312



BeitragVerfasst: Di 25.03.03 11:34 
ich würde das Zeichnen so machen:

Jede Anwendugn in delphi hat ein OnIdle-Ereignis. Wenn in der Anwendung nichts passiert (onidle auftritt), setzt du einen Flag beim Ereignis OnIdle auf true. Ein Timer zum Zeichnen ist sehr langsam. Aber er tut es fürs Erste.

Wenn das Timerereignis auftritt, frägst du ab, ob der Flag True ist (also bisher ist nix in der Anwendung passiert) Dann setzt du den Flag auf False. Wenn der Flag im OnIdle-Ereignis schon False ist, also vorher kein OnIdle-Ereignis auftrat, zeichnest du dein Spielfeld neu.

Damit kannst du verhindern, dass dein Formular(Spielfeld) ständig neu gezeichnet wird, wenn das Timer-Ereignis auftritt.

So ähnlich programmiert man das unter DirectX und das ist eine sehr effiziente Methode, damit die CPU nicht ständig rechnen muss, wenn du deine Anwendung mal auf Symbolgröße minimierst.