AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Prism Object bewegung (richtungen)
Thema durchsuchen
Ansicht
Themen-Optionen

Object bewegung (richtungen)

Ein Thema von kevSTAR · begonnen am 27. Jun 2007 · letzter Beitrag vom 29. Jun 2007
Antwort Antwort
Seite 1 von 2  1 2      
kevSTAR

Registriert seit: 5. Jun 2007
117 Beiträge
 
#1

Object bewegung (richtungen)

  Alt 27. Jun 2007, 20:59
Hi!

Wie kann ich ein object oder so wie z.B bei einem pong spiel in eine bestimmte richtung wandern lassen also z.B diagonal im 30° winkel oder so? und das wenn er die wand berührt, er zurück geworfen wird also im einfalls winkel = ausfallswinkel weiter wandert=
  Mit Zitat antworten Zitat
Chaismo

Registriert seit: 2. Apr 2007
Ort: Dresden
63 Beiträge
 
Delphi 7 Personal
 
#2

Re: Object bewegung (richtungen)

  Alt 28. Jun 2007, 17:21
Also Objekte kannst du mit left und top bewegen...willst du das Objekt um eins nach rehcts verschieben setzt du Left einfach eins weiter also z.B.Panel1.left:=Panel1.left +1 nach links dann minus
Nach unten bewegst du das ann mit Panel1.top:=Panel1.top+1 Nach unten dann auch wieder minus
Wenn du das Objekt an der Wand abprallen lassen willst musst du das kontolieren, indem du schaust, ob der Rand des Objektes am Rand vom Fenster bzw. PaintBox o.ä. ist.
Heist also...
Delphi-Quellcode:
Repeat
Panel1.left:=Panel1.left+1
Until Panel1.left=Form1.width-Panel1.width
Martin Seeler
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#3

Re: Object bewegung (richtungen)

  Alt 28. Jun 2007, 17:38
Hi,
Ich glaube, es geht um einen beliebigen Winkel, beine Lösung ist immer 45°.
Eigentlich ist das nicht sonderlich kompliziert.

Pseudocode:
Delphi-Quellcode:
var
  winkel: double; // winkel im bogenmaß: von 0 bis 2pi
  x,y: double;

[...]

procedure move;
begin
  x := x+cos(winkel); // cos für horizontale bewegung
  y := y+sin(winkel); // sin für vertikale bewegung

  panel1.left := round(x);
  panel1.top := round(y);
end;
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#4

Re: Object bewegung (richtungen)

  Alt 28. Jun 2007, 17:46
Du solltest vor dein cos(winkel) noch einen Faktor setzen, da sonst dein round darunter Probleme machen wird.

Und auch das ist noch zu viel gedacht. Wenn du nur an den Schlägern und den Wänden abprallen willst, reicht es einfach eine der Geschwindigkeiten umzudrehen. Also:

Delphi-Quellcode:
doube vx, vy;

if (Ball.y<10 or Ball.y > form.Height-10 ) then vy = -vy;
Das gleiche noch mit x und anstatt der 10 einen passenderen Wert. Und fertig. So einfach.

Zur Bewegung einfach einen Timer nehmen und alle x ms (x =x +vx ) ausführen. Für ein einfaches Pong reicht das auf jeden Fall.
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
kevSTAR

Registriert seit: 5. Jun 2007
117 Beiträge
 
#5

Re: Object bewegung (richtungen)

  Alt 28. Jun 2007, 17:49
Hmm also sagen wir mal ein object ist in der mitte der form, wie kann ich ihn dann in eine zufällige also random richtung laufen lassen?
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#6

Re: Object bewegung (richtungen)

  Alt 28. Jun 2007, 17:56
Du nimmst dir vier real variablen x,y,vx, vx. (global)

Mit Random (F1 nachschlagen) setzt du sie auf einen Wert (je nach Timereinetstellung vielleicht auf 5-10).

Dann ziehst du eine Timerkomponente auf das Form (Reiter System), setzt sein Intervall auf 100 (wäre dann eine zehntel Sekunde).
Dort schreibst du dann x := x+vx; y := y+vy; und zeigst dann dein Objekt irgendwie auf dem Formular an.
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#7

Re: Object bewegung (richtungen)

  Alt 28. Jun 2007, 18:01
Zitat von Nikolas:
Du solltest vor dein cos(winkel) noch einen Faktor setzen, da sonst dein round darunter Probleme machen wird.
Stimmt, ein Faktor für die Distanz könnte natürlich nicht Schaden, aber mit round wird es hier keine Probleme geben, weil der wert ja nicht direkt gerundet ans Panel übergeben wird, sondern zu den Variablen x bzw. y addiert werden. Erst die werden dann gerundet ans Panel übergeben.
  Mit Zitat antworten Zitat
kevSTAR

Registriert seit: 5. Jun 2007
117 Beiträge
 
#8

Re: Object bewegung (richtungen)

  Alt 28. Jun 2007, 18:07
var
Form1: TForm1;
x1,y1,winkel: double;
x,y: integer;
implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
winkel := 40;
x := 100;
y := 100;
paintbox1.canvas.Pen.Color := clblack;
Paintbox1.Canvas.MoveTo(100,100);
x1 := 100+cos(winkel);
y1 := 100+sin(winkel);
x := round(x1 * 20);
y := round(y1 * 20);
Paintbox1.Canvas.LineTo(x,y);
end;



wieso geht das nicht?
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#9

Re: Object bewegung (richtungen)

  Alt 28. Jun 2007, 18:18
Zitat:
wieso geht das nicht?
Ist auf Platz 1 der schlechtesten Fehlerbeschreibungen der Welt

WAS geht nicht? Fehlermeldungen? Wird nichts angezeigt? Was soll angezeit werden? Welchen Wert für x und y erwartest du?
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

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

Re: Object bewegung (richtungen)

  Alt 28. Jun 2007, 18:25
Zitat von Nikolas:
Zitat:
wieso geht das nicht?
Ist auf Platz 1 der schlechtesten Fehlerbeschreibungen der Welt

WAS geht nicht? Fehlermeldungen? Wird nichts angezeigt? Was soll angezeit werden? Welchen Wert für x und y erwartest du?
Hier ist keine Fehlerbeschreibung notwendig.
Ich glaube das Programm sagt alles!

1. Im FormCreate gibts doch noch nicht einmal eine Paintbox!
2. sin und cos erwarten Bogenmaß!
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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