Entwickler-Ecke
Multimedia / Grafik - DelphiX: Hitbox eines Sprites positionieren (sonst mittig)
Da_Knuddelbaer - So 19.10.03 12:45
Titel: DelphiX: Hitbox eines Sprites positionieren (sonst mittig)
Tach zusammen,
ich programmiere zur Zeit noch mit DelphiX (wird sich demnächst ändern *g*). Und nun habe ich ein Problem mit einem Sprite:
Man kann mit den Einstellungen Width und Height des Sprites die Hitbox in dessen Größe verstellen. Die Hitbox wird dann automatisch mittig zum Sprite selber gesetzt. Jetzt möchte ich die Hitbox aber gerne am Boden des Sprites haben und weiss nicht wie das gehen soll.
ne kleine Skizze eines kompletten Sprites mit verschobener Hitbox:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| ________ | | | | | | |________| | | | Hitbox | |________| |
Danke fürs Lesen und schonmal im voraus für die Hilfe :)
Gruß,
Knuddelbaer
Moderiert von
Tino: Code-Tags hinzugefügt.
mimi - Di 21.10.03 18:49
es gibt doch noch diese x und y eingenschaften fürs posinieren der sprite meine ich. versuche es doch mal damit.
Da_Knuddelbaer - Di 21.10.03 20:05
Hi mimi,
danke für deine Antwort :)
Nun, ich will ja nicht das Sprite an sich verschieben, sondern die Hitbox vom Sprite. Ausser natürlich es gibt irgendwie von der Hitbox nochmal ein X und ein Y als Eigenschaft.... ka.
Gruß,
Knuddelbaer
mimi - Di 21.10.03 20:17
ich wusste ganicht das ein Sprite auch eine Hitbox hat.
jetzt weiß ich was du meinst:
die TDXSprit hat eine HtBox und ich dachte im qullcode ovn TDXSprit ist die Hitbox. tut mir leid da kann ich dir nicht helfen.
aber ein tipp könnte ich dir geben:
mach doch die Hitbox selbst. das wäre das einfachste.
warum nutze du eingenltich noch DelphiX ?
Da_Knuddelbaer - Mi 22.10.03 08:40
Die Hitbox selber machen ist nicht unbedingt einfacher (leider), denn ich müsste ja dannn beispielsweise noch einen anderen Sprite mitlaufen lassen, den ich dann als HitBox verwende... Idee wäre aber den DelphiX-Code zu ändern und so die Hitbox zu verschieben :)
Ich nutze DelphiX noch weil ich dieses Programm damit angefangen habe. Es jetzt komplett umzuschreiben wäre eine Lebensaufgabe, und ich möchte es wenigstens fertig proggen. Das nächste Projekt wird mit DirectX 9 in 3D geproggt.
Gruß,
Knuddelbaer
mimi - Mi 22.10.03 17:16
du brauchst keinen sprit, ich würde es so machen:
wenn maus längere zeit an einer stellen bleibt, das dann einfach dort etwas gezeichnet wird.
das ganze ich nicht schwer.
Da_Knuddelbaer - Mi 22.10.03 22:26
Du scheinst nicht zu verstehen, was ich mit einer neuen Hitbox will. :roll:
Ich habe Sprites, und ich habe nie einen Mauszeiger erwähnt, geschweige denn benutze ich die Maus in diesem Programm. KA, wie du jetzt auf die Maus kommst...
Fakt ist: Ich benutze Sprites vom Typ TimageSprite und würde gerne die Hitbox dieser Sprites (und das hat nix mit ner Maus zu tun) an einer anderen Stelle, nämlich nicht mittig, setzen.
Die Sprites selber werden durch Tastatureingaben gesteuert, die Kollisionen sollen sich aber nur auf einen unteren Bereich des Sprites und nicht mittig abgefragt werden. Sprich ich möchte dass der Sprite nur im unteren Bereich überhaupt Kollisionen haben kann, nicht oben, nicht in der Mitte.... unten.
Gruß,
Knuddelbaer
NCortex - Mi 22.10.03 23:48
mach doch ne eingene classe, die in auf die Tsprite zurückgreift und somit 2 hitboxen besitzt.... über den ersten lässt du dein Sprite laufen und das andere stellt dann deine Hitbox dar... habs zwar nie gemacht, aber müsste doch möglcih sein...
Da_Knuddelbaer - Do 23.10.03 15:11
:idea:
Wie genau meinst du das? Also eigentlich eine Klasse, die 2 Sprites hat und die "übereinanderlegt", wo dann eines davon positioniert werden kann und die Hitbox darstellt oder so?
Auch dir danke für die Antwort :)
Gruß,
Knuddelbaer
maximus - Do 23.10.03 17:57
Huhu...um dem jetzt mal ein ende zu setzen würde ich vorschlagen du leitest eine klasse ab, wo du...
function TestCollision(Sprite: TSprite): Boolean; override;...überschreibst und dein eignen kollisions-code schreibst :!:
Der original code sieht so aus:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| function TImageSprite.TestCollision(Sprite: TSprite): Boolean; var img1, img2: Integer; b1, b2: TRect; begin b1 := GetDrawRect; b2 := TImageSprite(Sprite).GetDrawRect; if (Sprite is TImageSprite) and FPixelCheck then begin
img1 := GetDrawImageIndex; img2 := TImageSprite(Sprite).GetDrawImageIndex;
Result := ImageCollisionTest(Image.PatternSurfaces[img1], TImageSprite(Sprite).Image.PatternSurfaces[img2], Image.PatternRects[img1], TImageSprite(Sprite).Image.PatternRects[img2], b1.Left, b1.Top, b2.Left, b2.Top, True);
end else Result := OverlapRect(b1, b2); end; |
...es sollte also ein leichtes sein dies so zu ändern, dass es nur unten kollidiert :wink:
zB:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| function TDeinImageSprite.GetDeinRect:TRect begin result := Rect(was du willst); end;
function TDeinImageSprite.TestCollision(Sprite: TSprite): Boolean; var img1, img2: Integer; b1, b2: TRect; begin b1 := GetDeinRect; if Sprite.inheritsFrom(TDeinImageSprite)) then b2 := TDeinImageSprite(Sprite).GetDeinRect else TImageSprite(Sprite).GetDrawRect; Result := OverlapRect(b1, b2); end; |
dies macht IMAO mehr sinn, als das geschwafel der jungs :D (pixel kollision hab ich mal rausgenommen)
cu,
mimi - Do 23.10.03 18:21
was versteht du denn unter hitBoxen ? das sind doch diese boxen die aufkommen wenn man mit der maus an einer stelle stehen bleibt längerezeit oder nicht ?
maximus - Do 23.10.03 18:32
Ist doch völlig wurst, was hitBox heisst, entscheident ist, was er meint. Ich würde aber sagen, eine hitbox ist die box, die für die kollision zuständig ist...sagt der name ja schon! Von deine komischen maus-stehen-bleib-box hab ich ja noch nie was gehört :?:
mfg.
mimi - Do 23.10.03 19:11
das was ich meine sind die "hint boxen" und nicht die "hitboxen"
Da_Knuddelbaer - Do 23.10.03 21:33
Hehe, von Hint-Boxen war nicht die rede, jetzt weiss ich aber wenigstens was du mit der Maus meintest :)
@maximus: vielen dank, werde ich direkt mal ausprobieren. Mal schauen wie gut das dann funzt :)
Gruß,
Knuddelbaer
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!