![]() |
Re: 2d game:ping-pong
|
Re: 2d game:ping-pong
lol ich krieg die ganze zeit fehlermeldungen bei eurem code..
so bringt es nichts, ihr müht euch ab und ich kann eure codes trozdem nicht anweden... könntet ihr ma gucken ob die version in dem magazin(siehe link 1 thread vorher) "richtig" ist? ich kenn mich da nicht aus, daher frag ich so blöd |
Re: 2d game:ping-pong
Da die is die richtige.
|
Re: 2d game:ping-pong
Danke!
Dann mal schnell einkaufen gehn^^ bis gleich! |
Re: 2d game:ping-pong
Zitat:
Delphi-Quellcode:
Deine Klassen haben dann noch eine "Draw" (von mir aus auch "Zeichnen") Methode, der ein Bitmap übergeben wird, auf das sie sich dann zeichnen. Dann noch eine weitere Klasse, die Engine, sie verwaltet die anderen Objekte und das Bitmap. Über einen TTimer oder QueryPerformanceCounter wird die Methode "Advance" der Engine aufgerufen, diese ruft dann die "Advance"-Methoden der anderen Objekte auf. Beim OnPaint des Formulars wird eine Methode der Engine aufgerufen, die das Bitmap auf die Canvas der Form kopiert.
type
TBall = class private FPosition: TPoint; FSpeed: TPoint; //TPoint als Vektor, der in jedem Frame zur Position addiert wird [...] So stelle ich mir das vor :mrgreen: . [edit] Ich sollte keinen Beitrag vor dem Mittagessen anfangen und danach abschließen :oops: . |
Re: 2d game:ping-pong
Zitat:
Es geht dabei um eine Box mit 4 Seitewänden, und einem Ball der drinnen hin- und herrollt. Die Box ist 20*14 groß (wenn ich mich recht erinnere...), wenn man annimmt dass die Box genau in der Mitte ist ergeben sich folgende Konstanten:
Code:
Wenn der Ball an der linken Wand abprallt, muss ich einfach die x-Komponente der Bewegungsrichtung ändern. Da gibts nur ein Problem: Der Ball wird jedes Frame weiterbewegt, und die Bewegung ist bei jedem Frame verschieden: dauert das Frame länger, bewegt sich auch der Ball weiter.
const integer LinkeWand = -10;
const integer RechteWand = 10; const integer ObereWand = 7; const integer UntereWand = -7; Ich überprüfe, ob die Koordinaten des Balls plus Ballradius bereits außerhalb der Box sind. Wenn ich dann die y-Komponente der Bewegungsrichtung umdrehe, kann es passieren dass der Ball zwei Frames braucht um wirklich wieder in der Box zu sein. Und während dieser zwei Frames wird die Bewegungsrichtung des Balles ständig umgedreht! Er hüpft dann hin- und her und kommt nicht mehr in die Box zurück. Um das zu verhindern, verwende ich die Variable outside. Wenn sie auf true ist, dann heißt das dass der Ball gerade außerhalb der Box ist - in dem Fall drehe ich die Bewegungsrichtung nicht um, solange bis er wieder drinnen ist. Zitat:
Zitat:
Mein Code ist natürlich nur für den Fall dass die Flächen an denen der Ball abprallt achsenparallel sind. Nur dann ist es so einfach. Zitat:
Code:
VerwendeteVariablen:
double TimeCorrectionFactor; float FrameTime; __int64 PerformanceFrequency; __int64 PerformanceCounter; float StartTime; // Zeitwert bei Programmstart float LastTime; // Der Zeitwert beim letzten Frame float CurrentTime; // Derzeitiger Zeitwert in Sekunden // Beim Programmstart aufrufen, aber möglichst knapp vor dem Berechnen des ersten Frames: QueryPerformanceFrequency(PerformanceFrequency); TimeCorrectionFactor=1/PerformanceFrequency; QueryPerformanceCounter(PerformanceCounter); StartTime=PerformanceCounter*TimeCorrectionFactor; LastTime=StartTime; // Jedes Frame: QueryPerformanceCounter(PerformanceCounter); CurrentTime=PerformanceCounter * TimeCorrectionFactor; FrameTime=(CurrentTime-LastTime); LastTime=CurrentTime; // Bewegen eines Objekts unter der Annahme dass objekt.bewegung und objekt.dimension beides zweidimensionale Vektoren mit Gleitkommazahlen sind und die verwendete.... ich sag mal "Grafik-Engine" (z.B. ein TBitMap, die WinAPI oder DirectX oder OpenGL.....) Gleitkommazahlen unterstützt. Auf ein Bitmap kannst du nicht mit Kommazahlen zeichnen, da gibts nur ganze Pixelnummern! objekt.position = objekt.position + objekt.bewegung * FrameTime Zitat:
Ich weiß nicht was du von den Informationen brauchen kannst, aber die oben geschilderte Methode zur Zeitmessung und framerate-unabhängigen Objektbewegung funktioniert äußerst gut, sofern die dort erwähnten Bedingungen gegeben sind. |
Re: 2d game:ping-pong
1.habe jetzt dieses mag gekauft und versuche gleich delphi 2005pe zu installieren
2.wow-das ist ja schon ein schwerer happen den ihr mir davor wirft... omg das wird doch etwas zu schwer für den anfang... wie habt ihr das eigentlich alles gelernt? unter euch sind doch bestimmt welche die ping-pong programmiert haben, was habt ihr vorher getan? habt ihr irgendwelche bücher zu empfehlen? |
Re: 2d game:ping-pong
hier habt ihr was zum totlachn:
HABE DAS SCHEISS FALSCHE MAGAZIN! ich habe das mag mit der cd version und obowhl im inhalt steht dass borland drin sit gibts keine spur davon im heft |
Re: 2d game:ping-pong
Erwartest du jetzt wirklich das wir lachen, das ist nämlich viel lustiger :lol:
|
Re: 2d game:ping-pong
@mangaka: Bitte mach einen neuen Thread auf wenn du eine neue Frage hast. Danke.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:48 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