Entwickler-Ecke

Multimedia / Grafik - Programmieren einer Flugbahn


Anxiety - Di 27.06.06 12:00
Titel: Programmieren einer Flugbahn
Hallo Leute

ich und ein Kumpel sollen für Informatik ein Spiel programmieren. Es handelt sich um ein Spiel, bei dem sich 2 Spieler den Ball hin-und her köpfen. Jetzt haben wir nur ein Problem bei der Programmierung der Flugkurve des Balles:
Die Bahnkurve haben wir mit Hilfe von Punkten (und mathematischem Hintergrundwissen ;) ) bereits berechnet.

Jetzt ist nur die Frage, wie wir diese Kurve in das Programm einfügen können, sodass sich der Ball genau an der Kurve entlang bewegt? Der Ball ist als Image programmiert.

Danke für eure Hilfe


azubi_20 - Di 27.06.06 12:06


Delphi-Quelltext
1:
2:
xKoord := image.top + image.heigth div 2
yKoord := image.left + image.witdh div 2


gibt die Koordinaten des Mittelpunktes des images an.
ACHTUNG : der Koordinaten-Ursprung befindet sich in der linken oberen Ecke


Anxiety - Do 29.06.06 16:36

ich weiß nicht, ob ich was falsch machen..aber bei meiner version von Delphi (D6) kennt er die Funktion "xKoord" und "yKoord" nicht.
Was mir außerdem noch unklar ist:
wie bekommt man den Ball dazu, sich zu bewegen (und eben später dann an der Kurve entlang)??


crowley - Fr 30.06.06 08:06

xKoord und yKoord sind Variablen, die du dir deklarieren solltest ;)

in welcher form auch immer (schleife, timer, ...) du deinen "ball" bewegen möchtest... dafür brauchst du doch die koordinaten des "balles"... und den richtest du auf deiner "flugkurve" aus...


templer - So 02.07.06 13:58

hi,

ich bin der kumpel, von dem oben die rede war, der auch an dem projekt mitarbeitet. erstmal danke! der ball bewegt sich jetzt auf einer parabel von links nach rechts ;)

naja soweit, so gut; jetzt haben wir nur folgendes problem:
der ursprung des koordinatensystems beginnt in delphi ja in der linken oberen ecke. und parabeln werden generell von links nach rechts dargestellt; wie bekomme ich delphi nun dazu, meinen ball auch von rechts nach links entlang einer parabel zu bewegen?? muss ich dazu einen neuen ursprung, also ein neues koordinatensystem deklarieren??, und wenn ja wie??

im moment sieht mein quelltext folgendermaßen aus:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TForm1.Timer1Timer(Sender: TObject);
begin

y := imball1.top + imball1.height div 2;                                         // y-koordinate des balles
x := imball1.left + imball1.width div 2;                                         // x-koordinate des balles
u := ((25847/10000000)*sqr(x))-((19861071/10000000)*x)+(462551776/1000000);      //u= variable für flugbahn 1

imball1.Left := round(x);                                                        //flugkurve 1
imball1.Top := round(u);


y, x und u sind vom typ real.

wäre nett, wenn ihr uns auch bei diesem poblem weiterhelfen könntet ;)

Moderiert von user profile iconTino: Code- durch Delphi-Tags ersetzt


templer - Mo 10.07.06 20:23

...

heißt das, dass ihr auch keine ahnung habt ?!?

falls doch - dann postet bitte mal euren vorschlag; thx


Fighter#1 - Mo 10.07.06 20:51

Wo ist das Problem?
Du meinst einfach das der Ball in die andere Richtung fährt?
Einfach X am Anfang setzen (z.B. im OnCreate vom Form) und dann aus

Delphi-Quelltext
1:
2:
x := imball1.left + imball1.width div 2;
x := imball1.left - imball1.width div 2;

