Object-Variablen vergleichen?

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

SupeRalF

Betreff: Object-Variablen vergleichen?

BeitragDi, Jan 22, 2008 22:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe ein paar grafiken, die in einem Collisionslayer sitzen. jetzt möchte ich allerdings zwei kollisionslayer auf kollision überprüfen.

In der Praxis: der eine Kollisionslayer beinhaltet Schüsse, der andere Gegner.
Ich möchte erst dann jeden Gegner und jeden schuss pixelgenau überprüfen, wenn es überhaupt irgendwo eine kollision gibt, also an irgendeiner Stelle sich die Grafiken von layer1 und layer2 berühren.

aber wie geht das?

mfg
SupeRalF

[edit]: sry, falsches forum! bitte in blitz-max-forum verschieben, falls möglich!

hectic

Sieger des IS Talentwettbewerb 2006

BeitragDi, Jan 22, 2008 22:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Eine Vorabprüfung kannst du machen mit:

ql:If ql:Then oder
ql:RectsOverlap oder
ql:ImageRectOverlap

eine Endprüfung geht dann mit ql:ImageRectCollide

Da grad das letzte recht langsam ist, sollte man immer zunächst eine Vorabprüfung machen. Auf einer Dim-Map kann man sogar auf eine Vorabprüfung komplett verzichten, da man die Koordinaten der Kacheln bereits in ein Raster abgelegt hat. Da überprüft man mit ImageRectOverlap nur noch die vier überhaupt mögliche umgehende Tiles nach Kollision.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

SupeRalF

BeitragDi, Jan 22, 2008 23:37
Antworten mit Zitat
Benutzer-Profile anzeigen
es ist also nur mit den von dir genannten befehlen möglich?
weil eigentlich wollte ich ja durch nur ein paar zeilen code zwei komplette layer vergleichen.
ich kann es natürlich auch so machen, aber das kollidieren von zwei LAYERN wäre natürlich schöner...
 

Dreamora

BeitragDi, Jan 22, 2008 23:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Es gibt keine Layer in Blitz3D / BlitzPlus.

Es gibt einzig und alleine direkt vergleiche zweier Objekte.

Du kannst daraus natürlich mit ein wenig Geschickt durchaus Layer vs Layer Kollisionsvergleiche machen, obwohl das sehr ungewöhnlich ist und nicht empfehlenswert. Normalerweise macht man Object vs Layer vergleiche.
Alternativ kannst du die Layer auch dadurch hinbekommen das du einfach Gruppen von Types machst und dann gegen die jeweiligen Gruppen testest sprich gegen jedes Element darin (das ist vermutlich sogar schneller als gegen ein Bild wo alle gegner drin sind, weil du mit RectsOverlap schon direkt sagen kannst das es keine Kollision gibt anstatt effektiv die Pixel auffahren zu müssen).


Wenn man soviele objekte hat das bald alles miteinander kollidieren können muss ist Pixelkollision nicht mehr zu empfehlen. Dann würde ich empfehlen, dass du dich mit SceneGraphs und SAT + Swept Polygon Collision auseinander setzt und dir eigene Polygonkollisionsroutinen implementierst ... die sind einiges effizienter wenn du "grosse Mengen" an Objekten kollidieren lassen willst.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

BladeRunner

Moderator

BeitragMi, Jan 23, 2008 18:14
Antworten mit Zitat
Benutzer-Profile anzeigen
~VERSCHOBEN~
Dieser Thread passte nicht in das Forum, in dem er ursprünglich gepostet wurde.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

SupeRalF

BeitragMi, Jan 23, 2008 19:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielen Dank für den Tip mit SceneGraphs. leider habe ich keine ahnung, was das ist, wie mans benutzt etc. bei google habe ich nichts hilfreiches gefunden. gibt es irgendein (möglichst deutschsprachiges) tutorial?

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group