![]() |
löcher inner wand
ich würde gerne einschusslöcher in einer wand (ein image) machen lassen, was muss ich da machen per canvas?
|
Re: löcher inner wand
:? Schon die AGB / Kodex gelesen ;-) Suche benutzen...dann findet man nämlich das:
Delphi-Quellcode:
Mit dieser Prozedur kann man z.b. auf das Canvas eines Images einen Kreis zeichen / Einschussloch
procedure Circle(Canvas: TCanvas; X, Y, Radius: Word; Color: TColor);
var x1, x2, y1, y2, r2, d: integer; h: real; begin H := 0.5; Y2 := 0; d := round((Radius * 3.2) / (SQR(2) + h)); X2 := Radius * Radius; x1 := Radius; R2 := X2 + d; for y1 := 0 to d do begin if Y2 + X2 > R2 then begin X2 := X2 - x1 - x1 + 1; x1 := x1 - 1; end; with Canvas do begin pixels[X - x1, Y - y1] := Color; // ... end; Y2 := Y2 + y1 + y1 + 1; end; end; Tobi |
Re: löcher inner wand
mhm...der code malt bei mir schonmal keinen kreis, sondern nur einen teil einer elipse...warum nicht einfach
Delphi-Quellcode:
?
procedure Circle(Canvas: TCanvas; X, Y, Radius: Word; Color: TColor);
var x1: integer; begin x1:=radius div 2; Canvas.Pen.Color:=Color; Canvas.Brush.style:=bsClear; Canvas.Ellipse(x-radius,y-radius,x+radius,y+radius); end; besser würde es natürlich aussehen, wenn du dir ein Bild eines Einschusslochs machst und dieses per draw auf die wand kopierst. HTH Frank |
Re: löcher inner wand
Ah dankeschön, das mit dem Kreis werd ich ersteinmal ausprobieren, aber ich saß gestern die ganze Nacht vorm Pc und habs erfolglos versucht, irgendwie tut es mir leid aber wie soll ich das mit dem draw machen? normaler weise lass ich die bmp bilder in der nähe meiner exe weil ich nict weiß wie man diese in eine source datei einbindet. das ist also nun nicht das problem doch wie lade ich nun diese "einschusslöcher"-pics in canvas.draw ein? wenn du mir das noch sagen könntest wäre mir schon sehr geholfen...dankeschön
|
Re: löcher inner wand
Hier mal der ungefähre Ablauf, wie du es machen müsstest:
1. Neues TBitmap erstellen (bmp := TBitmap.Create;) 2. Mit LoadFromFile Einschussloch aus der Datei laden (bmp.LoadFromFile(<Dateiname>)) 3. Die Bilder jeweils mit draw auf den Zielcanvas kopieren (Canvar.Draw(X, Y, bmp)) 4. Am Ende das Bitmap wieder freigeben (bmp.Free) - Am besten du erstellst das BMP ganz am anfang und zerstörst es bevor dein Prgm. beendet wird. - Evtl. kannst du dir ja mal ![]() - Bei der Syntax von Draw bin ich mir nicht 100%ig sicher. Evtl. musst du die Parameterreihenfolge vertauschen. |
Re: löcher inner wand
vielen dank! das es nich aus einer ressource geladen wird ist denke ich nicht all zu schlimm, ich werde das dann auch alles ersteinmal ausprobieren, dankeschön nochmal^^
|
ja ich bins nochmal, habe das mit den löchern hinbekommen aber
1. lassen sie sich durch andere images wegwischen 2. habe ich das programm auf einen anderen rechner geöffnet und dort sind die löcher völlig verschoben, ich habe deren koordinaten bei mir auf dem pc mit x-y der mouse.cursorpos und um das genau zu positionieren noch bei x - 34 genommen! also im klartext Canvas.Draw(X-34, Y, bmp) bei mir auf dem pc ist jetz ja genau aber auf anderen nicht |
Re: löcher inner wand
Zu deinem ersten Problem:
Wenn du ein Bitmap über ein anderes Kopierst, siehst du das andere logischerwese nicht mehr. Um zu erreichen, dass das Loch von den (vmtl. weißen) Rändern nicht verdeckt wird müsstest du nur Teile des Bildes kopieren. Das musst du entweder von Hand machen oder dir eine eine entsprechende Komponente suchen. Afaik kann das bspw. die PNG-Lib. Zu 2: Vermutlich ermittelst du die "globale" mausposition und nicht die des Formulars. Entweder müsstest du, wenn du mit Mouse.CursorPos... den Anstand des Formulars vom Bildschirmrand (evtl. einen 2. Bildschirm beachten) von der Cursorposition subtrahieren oder du ermittelst direkt die Mausposition vom Formularrand aus gesehen, mit den werden, die in den OnMouseMove, OnMouseDown und OnMouseUp-Ereignissen übergeben werden. |
Also wegen der cursor position also im 2. punkt, weiß ich jetz das die auflösung des bildschirmes auf 1280x1024 gesetzt werden muss damit es nicht mehr verschoben ist.
und zum anderen ist das so das ich ja bewegliche images (als feinde) in meiner form habe und wenn diese hinter oder vor die Wand (mit den Löchern kommen) dann verschwinden die löcher. Dies wäre eigentlich noch das einzige problem neben der auflösung. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:37 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