AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Logik Problem

Ein Thema von Neutral General · begonnen am 2. Feb 2007 · letzter Beitrag vom 2. Feb 2007
Antwort Antwort
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

Logik Problem

  Alt 2. Feb 2007, 13:28
Hi,

Irgendwie steh ich grad total aufm Schlauch -.-
Guckt mal:

http://img72.imageshack.us/img72/6909/kollisionks4.jpg

Meine Logik war jetzt folgende - Der Spieler (S) kollidiert mit der Wand (W) rechts (also rechte Seite von Spieler gegen Linke Seite von Wand) wenn folgendes erfüllt ist:

Delphi-Quellcode:
if (X + Width >= ASprite.X) and (Y + Height >= ASprite.Y) and (Y <= ASprite.Y + ASprite.Height) then
//...
Irgendwie haut das aber nicht hin^^ Der Spieler kollidiert immer.. Auch wenn ich irgendwo draufstehe..

Gruß
Neutral General
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Logik Problem

  Alt 2. Feb 2007, 14:28
Wer ist denn ASprite?
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#3

Re: Logik Problem

  Alt 2. Feb 2007, 14:33
Ich gehe davon aus, dass das bestimmt ein TImageSprite der Andorra ist.
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

Re: Logik Problem

  Alt 2. Feb 2007, 14:49
Richtig. Das ganze is voll unlogisch... Was muss denn alles erfüllt sein damit eindeutig klar ist das das Sprite (A) von links gegen die rechte Seite eines andere Sprites (B) stößt ?

1. Der rechteste Punkt von A muss größer oder gleich dem linkesten Punkt von B sein.
(A.x + A.Width >= B.X)
2. Außerdem darf der "Boden" von A mindestens den Y Wert haben den B hat.
(A.Y + A.Height >= B.Y)
3. .. und der "Kopf" darf max. so weit oben sein wie der Y Wert des Bodens von B.
(A.Y <= B.Y + B.Height)

DAS wäre meine Logik.. Aber das geht praktisch hinten und vorne nicht. Dabei z.B hab ich auch ne Kollision wenn ich Meter weit über dem Sprite B schwebe... Alles seltsam -.-

Gruß
Neutral General
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Logik Problem

  Alt 2. Feb 2007, 14:51
Delphi-Quellcode:
//Pseudocode; KoSy-Nullpunkt links oben
if (Player.WasLeft(Wall)) and (Player.RightEdge >= Wall.LeftEdge) then
  CollisionHorz(Player, Wall);
//Selbes für .WasRight
if (Player.WasAbove(Wall)) and (Player.BottomEdge >= Wall.TopEdge) then
  CollisionVert(Player, Wall);
//Selbes für .WasBelow
Du musst in jedem Schritt deines Kollisionssystems dir die Koordinaten des Spielers im letzten Schritt holen. war er vorher links von der Kante eine Wand und ist jetzt rechts davon, kollidiert er(entsprechend für alle anderen richtungen).

Deinen Code-Schnipsel kann ich leider nicht interpretieren: ENotEnoughInputException:'Cannot resolve Qualified Names'
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Logik Problem

  Alt 2. Feb 2007, 14:57
Und du hast es auch wirklich so umgesetzt?

IntersectRect, wäre übrigens noch die billige Alternative
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

Re: Logik Problem

  Alt 2. Feb 2007, 14:59
Also ich will/mache es so:

Ich habe ein Set:

Delphi-Quellcode:
TCollisionKind = (ckNone, ckLeft, ckTop, ckRight, ckBottom);
TCollisionPoints = Set of TCollisionKind;
Ist z.B ckRight im Set dann kann der Spieler nicht mehr nach rechts gehen:

Delphi-Quellcode:
var FCollision: TCollisionPoints;

if (GetAsyncKeyState(VK_RIGHT) < 0) and (not (ckRight in FCollision)) then
begin
 // ...
end;
In TTestSprite (mein Spieler) DoCollision:

Delphi-Quellcode:
procedure TTestSprite.DoCollision(Sprite: TSprite; var Done: boolean);
begin
  inherited DoCollision(Sprite,Done);
  FCollision := GetCollisionPoints(Sprite);
=>

Delphi-Quellcode:
function TTestSprite.GetCollisionPoints(
  ASprite: TSprite): TCollisionPoints;
begin
  // Nix machen wenn man mit dem Hintergrund kollidiert oder mit sich selbst
  if (ASprite is TBackGroundSprite) or (ASprite is TTestSprite) then
    exit;
    
  Result := FCollision;

if (X + Width >= ASprite.X) and (Y + Height >= ASprite.Y) and (Y <= ASprite.Y + ASprite.Height) then
  Result := Result + [ckRight]
else
  Result := Result - [ckRight];

//...

end;
Ich hoffe das sind genug Infos

Gruß
Neutral General
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Logik Problem

  Alt 2. Feb 2007, 18:01
Also, es ist sehr kompliziert zu überprüfen ob der Spieler sich in/an einem gegenstand befindet.

Sehr viel einfacher ist es, zu überprüfen, ob er im letzten frame links von der linken kante des gegenstands war und nun plötzlich rechts davon ist.
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: Logik Problem

  Alt 2. Feb 2007, 18:02
Zitat von DGL-luke:
Also, es ist sehr kompliziert zu überprüfen ob der Spieler sich in/an einem gegenstand befindet.

Sehr viel einfacher ist es, zu überprüfen, ob er im letzten frame links von der linken kante des gegenstands war und nun plötzlich rechts davon ist.
Und was ist in der Zeit dazwischen? Da ist er in der Wand.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#10

Re: Logik Problem

  Alt 2. Feb 2007, 18:10
dazwischen? Naja, kommt drauf an auf wie viel fps du das ding kriegst. Dann wird die Toleranz sehr schnell sehr klein.

PS: Newton rules
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:56 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz