AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Frage zu Shapes: Shape2 soll Shape1 abblocken/reflektieren

Frage zu Shapes: Shape2 soll Shape1 abblocken/reflektieren

Ein Thema von AddiDelphi · begonnen am 19. Mär 2010 · letzter Beitrag vom 22. Mär 2010
Antwort Antwort
Seite 1 von 2  1 2   
AddiDelphi

Registriert seit: 19. Mär 2010
18 Beiträge
 
#1

Frage zu Shapes: Shape2 soll Shape1 abblocken/reflektieren

  Alt 19. Mär 2010, 12:13
Hey Leute,

bin neu hier und hoffe, dass ich hier meine Frage in der richtigen Rubrik stelle.


Ich bin im Moment dran, ein Spiel zu programmieren,
in dem man mit einem Schläger (Shape2) einen Ball (Shape1) wegschlagen muss.
Also wenn Shape1 auf Shape2 kommt, sollte die Y-Bewegung von Shape1 umgewandelt werden.

Wie stelle ich das an?

Achja, und ist es möglich das Brett statt mit seperaten Knöpfen per, MAUS oder Pfeiltasten nacht rechts oder links zu verschieben?

Bitte sehr ausführlich und einfach beschreiben, ist mein erstes Spiel!

Vielen Dank
Wäre gern ein guter Programmierer
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.534 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Frage zu Shapes: Shape2 soll Shape1 abblocken/reflektier

  Alt 19. Mär 2010, 12:27
Hallo und Willkommen in der DP ,

falls es sich wirklich um .NET handelt, kann ich nicht viel dazu sagen. Du könntest aber einmal die DP-Suche nach dem Stichwort Hier im Forum suchenKollisionsabfrage bemühen, da findest Du schon einige Ansätze. Und zur Bewegung des Schlägers: hierfür könntest Du z.B. das OnMouseMove-Ereignis des Formulars verwenden, damit kannst Du zumindest eine Maussteuerung implementieren.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
AddiDelphi

Registriert seit: 19. Mär 2010
18 Beiträge
 
#3

Re: Frage zu Shapes: Shape2 soll Shape1 abblocken/reflektier

  Alt 19. Mär 2010, 12:30
Zitat von DeddyH:
Hallo und Willkommen in der DP ,

falls es sich wirklich um .NET handelt, kann ich nicht viel dazu sagen. Du könntest aber einmal die DP-Suche nach dem Stichwort Hier im Forum suchenKollisionsabfrage bemühen, da findest Du schon einige Ansätze. Und zur Bewegung des Schlägers: hierfür könntest Du z.B. das OnMouseMove-Ereignis des Formulars verwenden, damit kannst Du zumindest eine Maussteuerung implementieren.
Ich benutze Delphi 7, ist das Delphi.NET oder Delphi (Win23)?


Wie genau mach ich das mit der Maus? Kannst du mir vielleicht jeden Schritt erklären?
Wäre gern ein guter Programmierer
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.534 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Frage zu Shapes: Shape2 soll Shape1 abblocken/reflektier

  Alt 19. Mär 2010, 13:03
Delphi 7 ist definitiv Win32. Und zur Mausbewegung: pack Dir ein TShape auf Dein Formular und nenn es shpSchlaeger. Dann klickst Du auf das Formular, wechselst im Objektinspektor auf den Reiter "Ereignisse" und machst einen Doppelklick neben "OnMouseMove". Dort trägst Du nun die Zeile  shpSchlaeger.Left := X - shpSchlaeger.Width div 2; ein. Im Ganzen sollte das nun so aussehen:
Delphi-Quellcode:
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  shpSchlaeger.Left := X - shpSchlaeger.Width div 2;
end;
Nun F9 drücken und die Maus auf dem Formular bewegen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
AddiDelphi

Registriert seit: 19. Mär 2010
18 Beiträge
 
#5

Re: Frage zu Shapes: Shape2 soll Shape1 abblocken/reflektier

  Alt 19. Mär 2010, 13:34
Suuper!

Danke dir.

Jetzt muss ich es nurnoch hinbekommen, den Ball vom Schläger abprallen zu lassen..

das krieg ich nicht hin.

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls,mtBall, mTBrett, StdCtrls, Buttons;

type
  TForm1 = class(TForm)
    Shape1: TShape;
    Button8: TButton;
    Button10: TButton;
    Timer1: TTimer;
    Button3: TButton;
    Button12: TButton;
    Shape2: TShape;
    BitBtn1: TBitBtn;
    Label1: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure Button8Click(Sender: TObject);
    procedure Button10Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure Timer1Timer(Sender: TObject);
    procedure Button12Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  Ball:TBall;
  Brett:TBrett;
  rechts:Integer;
  runter:Integer;
implementation

{$R *.dfm}




procedure TForm1.FormCreate(Sender: TObject);
begin
  Ball:=TBall.create;
  Brett:=TBrett.create;
  Ball.setzex (Shape1.left);
  Ball.setzey (Shape1.top);
  Brett.setzea (Shape2.left);
  Brett.Setzeb (Shape2.top);
  rechts:=5;
  runter:=5;

end;




procedure TForm1.Button8Click(Sender: TObject); //Brett links
begin
  Brett.bewegebrett(-20,0);
  Shape2.Left:=Brett.GibA;
  Shape2.Top:=Brett.GibB;
end;


procedure TForm1.Button10Click(Sender: TObject); //Brett rechts
begin
  Brett.bewegebrett(20,0);
  Shape2.Left:=Brett.GibA;
  Shape2.Top:=Brett.GibB;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Ball.free;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
  begin
    Ball.bewege(rechts,runter);
    Shape1.Left:=Ball.GibX;
    Shape1.Top:=Ball.GibY;

      if Ball.gibX>Form1.clientwidth-Shape1.width
          then
            begin
              rechts:=-rechts;
              Ball.setzeFarbe(clblue);
              Shape1.brush.color:=Ball.gibFarbe;
            end
      else
          if Ball.gibY>Form1.clientheight-Shape1.height
              then
                  begin
                        runter:=-runter;
                        timer1.Enabled:=false;
                        showmessage('Game Over Baby!')
                  end
      else
          if Ball.gibX<0
              then
                begin
                  rechts:=-rechts;
                  Ball.setzeFarbe(clyellow);
                   Shape1.brush.color:=Ball.gibFarbe;
                end
      else
          if Ball.gibY<0
            then
              begin
                runter:=-runter;
                Ball.setzeFarbe(clred);
                Shape1.brush.color:=Ball.gibFarbe;
              end

      else
          if

                   [b]HIER MUSS ES REIN... ABER WAS?[/b]

            then runter:=-runter;

end;

procedure TForm1.Button12Click(Sender: TObject);
begin
  timer1.Enabled:=false;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  timer1.Enabled:=true;
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  close;
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  Shape2.Left := X - Shape2.Width div 2;
end;

end.
Wäre gern ein guter Programmierer
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.534 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Frage zu Shapes: Shape2 soll Shape1 abblocken/reflektier

  Alt 19. Mär 2010, 13:44
Überleg doch einmal: die Y-Koordinate (= Ball.Top) des Balls muss ja Schäger.Top - BallHeight sein (ggf. mit einer gewissen Toleranz). Und für X gibt es die folgenden Möglichkeiten:
- die linke Seite des Balls liegt zwischen der linken und der rechten Seite des Schlägers
- die rechte Seite des Balls liegt zwischen der linken und der rechten Seite des Schlägers
- die linke Seite des Balls ist kleiner als die linke des Schlägers und die rechte größer als die des Schlägers (völlige Überlappung)

Versuch das einmal in Code zu formulieren.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
AddiDelphi

Registriert seit: 19. Mär 2010
18 Beiträge
 
#7

Re: Frage zu Shapes: Shape2 soll Shape1 abblocken/reflektier

  Alt 19. Mär 2010, 14:12
Zitat von DeddyH:
Überleg doch einmal: die Y-Koordinate (= Ball.Top) des Balls muss ja Schäger.Top - BallHeight sein (ggf. mit einer gewissen Toleranz). Und für X gibt es die folgenden Möglichkeiten:
- die linke Seite des Balls liegt zwischen der linken und der rechten Seite des Schlägers
- die rechte Seite des Balls liegt zwischen der linken und der rechten Seite des Schlägers
- die linke Seite des Balls ist kleiner als die linke des Schlägers und die rechte größer als die des Schlägers (völlige Überlappung)

Versuch das einmal in Code zu formulieren.
Ich versuchs schon seit gestern..

und kann mir unter deiner Beschreibung nichts vorstellen, was ich mir jetzt vorstellen muss.

Sorry und danke für deine Mühe
Wäre gern ein guter Programmierer
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.534 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Frage zu Shapes: Shape2 soll Shape1 abblocken/reflektier

  Alt 19. Mär 2010, 14:25
Dann mach Dir doch einfach eine Zeichnung.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
AddiDelphi

Registriert seit: 19. Mär 2010
18 Beiträge
 
#9

Re: Frage zu Shapes: Shape2 soll Shape1 abblocken/reflektier

  Alt 19. Mär 2010, 15:12
mit "die Y-Koordinate (= Ball.Top) des Balls muss ja Schäger.Top - BallHeight sein"

und "die linke / rechte Seite vom Schläger / Ball" ..


Darüber denke ich die ganze Zeit nach, kannst du mir nicht den Quellext geben?

Dann kann ichs ehernachvollziehen, da ich nicht genau weiß was du mir damit sagen willst (habs versucht zu zeichnen).

Danke.
Wäre gern ein guter Programmierer
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.534 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: Frage zu Shapes: Shape2 soll Shape1 abblocken/reflektier

  Alt 20. Mär 2010, 17:09
Die untere Kante des Balls entspricht doch Ball.Top + Ball.Height, sind wir uns da einig? Dementsprechend ist dann die rechte Kante des Balls Ball.Left + Ball.Width, das gleiche gilt äquivalent für den Schläger. Nun kann man das ganz einfach ausrechnen, dafür muss ich Dir keinen Quelltext geben.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 17:31 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