![]() |
[Andorra 2D] Auf "Objekt" klicken registrieren
Moin Moin,
ich habe ein kleines 2D Spielchen, funktioniert alles prima. Es fliegen Enten :D über den Bildschirm und man muss diese "abschießen". Ich habe ein for schleife die überprüft ob der Mauszeiger über einer Ente ist, wenn ja dann wird die ente nicht mehr angezeigt da man sie ja "abgeschossen" hat. Dummerweise dauert das Rechnen bei den ganzen Enten zu lang :D Deshalb wollte ich fragen ob es eine andere Möglichkeit gibt als dauernt die Position zu überprüfen. Also von den enten habe ich immer folgende Daten: X und Y-Koordinate und die Weite und Höhe der Ente |
Re: [Andorra 2D] Auf "Objekt" klicken registrieren
Ich kann mir nicht vorstellen, das eine solche Kontrolle sonderlich viel Zeit in Anspruch nimmt.
Eine andere Methode: TSpriteEngine.GetSpriteAt(X, Y) liefert dir das oberste Sprite an der angegebenen Position zurück. |
Re: [Andorra 2D] Auf "Objekt" klicken registrieren
ich verwende keine Sprite engine... sondern AdDraw. so wie im Tutorial 1.
Ich habe noch eine Frage. Meine Hühner fliegen jetzt rum, ich habe einen Baum eingebaut, die Hühner fliegen dahinter. Der baum ist etwas schief und hat clFuchsia als Transparentcolor. das blöde ist ich überprüfe ja ob meine maus über nem Huhn oder einem Objekt, in dem Fall ein Baum, ist. Wenn ich über einem Huhn bin wirds abgeschossen, ansonsten nicht, da man ja nicht durch einen Baum schießen kann. Mein Problem ist nun wenn der Baum schief ist sehe ich dsa Huhn schon dahinter wenn es aber immernoch hinter dem Rechteck des Baums ist, dieser ist ja immernoch ein Rechteck, aber nur eben wurde die farbe trasparent. Wie kann ich dsa nun rausfinden. mit einer maske oder so? |
Re: [Andorra 2D] Auf "Objekt" klicken registrieren
Kommt schon -.-
Hat keiner eine Ahnung wie das mit der Transparenz geht? |
Re: [Andorra 2D] Auf "Objekt" klicken registrieren
Wie du schon gesagt hast: Hinterlege eine Maske. Besonders einfach ist ein Bitmap, das du auf eine Farbtiefe von pf1Bit reduziert hast. Die Methode "TBitmap.Mask" hilft dir dabei. Für eine einzelne Überprüfung während eines Klicks reicht die Performance von "TBitmap.Canvas.Pixels" zur Abfrage der Farbe eines Pixels sogar noch aus.
|
Re: [Andorra 2D] Auf "Objekt" klicken registrieren
Mit Andorra? TBitmap?
|
Re: [Andorra 2D] Auf "Objekt" klicken registrieren
TBitmap aus der VCL. Du kannst dir natürlich aber auch selbst eine eigene Maskenklasse Programmieren.
|
Re: [Andorra 2D] Auf "Objekt" klicken registrieren
Ja aber ich habe doch das Huhn in einer AdImageList.
Was soll ich nun machen? |
Re: [Andorra 2D] Auf "Objekt" klicken registrieren
Delphi-Quellcode:
AdImageList[0].Texture.SaveToGraphic(DeinTBitmapBitmap);
|
Re: [Andorra 2D] Auf "Objekt" klicken registrieren
Das muss ich ja immer machen wenn man klickt ... für jedes Huhn. Das ist doch ne Hammer Performanceeinbuse
Und dann muss ich noch eine Maske setzen. Und wie? UNd wenn ich das gemacht habe dann noch überprüfen ob ich über dembild bin? Uff Also mit de Code kann ich ja eine Maske erstellen: ![]() Wie finde ich raus ob meine maus darüber ist? |
Re: [Andorra 2D] Auf "Objekt" klicken registrieren
Du Maske ist doch für jede Grafik gleich - also bereche diese bei Starten des Spiels und lege alle Masken in einer Liste mit gleicher Indexierung wie in der ImageList ab.
Edit: Die Funktion die du da nennst, hat doch nichts mit deinem Problem zu tun :gruebel: |
Re: [Andorra 2D] Auf "Objekt" klicken registrieren
Keine Ahnung :D
Also ich habe 2 Hühnerbilder. Index 1 und 2 Jetzt lade ich einfach beide nacheinander in ein Bitmap, mache dann "Bitmap.Mask;" und dann? |
Re: [Andorra 2D] Auf "Objekt" klicken registrieren
Warum eigentlich du "Hühnerbilder" - du willst doch wissen, ob der "Schuss" an dem Baum/Hinderniss vorbei gegangen ist. Also folgende Vorgehensweise:
Delphi-Quellcode:
var
lst: TList; procedure LadeSpiel; var i: integer; bmp: TBitmap; begin lst := TList.Create; for i := 0 to AdImageList.Count - 1 do begin bmp := TBitmap.Create; AdImageList[i].Texture.SaveToGraphic(bmp); bmp.Mask(DeineTransparenzFarbe); bmp.BitDepth:= pf1Bit; //Eventuell erstmal weglassen lst.Add(bmp); end; end; function TrifftObjekt(RelativesX, RelativesY: integer; ImageIndex: integer): boolean; begin result := TBitmap(lst[ImageIndex]).Canvas.Pixels[RelativesX, RelativesY] = clBlack; end; procedure MausKlick(X, Y: integer); begin //Erstelle Liste mit allen Objekten an der MausPosition //Überprüfe mithilfe des Bildindexes ob dieses Bild wirklich getroffen wurde, wenn //nicht überprüfe das nächste Element in der Liste end; |
Re: [Andorra 2D] Auf "Objekt" klicken registrieren
Kay, danke.
Aber wieso wird auf clBlac übrprüf? Wird bei der Maske alles andere als die Transparentfare zu schwarz? RelaivesX und Y sind ja dann die mauspositionen oder? |
Re: [Andorra 2D] Auf "Objekt" klicken registrieren
Schau mal nach
![]() RelativesX und RelativesY soll die Mauszeigerposition relativ zur oberen, linken Ecke deines (Hindernis)-Bildes sein. |
Re: [Andorra 2D] Auf "Objekt" klicken registrieren
Zitat:
|
Re: [Andorra 2D] Auf "Objekt" klicken registrieren
Ich benutze aber nicht die Sprite-Engine
|
Re: [Andorra 2D] Auf "Objekt" klicken registrieren
Danke euch, habe es endlich geschafft :D
@Igel457 wusste gar nicht das du Admin von Andorra2D bist :thumb: :thumb: :thumb: Ein Freund von mir meinte, das die Schaffer von Andorra gerne wissen welche Projekte mit Andorra programmiert wurden. Stimmt dsa? Denn ich würde gerne mein neues Projekt dann dir mal zeigen :D |
Re: [Andorra 2D] Auf "Objekt" klicken registrieren
Gerne! Immer her damit :wink:
|
Re: [Andorra 2D] Auf "Objekt" klicken registrieren
Ich melde mich dann bei dir :D
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:48 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-2025 by Thomas Breitkreuz