und ans Ende des Timers setzen, sieht dann so aus:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
u := ((25847/10000000)*sqr(x))-((19861071/10000000)*x)+(462551776/1000000); 
imball1.Left := round(x) ;                                                        
imball1.Top := round(u) ;
x := imball1.left - imball1.width div 2;                                       
end;


root_at_localhost - Mo 10.07.06 21:18

also so wie ich das sehe wird der Wert der Variable y nicht verwendet, das kommt mir schonmal falsch vor. Pack mal das ganze Projekt (*.dpr, *.pas, *.dfm) in eine zip-Datei und stell es hier rein, an dem schnipsel kann man ja echt nix sehen...


templer - Di 11.07.06 10:53

ja die variable y wird nicht verwendet. mir is auch im nachhinein aufgefallen, dass der y-wert des balles mit der flugkurve nichts zu tun hat.


Fighter#1 - Di 11.07.06 14:17

Erklär bitte nochmal dein Problem.
Soweit ich das verstanden habe, löst meine Quelltext änderung dein Problem schon, wenn man sich alles durchliest.


templer - Di 11.07.06 22:06

ja, dein quelltext löst das problem.
mal schaun vllt ergibt sich während des proggens noch ein wieteres problem, aber falls nicht is die sache damit erledigt ;)
thx


templer - Mi 19.07.06 15:41

so es ist geschafft ;)
das Prog läuft (naja so halbwegs)
ich stells mal zum Download rein; falls ihr dann noch irgendwelche Anregungen oder Verbesserungsvorschläge habt könnt ihr euch gerne bei mir melden.

(PS: Spielfiguren sind einfach 3 Lehrer ^^ ... unkreativ aber was solls)


azubi_20 - Mi 19.07.06 16:44

der ball schlingert immer so komisch, soll dass so sein?


templer - Mi 19.07.06 18:08

naja nich wirklich. Ich weiß auch nicht wieso das so ist; ich schätz, dass es irgendein fehler mim zufallsgenerator ist (liefert zufallszahlen zwischen 1 und 3; je nach zahl wird eine bestimmte flugkurve ausgeführt, zb: pos 1 nach pos 6; pos 1 nach pos 5; pos 1 nach pos 4; pos 2 nach pos 6 usw.)
aber hab ehrlich gesagt keine ahnung ;)


templer - Mi 13.09.06 14:50

ich hab noch ein bisschen an meinem Programm weitergearbeitet - sound + hintergrundmusik und die grafik ist etwas verändert

jetzt möchte ich in das ganze auch noch eine Netzwerkvariante einbauen; habe allerdings überhaupt keine ahnung, wie das ganze gehn soll, da ich ein absoluter neuling in sachen programmierung bin.
es soll hat am ende so sein, dass spieler 1 die linke spielfgur steuert und spieler 2 die rechte
das ganze muss dann über einen speziellen port ablaufen, wobei dann ständig informationen über die position des balles und der spielfiguren versand werden müssen - oder?!
nur wie kann ich das programmieren ?

wäre nett, wenn ihr mir hierbei helfen könntet

MFG


wulfskin - Mi 13.09.06 15:30

Hallo, neue Frage neuer Thread :)!
Außerdem gibt es davon schon etliche im Forum. Bei den Tutorial ist eine Anleitung wie man Daten versenden kann. Jetzt muss t du dir halt überlegen, welche Daten du übertragen möchtest und dir dafür ein passendes Protokoll überlegen.
Am einfachsten wäre es wohl, einfach die Zufallszahl zu übertragen, die Flugbahn können dann beide selbständig berechnen. Wenn die Flugbahn noch von zusätzlichen Parameter bestimmt ist, dann diese mitübertragen.
Wichtig ist, dass, wie gesagt, die Flugbahn beide selber berechnen können, dann sparst du dir unnötigen Traffic. Wenn es dir nicht sicher genug ist, kannst du ja zwischendurch abgleichen, aber ich denke für die einfachen Zwecke sollte es reichen!

Viele Grüße,
Hape