Autor Beitrag
Bääääär
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 117



BeitragVerfasst: So 27.08.06 16:59 
Hallo!

Ich habe mir vorgenommen einen "Tabbi-Shooter" zu programmieren. Der soll im Prinzip wie Moorhuhn sein, eben nur mit Teletabbis.

Meine Frage ist nun:
Wenn der Benutzer klickt (schießt) lasse ich mir die Koordinaten vom Cursor auslesen. Ich weiß, wo sich die Tabbis auf dem Bildschirm befinden. Einziges Problem: Der Tabbi ist ja nicht exakt quadratisch. Also wird die Abfrage, ob man getroffen hat sehr schwierig. Ich könnte also für den Tabbi ein "Muster" festlegen, welche Pixel vom Tabbi als getroffen gewertet werden sollen. Quasi ein Arry mit den x & y Koordinaten.

Bsp.: der Tabby steht an punkt 10,10. Im Muster steht, das pixel 22,45 des Tabbis als getroffen gewertet werden soll. Wenn also auf Pixel 32,55 "geschossen" wurde, hat man getroffen.

Geht das nicht irgendwie leichter und mit (möglichst) weniger Rechenaufwand?

Ich hoffe, ich konnte mein Problem (zumindest Ansatzweise) erläutern. Wenn nicht, werde ich natürlich noch mal versuchen, klar zu machen, wo das Problem liegt.

Danke schon mal,
The Bääääär
reflex
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20

Win98,WinME,WinXP, Suse Linux 10.1
D7 Pers, D3 Prof
BeitragVerfasst: So 27.08.06 17:51 
Hey,
du kannst abfragen ob sich der Klick in einem bestimmten Abstand zur Koordinate des Tabbys befindet. Ich denk mal dass geht etwas schneller als dafür extra ein Array zu definieren.
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: So 27.08.06 18:02 
Du kannst das Rechteck um den Tubbie herum in einem array ablegen. Dann kannst du mir PtInRect prüfen, ob ein Punkt in einem Rechteck liegt.

HTH, Martok

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
Bääääär Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 117



BeitragVerfasst: So 27.08.06 18:18 
Natürlich kann ich ein Rechteck definieren, aber dann gilt evtl. ein "knapp daneben geschossen" als getroffen und ein "knapp getroffen" als daneben, weil sich dieser Teil des Tabbis nicht im Rechteck befindet.
Ironwulf
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 733
Erhaltene Danke: 2



BeitragVerfasst: So 27.08.06 18:35 
was sindn die tabbis? images sprites oder irgendwas ansdres?
z.b. hat delphix die funktion getsprAt(x,y);
und ihc meine so was ähnliches auch schon bei andren komponenten gesehn zuhaben
Bääääär Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 117



BeitragVerfasst: So 27.08.06 18:59 
Ich dachte Die Tabbis ganz normal als Bitmap auf die Form zu zeichnen und dann irgendwo (z.B. in einem Arry) ihren Standpunkt, sowie die Art (Tabbi ganz vorne, in der Mitte, ganz hinten) abzuspeichern. Bei einem Schuss wird geschaut, ob ein Tabbi in der Nähe der Cursorposition ist, wenn ja, wird die Art ausgelesen und dann das entsprechende Muster genommen.
Ironwulf
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 733
Erhaltene Danke: 2



BeitragVerfasst: So 27.08.06 20:33 
da wirst du wohl doch die variante mit den rechtecken nehmen müssen is die einfachste und schnellste
Bääääär Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 117



BeitragVerfasst: So 27.08.06 21:22 
nur leider auch die "unprofessionellste"
Phobeus
ontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 1280

