Autor |
Beitrag |
Da_Knuddelbaer
      
Beiträge: 485
|
Verfasst: So 19.10.03 12:45
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
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: 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.
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
Da_Knuddelbaer 
      
Beiträge: 485
|
Verfasst: 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
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: 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 ?
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
Da_Knuddelbaer 
      
Beiträge: 485
|
Verfasst: 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
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: 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.
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
Da_Knuddelbaer 
      
Beiträge: 485
|
Verfasst: Mi 22.10.03 22:26
Du scheinst nicht zu verstehen, was ich mit einer neuen Hitbox will.
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
      
Beiträge: 126
WIN 2000
D7 Enterprise
|
Verfasst: 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...
_________________ "...by all means, do not use a hammer." (aus einer IBM Technikerdokumentation ca. 1920)
--->außer es kam von Microsoft<---
|
|
Da_Knuddelbaer 
      
Beiträge: 485
|
Verfasst: Do 23.10.03 15:11
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
      
Beiträge: 896
Win XP, Suse 8.1
Delphi 4/7/8 alles prof
|
Verfasst: 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
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  (pixel kollision hab ich mal rausgenommen)
cu,
_________________ mfg.
mâximôv
|
|
mimi
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: 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 ?
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
maximus
      
Beiträge: 896
Win XP, Suse 8.1
Delphi 4/7/8 alles prof
|
Verfasst: 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.
_________________ mfg.
mâximôv
|
|
mimi
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: Do 23.10.03 19:11
das was ich meine sind die "hint boxen" und nicht die "hitboxen"
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
Da_Knuddelbaer 
      
Beiträge: 485
|
Verfasst: 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
|
|