AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi DelphiX Kollisionsabfrage
Thema durchsuchen
Ansicht
Themen-Optionen

DelphiX Kollisionsabfrage

Ein Thema von -homer- · begonnen am 14. Feb 2004 · letzter Beitrag vom 14. Feb 2004
Antwort Antwort
-homer-

Registriert seit: 1. Aug 2003
Ort: Düsseldorf
339 Beiträge
 
Delphi 7 Personal
 
#1

DelphiX Kollisionsabfrage

  Alt 14. Feb 2004, 15:42
hi,

ich habe mich gerade daran gemacht DelphiX zu lernen. Als Übung habe ich mir selber eine Aufgabe gegeben: Das Spiel, EarthPong (Delphi/Demos), nachzumachen. Soweit habe ich alles geschafft (Der Ball springt munter hin und her). Nur eines klappt noch nicht: Den Ball davor zu stoppen, dass er unten aufkommt. Genau wie in dem DemoSpiel will ich das auch mittels Paddel machen (Der Ball soll wieder Apprallen). Ich weiß schon, wie ich das mit dem 'Abprallen' machen muss, aber leider weiß ich nicht, wie ich feststellen kann, wann der ball den schläger berührt.
Gibt es hier jemanden, der eine Antwort darauf weiß???



-homer-
Aaron B.
www.fainds-production.de.vu wir schreiben deine Programme, entwickeln Cs Movies... Suchen Member

Melden bei ISOF "ISOFAIND"... ICQ: 318117464
#FAINDs
  Mit Zitat antworten Zitat
-homer-

Registriert seit: 1. Aug 2003
Ort: Düsseldorf
339 Beiträge
 
Delphi 7 Personal
 
#2

Re: DelphiX Kollisionsabfrage

  Alt 14. Feb 2004, 16:46
hi,

auch hier weiß keiner die lösung???


-homer-
Aaron B.
www.fainds-production.de.vu wir schreiben deine Programme, entwickeln Cs Movies... Suchen Member

Melden bei ISOF "ISOFAIND"... ICQ: 318117464
#FAINDs
  Mit Zitat antworten Zitat
Dagon

Registriert seit: 13. Jul 2003
505 Beiträge
 
Delphi 7 Professional
 
#3

Re: DelphiX Kollisionsabfrage

  Alt 14. Feb 2004, 16:52
Einfach den Abprallen-Teil in die DoMove-Methode vom TPaddel reinschreiben. Das wärs. Und sonst zeig mal ein bisschen Code.
  Mit Zitat antworten Zitat
-homer-

Registriert seit: 1. Aug 2003
Ort: Düsseldorf
339 Beiträge
 
Delphi 7 Personal
 
#4

Re: DelphiX Kollisionsabfrage

  Alt 14. Feb 2004, 17:50
hi,

also das ist mein Code:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DXDraws, DXSprite, StdCtrls, DXClass;

type
  TForm1 = class(TForm)
    DXDraw1: TDXDraw;
    DXTimer1: TDXTimer;
    DXImageList1: TDXImageList;
    Blinks: TButton;
    Brechts: TButton;
    procedure FormActivate(Sender: TObject);
    procedure DXTimer1Timer(Sender: TObject; LagCount: Integer);
    procedure BlinksClick(Sender: TObject);
    procedure BrechtsClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  x: Integer = 0;
  y: Integer = 0;
  px: Integer = 320;
  vx: Integer = 1;
  vy: Integer = 1;

implementation

{$R *.dfm}

procedure TForm1.FormActivate(Sender: TObject);
begin
  Form1.Cursor := crCross;
end;

procedure TForm1.DXTimer1Timer(Sender: TObject; LagCount: Integer);
begin
  if not DXDraw1.CanDraw then
    Exit;
  x := x + vx;
  y := y + vy;
  if x <= 0 then
    vx := vx * -1;
  if x >= DXDraw1.Width - DXImageList1.Items[0].Width then
    vx := vx * -1;
  if y <= 0 then
    vy := vy * -1;
  if y >= Form1.Height - DXImageList1.Items[0].Height then
    ShowMessage('Sie haben verloren!');
  DXImageList1.Items[1].draw(DXDraw1.Surface, 0, 0, 0);
  DXImageList1.Items[0].Draw(DXdraw1.Surface, x, y, 0);
  DXImageList1.Items[2].Draw(DXDraw1.Surface, px, 400, 0);
  DXDraw1.Flip;
  DXDraw1.Surface.Fill(0);
end;

procedure TForm1.BlinksClick(Sender: TObject);
begin
  px := px - 10;
end;

procedure TForm1.BrechtsClick(Sender: TObject);
begin
  px := px + 10;
end;

end.

Bin mal gespannt.


-homer-
Aaron B.
www.fainds-production.de.vu wir schreiben deine Programme, entwickeln Cs Movies... Suchen Member

