Kollisionsabfrage auf drawline / drawrect Objekte ?
Übersicht BlitzMax, BlitzMax NG Beginners-Corner
OxcomBetreff: Kollisionsabfrage auf drawline / drawrect Objekte ? |
Mo, Okt 24, 2005 11:22 Antworten mit Zitat |
|
---|---|---|
Hallo zusammen,
Doppelpostings vermeide ich normalerweise grundsätzlich. Aber mein neues Problem geht vermutlich in meinem vorhergehenden Thread aufgrund anderer Problembeschreibung ein bisschen unter. Zum Thema Kollision: Momentan habe ich mittels drawline und drawrect ein simples Labyrinth gezeichnet. Mit drawline einen Rand und mit drawrect 4 gleichgrosse Hindernisse innerhalb des Rahmens. Linien und Rechtecke haben die gleiche Farbe. Weiterhin habe ich ein animiertes Image mit 8 Frames als Spielfigur, welches sich per Zufall in diesem Labyrinth bewegt. Die Kollision mittels x und y Koordinaten abfragen habe ich schon gemacht. Ist mir aber zu unflexibel. So müsste ich den Rand und jedes Hindernis innerhalb des Rands müsham abfragen. Meine Vorstellung wäre eventuell die Abfrage der Farbe. Beispielsweise: Wenn aktuelle x position+1 = bestimmte Farbe dann dementsprechende Aktion ausführen Wäre das so in Ordnung oder gibt es da noch bessere Möglichkeiten ? Imagescollide ist ja in diesem Fall aufgrund nur einem Image nicht relevant. Zumal ich erstmal eine Lösung für den beschriebenen Vorgang suche. Gibt es also eine geeignete Kollisionsabfrage für Linien und Rechtecke ohne festdefinierte Koordinatenabfrage ? Ich benötige auch keine fertige Routine, sondern einfach ein paar Hinweise. Lernen und Ausknobeln möchte ich es selbst. Sonst wird das niemals etwas. Habe übrigens das ganze offizielle Blitzforum durchsucht und auch hier bisher noch nichts gefunden. An diesem Rätsel versuche ich mich jetzt schon 2 Wochen ... Gruss Oxcom |
||
Apple Mac Mini 1.42 Ghz / 1 GB Ram / Samsung Syncmaster 930 BF |
Smily |
Mo, Okt 24, 2005 14:48 Antworten mit Zitat |
|
---|---|---|
Die Farbe kannst du mit Getcolor(X,Y) Bekommen.
Da kansnt du dann mit ColorRed(), ColorGreen() und ColorBlue() erfragen |
||
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets "Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!" stummi.org |
Freeman |
Mo, Okt 24, 2005 15:16 Antworten mit Zitat |
|
---|---|---|
ich habe vor einiger zeit das hier gecodet : https://www.blitzforum.de/viewtopic.php?t=12291 . Das ist eine function die prüft ob rechtecke sich berühren oder nicht. Sie könnte dir helfen.
Fr3eMaN |
||
MacBook | MacOSX 10.5 | 80GB HDD | 1GB | BlitzMax 1.28 |
Oxcom |
Mo, Okt 24, 2005 16:53 Antworten mit Zitat |
|
---|---|---|
Werde ich nach Feierabend gleich mal testen. Ansonsten muss ich leider nochmal auf die Frage zurückommen.
Im fertigen Spiel werde ich das Labyrinth natürlich mit Tiles gestalten. Trotzdem möchte ich erstmal diese Abfrage in den Griff bekommen. Vielen Dank jedenfalls für die Hinweise. Gruss Oxcom |
||
Apple Mac Mini 1.42 Ghz / 1 GB Ram / Samsung Syncmaster 930 BF |
Oxcom |
Di, Okt 25, 2005 12:55 Antworten mit Zitat |
|
---|---|---|
Freeman:
Habe mir gestern Abend deinen Code nochmal in aller Ruhe angeschaut. Falls ich falsch liege ... bitte korrigieren: In diesem Code werden im Prinzip auch Koordinaten eines Objekts abgefragt. In diesem Fall das Rechteck. Wenn Du jetzt beispielsweise 5 Rechtecke gezeichnet hättest, müsste man doch für alle Rechtecke neue Variablen vergeben und diese alle abfragen richtig ? Dann kann man doch normalerweise gleich alle Koordinaten direkt abfragen. Und genau dass wollte ich eigentlich vermeiden. Egal ob Oval, Rechteck oder einzelne Pixel in einem Labyrinth vorausgesetzt gleiche Farbe ... und selbst bei zufällig platzierten Objekten muss es doch eine Abfragemöglichkeit geben. Vermutlich wird man doch die Farbe abfragen müssen oder ? Gruss Oxcom |
||
Apple Mac Mini 1.42 Ghz / 1 GB Ram / Samsung Syncmaster 930 BF |
Oxcom |
Mi, Okt 26, 2005 17:53 Antworten mit Zitat |
|
---|---|---|
Hat wirklich keiner mehr eine Idee ? Soll ich vielleicht meinen Code posten ?
Gruss Oxcom |
||
Apple Mac Mini 1.42 Ghz / 1 GB Ram / Samsung Syncmaster 930 BF |
Freeman |
Mi, Okt 26, 2005 19:05 Antworten mit Zitat |
|
---|---|---|
Oxcom hat Folgendes geschrieben: Freeman:
Wenn Du jetzt beispielsweise 5 Rechtecke gezeichnet hättest, müsste man doch für alle Rechtecke neue Variablen vergeben und diese alle abfragen richtig ? Dann kann man doch normalerweise gleich alle Koordinaten direkt abfragen. ja, aber wenn du alle als type machst in eie liste reinhaust, kannst du die ganze sache mit einer schleife checken . zeig einfach ma nen code, ich helf dir dann,oder probier es zumindest Fr3eMaN |
||
MacBook | MacOSX 10.5 | 80GB HDD | 1GB | BlitzMax 1.28 |
Oxcom |
Do, Okt 27, 2005 12:55 Antworten mit Zitat |
|
---|---|---|
Hi Freeman,
bin momentan noch in der Arbeit. Heute abend kann ich dann meinen Code posten. Vielen Dank schon mal soweit. Gruss Oxcom |
||
Apple Mac Mini 1.42 Ghz / 1 GB Ram / Samsung Syncmaster 930 BF |
Oxcom |
So, Okt 30, 2005 16:23 Antworten mit Zitat |
|
---|---|---|
Sorry für die Verspätung ! Hier nun mein Programmcode. Bin wie gesagt noch absoluter Noob ! Hier noch das Image:
granim.png Code: [AUSKLAPPEN] Strict Incbin "granim.png" SeedRnd MilliSecs() Graphics 800,600,0 Global ghostred:Timage=LoadAnimImage("granim.png",14,14,0,8) If ghostred = Null Then DebugLog "ghostred kann nicht geladen werden" End Global draw_last_pixel:Int Local x = 400 ' startposition x Local y = 100 ' startposition y Local count = 0 ' zaehler framewechsel Local timer = 0 ' zaehler zufallsrichtungsswechsel Local rndirection = Rnd(4) ' zufallsrichtung Local framegrr = 2 ' startframe ghostred rechts Local framegrl = 0 ' startframe ghostred links Local framegru = 4 ' startframe ghostred oben Local framegrd = 6 ' startframe ghostred unten Repeat ' abfrage timer zufallsrichtungswechsel If timer = 50 rndirection = Rnd(4) timer = 0 Else SetColor 255,255,255 ' zufallsrichtungen ghostred Select rndirection Case 0 DrawImage(ghostred,x,y,framegrr) If count = 9 count = 0 framegrr:+1 If framegrr = 4 framegrr = 2 count:+1 x:+1 Case 1 DrawImage(ghostred,x,y,framegrl) If count = 9 count = 0 framegrl:+1 If framegrl = 2 framegrl = 0 count:+1 x:-1 Case 2 DrawImage(ghostred,x,y,framegru) If count = 9 count = 0 framegru:+1 If framegru = 6 framegru = 4 count:+1 y:+1 Case 3 DrawImage(ghostred,x,y,framegrd) If count = 9 count = 0 framegrd:+1 If framegrd = 8 framegrd = 6 count:+1 y:-1 End Select timer:+1 Flip Cls ' labyrinth SetColor 0,100,200 SetLineWidth(5) DrawRect(100,100,100,100) DrawRect(350,100,100,100) DrawRect(600,100,100,100) DrawRect(100,400,100,100) DrawRect(350,400,100,100) DrawRect(600,400,100,100) DrawLine(20,20,780,20,draw_last_pixel=True) DrawLine(20,580,780,580,draw_last_pixel=True) DrawLine(22,20,22,580,draw_last_pixel=True) DrawLine(777,580,777,20,draw_last_pixel=True) Until KeyHit(key_escape) Ich würde gerne die Farbe der Objekte im Labyrinth und den Aussenrand abfragen. Die Abfrage via Drawrect bzw. Drawline habe ich mittlerweile selbst herausgefunden. Es sollte so funktionieren, dass jede Art von Objekt ( Buchstabe, Linie, Oval, Rechteck ) aufgrund der Farbe erkannt werden kann und somit eine Kollision entsteht. Parallel werde ich es natürlich selbst weiterhin versuchen. Gruss Oxcom |
||
Apple Mac Mini 1.42 Ghz / 1 GB Ram / Samsung Syncmaster 930 BF |
Oxcom |
So, Okt 30, 2005 21:24 Antworten mit Zitat |
|
---|---|---|
Hallo zusammen,
nun habe ich heute wieder geschlagene 10 Stunden in dieses Problem investiert. Bin zwar noch Noob ... aber so langsam werde ich das Gefühl nicht mehr los, dass es in der aktuellen Blitzmax Version gar keine Abfragemöglichkeit ( ausser Pixmap Konvertierung ) von einer Koordinate direkt zur Farbe ( wie bereits beschrieben ) gibt. Anscheinend war das in Blitzbasic bzw. Blitz 2D noch ein bisschen komfortabler gelöst. Siehe Statement von Smiley. Wäre mit Sicherheit sehr hilfreich, wenn die Procoder auch bei Ratlosigkeit ein Statement schreiben würden. Dann wüsste man jedenfalls, wo man steht. Gruss Oxcom ( gebe nicht auf ) |
||
Apple Mac Mini 1.42 Ghz / 1 GB Ram / Samsung Syncmaster 930 BF |
Dreamora |
So, Okt 30, 2005 22:01 Antworten mit Zitat |
|
---|---|---|
Nein es gibt auch keine andere Möglichkeit aktuell als ein Pixmap zu nutzen, da BlitzMax auf Kompatibilität und Crossplattform setzt.
Du kannst die Farbe eines Pixels jedoch mit einer 1x1 Pixmap abfragen, hat meines Wissens sogar hier drin in der BlitzMax Sektion den dafür notwendigen Code. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
Oxcom |
So, Okt 30, 2005 22:32 Antworten mit Zitat |
|
---|---|---|
Bingo ! Dann bin ich ja glücklicherweise nicht so doof wie ich gedacht habe ! Deine Aussage hat mir jedenfalls schon sehr viel weitergeholfen. Ich glaube, ich hätte noch unzählige Stunden damit verschwendet. Nun weiss ich wenigstens wo ich ansetzen muss. Trotz allem ... meiner Meinung nach wäre so eine Abfrage für eine spieleorientierte Programmiersparache doch sinnvoll.
Viele Grüsse ! Oxcom ( der nun ins Bett geht ) |
||
Apple Mac Mini 1.42 Ghz / 1 GB Ram / Samsung Syncmaster 930 BF |
Oxcom |
Mo, Okt 31, 2005 11:41 Antworten mit Zitat |
|
---|---|---|
Dreamora hat Folgendes geschrieben: Du kannst die Farbe eines Pixels jedoch mit einer 1x1 Pixmap abfragen, hat meines Wissens sogar hier drin in der BlitzMax Sektion den dafür notwendigen Code.
Diese Lösung wäre vermutlich sehr performancebelastend. Werde nun mit Tiles arbeiten. Gruss Oxcom |
||
Apple Mac Mini 1.42 Ghz / 1 GB Ram / Samsung Syncmaster 930 BF |
Dreamora |
Mo, Okt 31, 2005 23:09 Antworten mit Zitat |
|
---|---|---|
In einer Steinzeitsprache die keine Grafikkarte kennt, wäre eine Pixelabfrage tatsächlich von bedeutung. Aber heutzutage speichert man Texturen (nicht mehr Bilder wie früher) möglichst nicht mehr im Systemspeicher aus Speedgründen.
Kollisionen werden heutzutage meist nur noch durch swept Polygon Kollision realisiert, nicht "extrem langsame" pixelbasierende Kollisionen. Wenn du dennoch bei einem Bild einen speziellen Pixel abfragen willst, speicherst du dir am besten eine Kopie davon als Pixmap im Speicher, damit du direkt darauf zugreifen kannst. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
Übersicht BlitzMax, BlitzMax NG Beginners-Corner
Powered by phpBB © 2001 - 2006, phpBB Group