Autor Beitrag
G-McKree
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 178



BeitragVerfasst: So 07.09.03 22:38 
Also folgendes: ich hab ein kleines Panzerspiel gebastelt, aber mit der Kollisionsabfrage bin ich nicht weitergekommen. Die Kugel fliegt alle ca. 25 millisekunden 20 Pixel in einer bestimmten Richtung weiter, und es sollt natürlich was passieren, wenn ein Panzer getroffen wird. Der Panzer is nur ein schwarzes Viereck mit nem blauen bzw. roten Strich drauf. Die Panzer und Kugeln sind nur als TPoints gespeichert, um die der (das?) Canvas den Rest herumzeichnet.
UGrohne
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: Mo 08.09.03 09:19 
Poste doch einfach mal Deinen bisherigen Kollisions-Code, da lässt sich einfacher dran rumschrauben.
G-McKree Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 178



BeitragVerfasst: Mo 08.09.03 19:44 
der sieht ungefär so aus:
ausblenden Quelltext
1:
2:
if (Pt.X > RedTankPosition.X - 20) and (Pt.X < RedTankPosition.X + 20) and (Pt.Y > RedTankPosition.Y - 20) and (Pt.Y < RedTankPosition.Y + 20) then
//irgentetwas//


Pt und RedTankPosition sind TPoints; Pt is der Pounkt an dem sich das Projectil nach dem Neuzeichnen befinden wird und RedTankPosition erklärt sich von selbst. Die Bedingung is natürlich total ungenau, da der Panzer ja nicht 40*40 Pixel groß ist
obbschtkuche
Gast
Erhaltene Danke: 1



BeitragVerfasst: Mo 08.09.03 21:36 
guck doch mal in der OH nach PtInRect. oder willst du punktgenaue abfrage?
G-McKree Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 178



BeitragVerfasst: Mo 08.09.03 21:55 
Is praktisch, thx
aber das Problem is, dass das Projektil manchmal über den Panzer hinwegfliegt, da es sich in 20-Pixel Schritten bewegt
obbschtkuche
Gast
Erhaltene Danke: 1



BeitragVerfasst: Di 09.09.03 14:03 
Da fällt mir jetzt auch nur ein, dass du die Schritte verkleinern könntest. Und dann direkt mehrere berechnest.
Ich hatte auch irgendwo mal eine Funktion, die berechnet, ob eine linie durch ein viereck geht, ich weiß aber nicht mehr wo...
G-McKree Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 178



BeitragVerfasst: Di 09.09.03 19:48 
das hab ich schon versucht, aber die berechnung war zu langsam. Also hab ich mir gedacht, das ich threads benutzte (hab ich nie zufor gemacht, aber es funtz), allerding hab ich jetzt das problem das manchmal ein projektil schneller fliegt als die anderen
mimi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: Di 09.09.03 20:01 
Zitat:

manchmal ein projektil schneller fliegt als die anderen

ist doch praktisch, aber um dieses problem zu umgehen baue doch einen zähler in den thread ein bzw. setzt alle trehds auf die gleichen start wert.

_________________
MFG
Michael Springwald, "kann kein englisch...."
G-McKree Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 178



BeitragVerfasst: Di 09.09.03 20:47 
mimi hat folgendes geschrieben:
Zitat:

manchmal ein projektil schneller fliegt als die anderen

ist doch praktisch, aber um dieses problem zu umgehen baue doch einen zähler in den thread ein bzw. setzt alle trehds auf die gleichen start wert.


nicht ganz, mimi, es spielt kein role, ob alle threads zugleich beginnen, denn die geschwindigkeit der projektile würde dadurch nich beeinflust werden
mimi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: Mi 10.09.03 17:38 
Zitat:

nicht ganz, mimi, es spielt kein role, ob alle threads zugleich beginnen, denn die geschwindigkeit der projektile würde dadurch nich beeinflust werden

stimmt, fält mir auch erst jetzt wieder ein, ein Trehad wie ja nur ausgfürht wenn die zeit da ist sonst wird er auf pausegestellt aber nur im MS bereich.

_________________
MFG
Michael Springwald, "kann kein englisch...."
G-McKree Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 178



BeitragVerfasst: Mi 10.09.03 19:28 
weiss vieleicht jemand, warum die projektile ab und zu schneller fliegen als sonst?
umpani
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 389



BeitragVerfasst: Mi 10.09.03 20:03 
Lade doch mal deinen Quelltext als Zip auf deine Homepage, so dass wir ihn uns anschauen können.

