Objeckte einsammeln

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

Surat

Betreff: Objeckte einsammeln

BeitragDi, März 14, 2006 18:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!
Ich programmiere gerade an einer 3d-Schule. Jetzt soll man aber
auch Objeckte einsammeln.
Wenn man bestimmte Objeckte berührt, dann soll das Programm beenden.

In 2d ist das ja ganz einfach: if imagescollide then....
aber in 3d funktioniert das irgendwie nicht: =(

if collisions 1,2,2,1 then end (als beispiel)

wie mache ich das denn?

Ich bin für jede Hilfe dankbar! Wink
"DER GRÖßTE FEIND IST IN DEN EIGENEN REIHEN" (Trygonia-Xen's Quest)

AZUON-Beyond the dark life (2%)
SOULS OF DESTINY (23%)

Fuchsi

BeitragDi, März 14, 2006 18:41
Antworten mit Zitat
Benutzer-Profile anzeigen
; Erstmal für den Gegenstand, den du einsammelst, einen Entitytype setzten.


Code: [AUSKLAPPEN]

entitytype objekt,1


; Dann Collisions:
Code: [AUSKLAPPEN]

collisions player_type,pbjekt_type


; In der Hauptschleife:

Code: [AUSKLAPPEN]

if entitycollided(player, objekt_type) then
sammle Objekt auf.
endif

Mr.Keks

BeitragDi, März 14, 2006 18:41
Antworten mit Zitat
Benutzer-Profile anzeigen
du scheinst ql:collisions nicht ansatzweise richtig verstanden zu haben in seiner funktionsweise Wink.

was ich dir raten würde, ist ql:entitydistance . damit kannst du den abstand zwischen zwei objekten ermitteln. zum beispiel zwischen dem player und dem item, das einsammelbar ist. also könntest du sagen

if entitydistance(player,item) < 10 then end
MrKeks.net

x-pressive

BeitragMi, März 15, 2006 12:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Kollisionsbefehle sind ausserdem so ziemlich die langsamsten überhaupt und sollten auch am besten möglichst vermieden werden, wenn man sie nicht wirklich braucht.

Benutze am besten Types für die Einsammel-Objekte und, wie gesagt, EntityDistance:

Code: [AUSKLAPPEN]

Type TGoodie
    Field goodie_type%
    Field Entity%
    Field x#
    Field y#
    Field z#
End Type


goodie_type beschreibt, um was für ein Objekt-Typ es sich handelt (Beispiel: 1 = Powerschuss, 2 = Laser, 3 = Medipack usw.) In x, y, z speicherst du die Position des Objekts (so kannst du beim Levelstart alle Objekte an den entsprechenden Stellen setzen -oder statt EntityDistance auch einfach die x/y/z-Koordinaten der Objekte und des Players vergleichen) und Entity enthält das Handle des jeweiligen Objekt-Meshes.

Während dem Spiel dann:

Code: [AUSKLAPPEN]
; GOODIES GESAMMELT?
For Goodie.TGoodie = Each TGoodie

   ; DIE DISTANZ EVENTUELL ANPASSEN:
   If EntityDistance(Entity_Player, Goodie\Entity) < 1.0 Then

      ; EINGESAMMELT! WELCHES EXTRA?
      Select Goodie\goodie_type
         CASE 1 ...
         CASE 2 ...
         CASE 3 ...
      End Select

      ; DIESES GOODIE ENTFERNEN
      FreeEntity Goodie\Entity : Delete Goodie : Exit
   
   End If

Next
• BLITZ SHOWCASE:
PARTICLE CANDY • PARTICLE CANDY FOR iPHONE • SPRITE CANDY • DON'T GET ANGRY! 2-3 • CLICK CLACK XL

Surat

BeitragMi, März 15, 2006 18:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Oh, vielen Dank an alle!

Genau das, was ich suche! Very Happy
"DER GRÖßTE FEIND IST IN DEN EIGENEN REIHEN" (Trygonia-Xen's Quest)

AZUON-Beyond the dark life (2%)
SOULS OF DESTINY (23%)

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group