| Autor |
Beitrag |
G-McKree
      
Beiträge: 178
|
Verfasst: 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
      

Beiträge: 5502
Erhaltene Danke: 220
Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
|
Verfasst: Mo 08.09.03 09:19
Poste doch einfach mal Deinen bisherigen Kollisions-Code, da lässt sich einfacher dran rumschrauben.
|
|
G-McKree 
      
Beiträge: 178
|
Verfasst: Mo 08.09.03 19:44
der sieht ungefär so aus:
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
|
Verfasst: Mo 08.09.03 21:36
guck doch mal in der OH nach PtInRect. oder willst du punktgenaue abfrage?
|
|
G-McKree 
      
Beiträge: 178
|
Verfasst: 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
|
Verfasst: 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 
      
Beiträge: 178
|
Verfasst: 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
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: 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 
      
Beiträge: 178
|
Verfasst: 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
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: 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 
      
Beiträge: 178
|
Verfasst: Mi 10.09.03 19:28
weiss vieleicht jemand, warum die projektile ab und zu schneller fliegen als sonst?
|
|
umpani
      
Beiträge: 389
|
Verfasst: 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
|
Verfasst: 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
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: 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 
      
Beiträge: 178
|
Verfasst: 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
      
Beiträge: 896
Win XP, Suse 8.1
Delphi 4/7/8 alles prof
|
Verfasst: 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  ...sprich, du lässt die aktuelle framerate in deine bewegungs-weite einfliessen 
_________________ mfg.
mâximôv
|
|
mimi
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: 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
      
Beiträge: 896
Win XP, Suse 8.1
Delphi 4/7/8 alles prof
|
Verfasst: 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  behaupte ich jetzt einfach mal (als profi)
_________________ mfg.
mâximôv
|
|
mimi
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: 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 
      
Beiträge: 178
|
Verfasst: 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
|
|