_________________
Lernen, ohne zu denken, ist eitel; denken, ohne zu lernen, ist gefährlich. Konfuzius
obbschtkuche
Gast
Erhaltene Danke: 1



BeitragVerfasst: Mi 10.09.03 20:50 
mit threads hab ich noch nix gemacht, aber versuch doch mal, ein "sleep" einzubauen. In Threads dürfte dann doch eigentlich nicht die ganze Anwendung stehen bleiben, oder?
mimi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: Mi 10.09.03 21:32 
der grund ist folgnder: wenn ein Threads ausgefürht wird und danach ein zweiter wird zuerst der erste ausgefürht und sobalt der fertig ist der zweite und so weiter somit würde sich folgender geschwingkeit bei dem geschuss ergeben:
1 Thread: geschwindigkeit + 1
2 Thread: geschwindigkeit + 2
3 Thread: geschwindigkeit + 3

und soweiter mach doch mal folgendes:
nimm nur einen Thread und einen array[0..max] of interger
und jetzt lasse einfach in den einem Thread einen zähler laufen und fertig
genauso gut kannst du dafür einen timer nehmen.

EDIT:
windows läst nie ein sachen gleichzeitig laufen genauso wenig wie linux und die andren ose sie werden immer zeitversetzt gestartet.
das ist auch noch ein grund

das mit dem Sleep ist keine schlechte idee solltes du mal testen

_________________
MFG
Michael Springwald, "kann kein englisch...."
G-McKree Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 178



BeitragVerfasst: Mi 10.09.03 22:08 
hab ich ja ales schon, der thread läuft so lange, bis das projektil die bedingungen erfüllt um verschwinden zu dürfen. und nich genug zeit zum rechnen is auch keine ausrede, da der fehler immer da ist, egal ob ich sleep(500) oder sleep(25) sage. aussedem hat jeder thread ein projektil zugewiesen, und kann mit den anderen nichts machen.
maximus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 896

Win XP, Suse 8.1
Delphi 4/7/8 alles prof
BeitragVerfasst: Do 11.09.03 01:15 
G-McKree hat folgendes geschrieben:
weiss vieleicht jemand, warum die projektile ab und zu schneller fliegen als sonst?


ich könnte mir vorstellen, das dein frame-rate schwankt, watt logisch dazu führt, dass die bullets schneller fliegen als sonst!? Es sei denn du benutzt time-based-movement :wink: ...sprich, du lässt die aktuelle framerate in deine bewegungs-weite einfliessen :D

_________________
mfg.
mâximôv
mimi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: Do 11.09.03 08:14 
währe eine möglichekit eine andre währe wenn du einfach sagst sleep(1) sollte ausreichen.

_________________
MFG
Michael Springwald, "kann kein englisch...."
maximus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 896

Win XP, Suse 8.1
Delphi 4/7/8 alles prof
BeitragVerfasst: Do 11.09.03 10:34 
mimi hat folgendes geschrieben:
währe eine möglichekit eine andre währe wenn du einfach sagst sleep(1) sollte ausreichen.


warum sollte man seinem spiel leistung klauen wollen?...statische frame-raten sind unprofessionell :wink: behaupte ich jetzt einfach mal (als profi)

_________________
mfg.
mâximôv
mimi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: Do 11.09.03 16:09 
das weiß ich aus einger erfarung:
in einem Thread im einem Spiel war die FPS anzahl der ungleichmäsig mal bei 60 mal bei 55 oder bei 20 und soweiter als ich im thread ein sleep eingebaut hatte funktionierte es *G*

_________________
MFG
Michael Springwald, "kann kein englisch...."
G-McKree Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 178



BeitragVerfasst: Do 11.09.03 21:42 
ich kann mir aber nich vorstellen, das die projektile schneller fliegen, da die CPU wohl kaum zu kurze sleep-pausen macht, sondern wohl eher zu lange.
aber wenn wer ne idee hat freu ich mich, insbesondere, da ich nich die leiseste ahnung hab wie dieses problem entsteht.

ich will euch mal den prog-ablauf schildern

es gibt 3 timer:
1. das drehen des geschützes
2. das bewegen des panzers
3. neuzeichnen
jedes von maximal 128 projektilen hat einen thread der sich drum kümmert und der sieht ungefähr so aus:
die neue position wird berechnet (aber noch nich zugewiesen) dann wird geprüft, ob die position nich ausserhalb des schlachtfeldes liegt, was die terminierung des threads und das verschwinden des projektils zu folge hätte, wenn dem nich so is, dann wird dem projektil die zuvor errechnete position zugewiesen