Map mit Linien Kollision
Übersicht

![]() |
TimBoBetreff: Map mit Linien Kollision |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi,
ich habe vor ein Tilebasierendes Game zu machen. Jetz wollte ich es so machen, das der Spieler nicht über manche Bereiche drüber gehen darf. Dafür habe ich mir gedacht, ein Netz mit Linien zu spannen, welche ich dann Abfrage. Ist es möglich ein Tilebasierendes Game mit Linien aufzubauen und es dann so https://www.blitzforum.de/foru...257#313257 abszufragen, ob eine Kollision vorhanden ist? Oder wird es zu langsam, wenn ich jede Linie des Spielers mit jeder Linie auf der Map überprüfe? |
||
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31 hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht. |
E. Urbachehemals "Basicprogger" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Zitat: ich habe vor ein Tilebasierendes Game zu machen
Dann speicherst du diese Information normalerweise im Tile selbst. Oder brauchst du wirklich diagonale, in verschiedenen winkeln verlaufende Linien? Wenn ja, dann ist es zwar theoretisch möglich mit der genannten Methode, aber spätestens bei frameunabhängiger Programmierung bekommst du damit Probleme. Zitat: Oder wird es zu langsam, wenn ich jede Linie des Spielers mit jeder Linie auf der Map überprüfe?
Du kannst doch die Anzahl der zu überprüfenden Linien reduzieren. Überleg dir, welche Linien in Abhängigkeit der Koordinaten getestet werden müssten. Oder such dir einen anderen Algorithmus, z.B. für Polygonkollision, wobei diese wahrscheinlich auch nicht einfach ist ![]() |
||
The box said, "Requires Windows XP or better", so I installed Ubuntu | Linux is NOT Windows
Flua :: Profiler für BB und BMax :: Partikel-Engine für BMax :: Lyphia-Projekt Quellcode (BMax) :: Automatische Parallelisierung :: Meine Musik |
![]() |
TimBo |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi,
ich habe dieses Spiel schonmal geschrieben und jetzt ärgere ich mich, das es nicht viele varianten gibt, da es nur tiles gibt, die begehbar sind und welche nicht. Jetz wollte ich das mal ändern indem z.b. ein Tile zur Hälfte begehbar ist usw. muss noch überlegen, wie ich die Daten speicher, als linie, wenn es 5 tiles gibt, die eine durchgehende Linie haben, oder dass ich jedes Tile extra seine Linien gebe, dann gäbe es total gesehen mehr Linien, die Abfrage könnte aber gezielter gehen und somit schneller. Das andere was ich mir noch ausdenken muss ist die speicherung. Es sollte so gehen, dass ein Tile unendlich viele lienien haben kann. Ich mache das dann glaube ich so Code: [AUSKLAPPEN] type feld field linie end type type linien field x,y end type Dim tiles() for i=0 to anzalh tiles feld=new feld für jede linie (die in einer Text datei gespeichter ist) feld\linie.linien=new Linien linien\x= linien\y= *für jede Linie next würde das gehen ? |
||
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31 hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht. |
![]() |
D2006Administrator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Basicprogger hat Folgendes geschrieben: Wenn ja, dann ist es zwar theoretisch möglich mit der genannten Methode, aber spätestens bei frameunabhängiger Programmierung bekommst du damit Probleme.
Genau im Gegenteil! Vektorkollision (was anderes ist es ja nicht) ist gerade gut für frameunabhängige Programmierung. Tipp für TimBo: Mach für jedes Tile ne Liste von Kollisionslinien, die alle der Reihe nacht abgefragt werden, sobald der Spieler in der nähe des Tiles ist. Und mach dir keinen Kopf um den Speicherverbrauch. Eine Linie braucht 4 Integer... da brauchst du abertausende von Linien, ehe du mal zu Speicherproblemen kommst. Also lieber 4 kleine gerade Linien, statt einer großen. Ist viel besser zu handhaben. |
||
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2 |
![]() |
TimBo |
![]() Antworten mit Zitat ![]() |
---|---|---|
danke für die Tipps, D2006 & Basicprogger !!
es kommt schon wieder was mit VEKTOR vor, ich werde mir jetz doch echt mal zulegen müssen, was ein verdammter VEKTOR ist. Vielen Dank TimBo Edit kann es sein das Vektoren das sind, dass bei f(x) = y = mx+b rauskommt ? dann mach ich das GV (gleichsetzungsverfahren) (hatte ich gerade in mathe ![]() errechne mir den Schnittpunkt und schaue, ob der auf beiden geraden liegt, indem ich für x und y die werte einsetze und schaue obs stimmt ? Aber das war bei Geraden, mist ![]() |
||
![]() |
D2006Administrator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ein Vektor ist im Prinzip nur ne Linie. ![]() Spielt in dem Fall hier auch nicht so die Rolle, wie das Kind denn nun heißt. Deswegen erspare ich mir die Schnelleinführung in Vektoren und verweise auf die Wikipedia. Weitere Tipps: Für die Linien jeweils einen eigenen Type, aber da muss Start- und Endpunkt hinein! Statt ner Liste dann ein Blitzarray und eine Variable, die die Anzahl der Kollisionslinie des Tiles angibt. Und das Array hat entsprechend die Größe und verweist mit seinen Felder auf die Instanzen des Linientypes. |
||
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2 |
E. Urbachehemals "Basicprogger" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich nehme meine Behauptung zurück, natürlich hat D2006 Recht.
Habe vergessen, dass man ja von Punkt A bei Frame 0 zu Punkt B in Frame 1 einen Vektor erstellen kann. |
||
The box said, "Requires Windows XP or better", so I installed Ubuntu | Linux is NOT Windows
Flua :: Profiler für BB und BMax :: Partikel-Engine für BMax :: Lyphia-Projekt Quellcode (BMax) :: Automatische Parallelisierung :: Meine Musik |
![]() |
TimBo |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi,
ich habe mal versucht das aus dem Codearchiv nachzuschreiben, damit ich das verstehe. und das sieht bei mir so aus Code: [AUSKLAPPEN] Graphics 1024,768,24,2
SetBuffer BackBuffer() Repeat mx=MouseX() my=MouseY() Line mx-100,my-100,mx+100,my+100 Line 250,300,600,600 Text 0,100, kollision(mx-100,my-100,mx+100,my+100,250,300,600,600) Flip(1):Cls Until KeyHit(1) Function kollision(x1#,y1#,x2#,y2#,x3#,y3#,x4#,y4#) steigung1#=(y1#-y2#)/(x1#-x2#);steigung wird ausgerechnet steigung2#=(y3#-y4#)/(x3#-x4#) Text 0,0, "steigung:"+steigung1# Text 0,20,"steigung:"+Steigung2# b1#=y1#-(steigung1#*x1#) b2#=y3#-(steigung2#*x3#) Text 0,60,"b: "+b1# Text 0,80,"b: "+b2# x#=(b2#-b1#)/(steigung1#-steigung2#) y#=steigung1#*x#+b1# Plot x#,y# ;If x#>x1# And x#<x2# And x#>x3# And x#<x4# And y#>y1# And y#<y2# And y#>y3# And y#<y4# Then Return 1 End Function das Problem: die Auskommentierte Zeile Funktioniert nur wenn die 1. Kordinate kleiner als die zweite ist. kann mir jemand helfen, die ausgeklammerte Bedingungs-zeile zu ersetzen ? |
||
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31 hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht. |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group