![]() |
Ganz einfaches Fußballgame
Hallo,
ich wüde gerne ein gaaaanz einfach Fußball game proggen... Der Spieler soll immer in der Mitte stehen, und um ihn herum soll das Spielfeld sich bewegen...das klappt auch alles. meine Frage: Wie bekomm ich es hin, dass man dem anderen, wenn man neben ihm steht auf Tastendruck den Ball bnehmen kann? Also wie bei Fifa, dass man auf den anderen zuläuft, und ihm dann den Ball abnehmen kann wenn man in seiner näche steht. Man könnte zwar abfragen ob die beiden Spieler die gleiche Position haben, aber man sollte den Ball auch bekommen, wenn man neben ihm steht, also egal aus welcher richtung. jemand ne idee? Danke schonmal :thuimb: |
Re: Ganz einfaches Fußballgame
Entfernung messen!
(Stichwort: Vektoren) |
Re: Ganz einfaches Fußballgame
Hab im Forum schon gesucht, aber nichts gefunde...weißt du wie ich die Entfernung messen kann?
|
Re: Ganz einfaches Fußballgame
Also, Mathe wasweißichwievielte Klasse:
Distanz zwischen Punkt P1(x1, y1) und P2(x2, y2):
Delphi-Quellcode:
Also, das müsste funzen...wo die Herrschaften stehen weißt du ja,oder?
dist := sqrt(sqr(x2-x1)+sqr(y2-y1));
|
Re: Ganz einfaches Fußballgame
Du hast zwei Koordinaten, mit je einmal X und einmal Y.
Angemommen ein Spieler steht bei X=10, Y=20 ein weiterer bei X=15, Y=50 (hier ists sofort ersichtlich, soll so sein, damit man sieht, dass es wirklich so geht ;) ) Dies sind 2 Vektoren A=(10, 20); B=(15, 20) Der Koordinatenunterschied ergibt sich aus A-B = (-5, 0) Dies ist der Vektor zwischen den beiden Spielern. Und dessen Länge ist dann die Entfernung - die sich wie folgt berechnet: Länge = sqrt(x² + y²) ind diesem Fall Länge = sqrt(-5² + 0²) = sqrt(-5²) = sqrt(25) = 5 *tädäää* - der Abstand zwischen den Spielern - ganz egal wie sie zueinander stehen. gruss, dizzy \\edit: mal wieder zu langsam... |
Re: Ganz einfaches Fußballgame
und abnehmen: du machst
Delphi-Quellcode:
also so in etwa..is teilweise nur symbolisch
if keydown(watweissich)
then Begin gegner.image:=ohneball; for i:=1 to x1-x2 do begin ball.x:=ball.x- (x1-x2); ball.y:=ball.y- (y1-y2) div (x1-x2);//dann bewegts sich gleichmässig end; spieler.image:=mitball; end; gibt noch ungelöste frage, aber so isses doc vom grundsatz schon ma ganz gut auch so sachen obs nicht ball.x:=ballx.x + sein muss, ausprobieren :-) |
Re: Ganz einfaches Fußballgame
Hallo,
noch ein kleiner Tipp für die Umsetzung. Die Entfernung berechnet sich, wie ja schon beschreiben, mit
Delphi-Quellcode:
Wenn du nun die If-Abfrage bastelst, in der die Entfernung überprüft wird, dann quadriere besser beide Seiten der Gleichung, d.h. statt
dist:=sqrt(sqr(x1-x2)+sqr(y1-y2));
Delphi-Quellcode:
schreibst du besser
if sqrt(sqr(x1-x2)+sqr(y1-y2))<distmax then blablabla
Delphi-Quellcode:
Inhaltlich passiert genau dasselbe, es ist aber ein kleines bißchen schneller.
if (sqr(x1-x2)+sqr(y1-y2)<distmax*distmax then blablabla
Grüße Seniman |
Re: Ganz einfaches Fußballgame
ähhh...ja
Ich bin nicht gerade DAS Ass in Mathe, also falls jemand dass alles versteht, könnte er mir vielleicht nen Beispiel geben, wie ich die entfernung zwisch image1 und image2 messe? |
Re: Ganz einfaches Fußballgame
Naja, du musst die Position eines Images kennen: x1, y1.
Außerdem musst du einen Hotspot-Offset definieren: ox1, oy1. Der Hotspot ist der Punkt, von dem die Entfernung aus gemessen wird. Die Position ist immer relativ zu (x1, y1) definiert. Für das zweite Image gilt natürlich das gleicht. Also:
Delphi-Quellcode:
Ich glaube du meintest das, oder?
x1 := Image1.Left;
y1 := Image1.Top; x2 := Image2.Left; y2 := Image2.Top; dist := sqrt(sqr((x2+ox2)-(x1+ox1))+sqr((y2+oy2)-(y1+oy1))); |
Re: Ganz einfaches Fußballgame
wie bekomm ich denn den hotspot-offset raus???
|
Re: Ganz einfaches Fußballgame
Sorry, das hab ich vergessen zu sagen :oops: Den musst du dir festlegen
Mit Hilfe von dem kannst du bestimmen, von welcher Position startend er die Distanz berechnen soll. Dies ist nützlich, wenn du z.B. bei diesem Spiel verschiedene Spielerfiguren in Images hast, welche den Fuß an einer anderen Position haben. |
Re: Ganz einfaches Fußballgame
Wahrscheinlich bin ich einfach zu dumm dazu...kann mir nicht jemand ein Beispiel schreiben?
Ich sitz hier nun schon seit stunden herum, aber ich raffs einfach nicht :duck: BITTÄÄÄ :| |
Re: Ganz einfaches Fußballgame
Wenn bei dir jeder SPieler ein Image ist, dann kannst du einen beliebigen Punkte nehmen, z.B. (0/0) als hotspot-offset.
|
Re: Ganz einfaches Fußballgame
So, mein Quelltext sieht jetzt so aus:
Code:
Wenn ich nun auf F9 drücke kommt dieser Fehler:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, jpeg, ExtCtrls; type TForm1 = class(TForm) Button1: TButton; Image1: TImage; Image2: TImage; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; x1,x2,y1,y2,ox1,ox2,oy1,oy2:integer; dist:integer; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin x1 := Image1.Left; y1 := Image1.Top; x2 := Image2.Left; y2 := Image2.Top; dist := sqrt(sqr((x2+ox2)-(x1+ox1))+sqr((y2+oy2)-(y1+oy1))); end; procedure TForm1.FormCreate(Sender: TObject); begin ox1:=0; ox2:=0; oy1:=0; oy2:=0; end; end.
Code:
Jemand ne Idee woran das liegen könnte???
[Fehler] Unit1.pas(37): Inkompatible Typen: 'Integer' und 'Extended'
[Fataler Fehler] Project1.dpr(5): Verwendete Unit 'Unit1.pas' kann nicht compiliert werden |
Re: Ganz einfaches Fußballgame
:wall: :wall: :wall: Du hast "dist" als Integer deklariert. Es muss ein Float-Typ sein, oder dur rundest. :zwinker:
|
Re: Ganz einfaches Fußballgame
Sorry, aber was ist ein Float-Typ??? :duck:
|
Re: Ganz einfaches Fußballgame
real, real48, single, double, extended.
(real=double (bei aktuellen CPUs); real48 nutzt keiner mehr) Auf aktuellen FPUs empfiehlt sich double (64 Bit breit -> FPU-Register auch) Halt Fließkommazahlen. |
Re: Ganz einfaches Fußballgame
schreibe einfach anstatt
Delphi-Quellcode:
das hier:
dist: integer;
Delphi-Quellcode:
oder:
dist: real;
Delphi-Quellcode:
...
dist: extended;
|
Re: Ganz einfaches Fußballgame
Ja, hab ich schon, trotzdem danke...
So, nun müsste es gehen...danke für die viele geduld mit mir nap :D |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:31 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz