Autor Beitrag
Da_Knuddelbaer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 485



BeitragVerfasst: 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:
ausblenden 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 user profile iconTino: Code-Tags hinzugefügt.
mimi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 485



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 485



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 485



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 126

WIN 2000
D7 Enterprise
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 485



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 896

Win XP, Suse 8.1
Delphi 4/7/8 alles prof
BeitragVerfasst: 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:
ausblenden 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);
    //inherited TestCollision(Sprite);
end;
...es sollte also ein leichtes sein dies so zu ändern, dass es nur unten kollidiert :wink:

zB:
ausblenden 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,

_________________
mfg.
mâximôv
mimi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 896

Win XP, Suse 8.1
Delphi 4/7/8 alles prof
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 485



BeitragVerfasst: 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