Melden bei ISOF "ISOFAIND"... ICQ: 318117464
#FAINDs
  Mit Zitat antworten Zitat
-homer-

Registriert seit: 1. Aug 2003
Ort: Düsseldorf
339 Beiträge
 
Delphi 7 Personal
 
#5

Re: DelphiX Kollisionsabfrage

  Alt 14. Feb 2004, 17:53
hi,

was ich vergessen habe zu sagen ist: Image0 = Ball, Image1 = Hintergrund, Image2 = Paddel.



-homer-
Aaron B.
www.fainds-production.de.vu wir schreiben deine Programme, entwickeln Cs Movies... Suchen Member

Melden bei ISOF "ISOFAIND"... ICQ: 318117464
#FAINDs
  Mit Zitat antworten Zitat
Dagon

Registriert seit: 13. Jul 2003
505 Beiträge
 
Delphi 7 Professional
 
#6

Re: DelphiX Kollisionsabfrage

  Alt 14. Feb 2004, 18:00
Du solltest unbedingt mit Klassen arbeiten, sonst wird das nie was!
  Mit Zitat antworten Zitat
-homer-

Registriert seit: 1. Aug 2003
Ort: Düsseldorf
339 Beiträge
 
Delphi 7 Personal
 
#7

Re: DelphiX Kollisionsabfrage

  Alt 14. Feb 2004, 18:18
hi,

geht das denn nicht auch ohne klassen???


-homer-
Aaron B.
www.fainds-production.de.vu wir schreiben deine Programme, entwickeln Cs Movies... Suchen Member

Melden bei ISOF "ISOFAIND"... ICQ: 318117464
#FAINDs
  Mit Zitat antworten Zitat
Dagon

Registriert seit: 13. Jul 2003
505 Beiträge
 
Delphi 7 Professional
 
#8

Re: DelphiX Kollisionsabfrage

  Alt 14. Feb 2004, 18:23
Ich würde eher sagen: nein. Die SpriteEngine und so ist in die Klasse TIMageSprite eingebetet. Du wirst also schwierigkeiten bei der Kollision haben und so. Mit Klassen istes einfacher, übersichtlicher, und einfach besser. Was spricht also dagegen?

P.S. Ich habs noch nie ohne Klassen versucht.
  Mit Zitat antworten Zitat
-homer-

Registriert seit: 1. Aug 2003
Ort: Düsseldorf
339 Beiträge
 
Delphi 7 Personal
 
#9

Re: DelphiX Kollisionsabfrage

  Alt 14. Feb 2004, 20:42
hi,

leider kenne ich mich mit Klassen noch nicht so aus. Kannst du mir da vielleicht ein Beispiel geben?? Danke, schon mal im Vorraus.



-homer-
Aaron B.
www.fainds-production.de.vu wir schreiben deine Programme, entwickeln Cs Movies... Suchen Member

Melden bei ISOF "ISOFAIND"... ICQ: 318117464
#FAINDs
  Mit Zitat antworten Zitat
Dagon

Registriert seit: 13. Jul 2003
505 Beiträge
 
Delphi 7 Professional
 
#10

Re: DelphiX Kollisionsabfrage

  Alt 14. Feb 2004, 21:00
So sieht die deklaration der Klasse aus (ist ein Beispiel, kann aber einfach erweitert werden):

Delphi-Quellcode:
  TBall = class (TImageSprite)
  private
    Winkel: Extended;
  public
    constructor Create (AParent: TSprite); override;
    procedure DoMove (MoveCount: Integer); override;
    procedure DoCollision (Sprite:TSprite; var Done: Boolean); override;
  end;
Im Konstruktor ordnest du z. B. das Image dem Sprite zu, initialisierst die Startposition und alles was es sonst noch braucht:

Delphi-Quellcode:
  inherited Create (AParent);
  Image := Form1.DXImageList1.Items.Find('Ball');
  Width := Image.Width;
  Height := Image.Height;
  Winkel := 220;
  X := 200;
  y := 400;
  Z := 0;
In der DoMove-Methode schreibst du alles rein, was mit der Bewegung des jeweiligen Sprites zutun hat (auch die Kollision mit dem Rand eines Spielfelds kommt da rein!).
Beispiel:
Delphi-Quellcode:
...
if isLeft in Form1.DXInput1.States then
  X := X - xDiff;
....
Und in die DoCollision-Methode schreibst du alles rein, was mit der Kollision zutun hat. Folgendes Bsp. macht, dass wenn der Ball mit einem Gegenstand zusammen trifft er zerstört wird:

Delphi-Quellcode:
if Sprite is TGegenstand then
  self.Dead;
Am besten du liest ein paar Tuts durch (sowohl zu den Klassen als auch zu DelphiX).

  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 05:58 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