Ein Type-Eintrag mit jedem Type-Eintrag vergleichen

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Travis

Betreff: Ein Type-Eintrag mit jedem Type-Eintrag vergleichen

BeitragDi, Jan 06, 2004 20:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Weiß von euch vielleicht jemand, wie ich mehrere Einträge eines einzigen Types miteinander vergleichen kann? Das brauche ich nämlich für eine Kollisionsabfrage. Ich habe mehrere Objekte (mit Variablen als Type) und will jetzt Prüfen, ob ein Objekt mit einem anderen (gleicher Type) kollidiert.

Ich kann ja leider nicht schreiben:

Code: [AUSKLAPPEN]

for e.enemy = each enemy
 for e.enemy = each enemy
  if imagescollide(enemy, e\x, e\y, 0, enemy, e\x, e\y, 0)
 next
next


Dann würde ich ja das Objekt mit sich selbst vergleichen. Irgendwie muss sowas doch machbar sein, da man Types ja eigentlich für fast jedes Spiel braucht, indem Objekte vorkommen, die ständig neu erstellt und wieder gelöscht werden. Ich bin echt ratlos. Rolling Eyes
www.funforge.org

Ich hasse WASD-Steuerung.

Man kann alles sagen, man muss es nur vernünftig begründen können.
 

OJay

Betreff: Re: Ein Type-Eintrag mit jedem Type-Eintrag vergleichen

BeitragDi, Jan 06, 2004 20:36
Antworten mit Zitat
Benutzer-Profile anzeigen
probiers mal so Wink

Code: [AUSKLAPPEN]

for e.enemy = each enemy
 for f.enemy = each enemy
  if imagescollide(enemy, e\x, e\y, 0, enemy, f\x, f\y, 0)
 next
next


btw ist es keine gute idee, types und imagehandle gleich zu benennen! mache es lieber so:
imagehandle: IMGenemy
variable: INTenemy% (oder VARenemy)
type: TYPEenemy
funktion: FUNCTIONenemy() (oder Fenemy)

das hilft einem bei grösseren projekten enorm die übersicht zu behalten Wink
  • Zuletzt bearbeitet von OJay am Di, Jan 06, 2004 20:37, insgesamt einmal bearbeitet
 

furbolg

BeitragDi, Jan 06, 2004 20:37
Antworten mit Zitat
Benutzer-Profile anzeigen
for e.enemy = each enemy
for e2.enemy = each enemy
if imagescollide(enemy, e\x, e\y, 0, enemy, e2\x, e2\y, 0)
next
next

so geht das Very Happy

//edit

mist war einer schneller Sad
 

Gerhard

BeitragDi, Jan 06, 2004 21:50
Antworten mit Zitat
Benutzer-Profile anzeigen
In den 2D-Samples ist das Beispiel balls.bb:

Code: [AUSKLAPPEN]

       For balls.t_ball=Each t_ball
         ; check for colisions with other balls
         For balls2.t_ball=Each t_ball
            If balls<>balls2 Then ; make sure it's not the same ball
               If ImagesCollide(g_balls,balls\x#,balls\y#,balls\im,g_balls,balls2\x#,balls2\y#,balls2\im) Then ....usw.


Ich habs noch nie verwendet, aber ist die Abfrage der 'Eigenkollision' (make sure it's not the same ball) nicht erforderlich?
 

OJay

BeitragDi, Jan 06, 2004 22:06
Antworten mit Zitat
Benutzer-Profile anzeigen
normalerweise schon. aber das hängt davon ab, was du bei der kollision machst...für dein eigenes objekt is es dann immer true.

Travis

BeitragDi, Jan 06, 2004 22:20
Antworten mit Zitat
Benutzer-Profile anzeigen
@ all

Danke für eure schnelle Hilfe. Jetzt habe ich's hinbekommen. Ich wusste gar nicht, das man für ein Type einmal "e.enemy" und dann nochmal "e2.enemy" schreiben kann. Ich dachte, das wäre dann schon wieder ein ganz anderer Type.

Wieder was dazu gelernt Very Happy
www.funforge.org

Ich hasse WASD-Steuerung.

Man kann alles sagen, man muss es nur vernünftig begründen können.
 

OJay

BeitragDi, Jan 06, 2004 22:27
Antworten mit Zitat
Benutzer-Profile anzeigen
dein type "enemy" musst du als container sehen. jedesmal, wenn du "new enemy" sagst, wird in dem container eine neue akte mit den eigenschaften deiner fields erstellt.
und in deinem beispiel sind "e" und "e2" nichts weiter, als zeiger (oder handles) auf jeweils eine dieser akten, die du dann gegeneinander prüfst.

wenn man das prinzip einmal verstanden hat, ist es wirklich genial damit zu arbeiten Wink

Travis

BeitragMi, Jan 07, 2004 19:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn ich jetzt zwei verschiedene Types habe z.b. "Player" und "Panel", kann ich denn dann einmal "p.player" und einmal "p.panel" schreiben, oder darf man einen Buchstaben vorm Komma nur einmal benutzen? Wenn ich dann "delete p" schreibe müsste es doch Probleme geben, oder?
www.funforge.org

Ich hasse WASD-Steuerung.

Man kann alles sagen, man muss es nur vernünftig begründen können.

Julz

BeitragMi, Jan 07, 2004 19:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Cool das einer das thema eröffnet hat ich hätte nämlich auch mal ne frage da ich nur datenfelder benutze wie kann ich denn da vergleichen ob welche kollidieren ???

dim enemy(5,2)
for i = 0 to 5
enemy(i,0) = ist das alien da ???
enemy(i,1) = x koordinate
enemy(i,2) = y koordiante

jetzt hab ich ja 5 aliens kann ich da auch überprüfen ob die sich überschneiden ????, weil die haben ja alle das gleiche bild... Confused
 

OJay

BeitragMi, Jan 07, 2004 19:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Travis hat Folgendes geschrieben:
Wenn ich jetzt zwei verschiedene Types habe z.b. "Player" und "Panel", kann ich denn dann einmal "p.player" und einmal "p.panel" schreiben, oder darf man einen Buchstaben vorm Komma nur einmal benutzen? Wenn ich dann "delete p" schreibe müsste es doch Probleme geben, oder?


ja, dann meldet dir der debugger "variable type mismatch"

Travis

BeitragMi, Jan 07, 2004 20:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Hm, hab' mir schon sowas gedacht. Dann muss ich wohl bei "p.player" und "pan.panel" bleiben. Rolling Eyes
www.funforge.org

Ich hasse WASD-Steuerung.

Man kann alles sagen, man muss es nur vernünftig begründen können.

Jolinah

BeitragMi, Jan 07, 2004 20:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Ist wie bei normalen Variablen.

Man kann auch nicht p$ und p# oder p% gleichzeitig definieren Smile

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group