Linux (FC6), WinXP Pro (Box)
D6 Pers, D7 Pro, FPC 2.x
BeitragVerfasst: So 27.08.06 22:35 
Das stimmt so nicht. In der Tat sind in den meisten kommerziellen Titeln BoundingBox- oder BoundingSpehre-Verfahren sehr weit verbreitet - eben weil sie sehr wenig "kosten". Zwei Lösungsansätze: 1. Was hindert Dich daran mehre Rechtecke zu verwenden, um z.B. ein exaktere Kollision zu ermitteln? IMAO wurde dieser Ansatz auch beim Orginal-Moorhuhn verfolgt, dass wenn ich mich richtig entsinne keine Pixel basierte Kollision hatte. 2. Da der Rechenaufwand bei Dir überschaubar ist, könnte auch eine pixelgenaue Kollision realisierbar sein. In diesem Fall solltest Du aus Geschwindkeitsgründen zunächst mit Rechtecken überprüfen, ob der Klick in diesem Rechteck erfolgt ist. Ist dies der Fall, kannst Du eine detailliere Überprüfung vornehmen. Sofern Du nicht gerade Bitmaps in Postergröße durch die Gegend schiebst, sollte jeder halbwegs aktuelle Rechner mehre BoundingBoxes und eine detaillierte Berechnung schaffen. Zumal diese nur bei einem seltenen Ereignis eintreten - einem Klick - und nicht für eine ständige Kollision z.B. durch Bewegung von Figuren durchgeführt werden muss.

_________________
"Menschen sterben nicht wenn man sie zu Grabe trägt, sondern wenn sie ihre Träume verlieren..."
Bääääär Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 117



BeitragVerfasst: Di 29.08.06 11:54 
Womit du natürlich irgendwie Recht hast. Nagut, ich glaube die Frage ist heirmit beantowrtet. Danke an alle!
Bääääär Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 117



BeitragVerfasst: Di 29.08.06 16:36 
Mir ist soeben noch eine Möglichkeit eingefallen, die ich aber Aufgrund eines Mangelnden Bildschirms an meinem Pc nicht testen kann:

Wenn man für jeden Tabbi ein TImage nimmt, und dann mithilfe von Transparentcolor die Teile des Bitmaps, wo kein Tabbi ist "unsichbar" macht (was ja eh passieren müsste), reagiert dann das Image auf einen Klick in diesen unsichbaren Bereich?
Damit würde doch die Abfrage wesentlich leichter sein, oder?

Würde das dann zuviel Rechenaufwand benötigen?
F34r0fTh3D4rk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5285
Erhaltene Danke: 29

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Di 29.08.06 16:52 
ich wollte nur mal anmerken, dass die dinger Teletubbies heißen und rein gar nichts mit Tabbed-Browsing zu tun haben ;)
matze
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 4613
Erhaltene Danke: 24

XP home, prof
Delphi 2009 Prof,
BeitragVerfasst: Mi 30.08.06 07:09 
user profile iconBääääär hat folgendes geschrieben:
Wenn man für jeden Tabbi ein TImage nimmt, und dann mithilfe von Transparentcolor die Teile des Bitmaps, wo kein Tabbi ist "unsichbar" macht (was ja eh passieren müsste), reagiert dann das Image auf einen Klick in diesen unsichbaren Bereich?

Das Image reagiert dann trozudem auf den Klick. Was du bei dieser Mathode antürlich machen kannst ist, dass du das OnMouseDown Ereginis des Images auswertest und dann prüfst, ob der Pixel in dem Image auf den geklickt wurde in dem Bitmap das im Image geladen ist, eine transparente Farbe ist.

_________________
In the beginning was the word.
And the word was content-type: text/plain.
Bääääär Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 117



BeitragVerfasst: Mi 30.08.06 09:26 
Achso, du meinst, wenn transparentcolor:=clfuchsia ist, dann prüfe ich, ob der angeklickte Pixel clfuchsia ist, bzw gleich transparentcolor ist.
Damit hätte ich dann auch eine Pixelorientierte Kollision, oder?

Wäre es ratsam, eine andere Komponente zu nehmen, also nicht TImage - des Rechenaufwands wegen?
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Mi 30.08.06 09:48 
sorry das ich das so sage aber is das nicht egal? bei Moorhuhn ist das Fadenkreuz eh so groß das man theoretisch dar nicht "unter den Flügeln" durchschießen kann.

mfg el

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
Bääääär Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 117



BeitragVerfasst: Sa 02.09.06 20:06 
Ich wollte ja Teletubbies nehmen und nicht Moorhühner.
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Mo 04.09.06 11:56 
dann mach das fandenkreuz so groß das man nicht danebenschießen kann! :-D

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.