Kollision funktioniert nicht-finde den Fehler nicht(3D)

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

joshmami

Betreff: Kollision funktioniert nicht-finde den Fehler nicht(3D)

BeitragSa, Apr 23, 2011 12:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Community,
Ich habe bei meinem 1. Spiel mit BB3D einige schwierigkeiten mit den Kollisionen zwischen den Schüssen des Spielers und den Gegnern.
Ich habe auf jeden Gegner EntityType angewendet und ihm eine Nummer zwischen 4.0 und 5.0 gegeben und jedem Schuss zwischen 3.0 und 4.0(vor der Hauptschleife):
BlitzBasic: [AUSKLAPPEN]

;;Types;;
Type TypeSchuss
Field Sprite
Field KollisionsNummer#
End Type
Type TypeGegner
Field Ent
Field Leben
Field Richtung
Field KollisionsNummer#
End Type
;;Globals;;
Global SchussKollisionsNummer#
SchussKollisionsNummer = 3.0
Global GegnerKollisionsNummer#
GegnerKollisionsNummer = 4.0
;;Gegnererstellung;;
For Zahl = 1 To 20
Gegner.TypeGegner = New TypeGegner
Gegner\Ent = CopyMesh(GegnerVorlage)
ScaleEntity Gegner\Ent,6,10,6
EntityColor Gegner\Ent,Rand(0,100),Rand(200,255),Rand(0,200)
PositionEntity Gegner\Ent,Rand(200,1000),550,Rand(200,1000)
Gegner\Leben = 1
GegnerKollisionsNummer = GegnerKollisionsNummer + 0.0001
Gegner\KollisionsNummer = GegnerKollisionsNummer
Collisions 1,Gegner\KollisionsNummer,2,2
Collisions Gegner\KollisionsNummer,1,2,2
DebugLog "1"
Next

In der Hauptschleife:
BlitzBasic: [AUSKLAPPEN]

;;Schuss;;
If KeyHit(57) Then
HeliSchussChannel = PlaySound(HeliSchussSound)
Schuss.TypeSchuss = New TypeSchuss
Schuss\Sprite = CreateSprite()
EntityColor Schuss\Sprite,0,255,0
ScaleSprite Schuss\Sprite,0.4,0.4
PositionEntity Schuss\Sprite,EntityX(Cam),EntityY(Cam),EntityZ(Cam)
RotateEntity Schuss\Sprite,EntityPitch(Cam),EntityYaw(Cam),EntityRoll(Cam)
MoveEntity Schuss\Sprite,0,0,20
SchussKollisionsNummer = SchussKollisionsNummer + 0.0001
Schuss\KollisionsNummer = SchussKollisionsNummer
EntityType Schuss\Sprite,Schuss\KollisionsNummer
Collisions 1,Schuss\KollisionsNummer,2,3
Collisions Schuss\KollisionsNummer,1,2,3
For Gegner.TypeGegner = Each TypeGegner
Collisions Schuss\KollisionsNummer,Gegner\KollisionsNummer,2,3
Collisions Gegner\KollisionsNummer,Schuss\KollisionsNummer,2,3
DebugLog "2"
Next
EndIf
For Schuss.TypeSchuss = Each TypeSchuss
MoveEntity Schuss\Sprite,0,0,12
If EntityZ(Schuss\Sprite)>EntityZ(Cam) + 200 Or EntityX(Schuss\Sprite)>EntityX(Cam) + 200 Then
FreeEntity Schuss\Sprite
Delete Schuss
EndIf
Next
For Gegner.TypeGegner = Each TypeGegner
Gegner\Richtung = Gegner\Richtung + Rand(-8,8)
RotateEntity Gegner\Ent,EntityPitch(Gegner\Ent),Gegner\Richtung,EntityRoll(Gegner\Ent)
MoveEntity Gegner\Ent,0,0,0.1
If EntityX(Gegner\Ent) < 0 Then
PositionEntity Gegner\Ent,0,EntityY(Gegner\Ent),EntityZ(Gegner\Ent)
EndIf
For Schuss.TypeSchuss = Each TypeSchuss
DebugLog "3"
If EntityCollided(Gegner\Ent,Gegner\KollisionsNummer) Then
DebugLog "aktiv"
EndIf
Next
Next

Doch zu dem Debuglog "Aktiv" kommt es nie,auch wenn ich eindeutig treffe und die Schüsse gleiten hindurch.Kann mir jemand Helfen?Die anderen Debuglogs kommen wie sie sollten!
Mfg Joshmami
 

feider

ehemals "Decelion"

BeitragSa, Apr 23, 2011 12:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Collisions nimmt nur Integer als Werte an, steht auch in der Hilfe.

Zudem musst du nicht jedem Gegner einen andere Kollisionsnummer geben. gib ihnen die selbe (z.b. 1) und schreibe ein Code: [AUSKLAPPEN]
collisions 1, 1, [irgendwas], [irgendwas]


Und noch ein Tipp: Wenn du nicht sehr langsam fliegende Schüsse willst, dann erstelle kein eigenes Entity für die Schüsse. Benutze BlitzBasic: [AUSKLAPPEN]
LinePick
.

mfg
Dece

TimBo

BeitragSa, Apr 23, 2011 12:27
Antworten mit Zitat
Benutzer-Profile anzeigen
mach mal bei Debuglog "3" ein Stop rein und schau, ob der EntityType auch wirklich richtig eingespeichert wurde.
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.

joshmami

BeitragSa, Apr 23, 2011 12:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke für die schnelle Antwort,
dass Collisions nur Integer nimmt
und auch die selbe Zahl sein kann wusste ich nicht, ich habe jetzt für die Schüsse immer 4 und die Gegner immer 3 verwendet.Allerdings klappt es trotzdem nicht. Der Code sieht jetzt so aus(vor der Hauptschleife):
BlitzBasic: [AUSKLAPPEN]
;;Kollisionen;;
EntityType Terrain,1
EntityType Cam,2
Collisions 1,2,2,2
Collisions 2,1,2,2
;;Gegner;;
For Zahl = 1 To 20
Gegner.TypeGegner = New TypeGegner
Gegner\Ent = CopyMesh(GegnerVorlage)
ScaleEntity Gegner\Ent,6,10,6
EntityColor Gegner\Ent,Rand(0,100),Rand(200,255),Rand(0,200)
PositionEntity Gegner\Ent,Rand(200,1000),550,Rand(200,1000)
Gegner\Leben = 1
Collisions 1,3,2,2
Collisions 3,1,2,2
Next

Nach der Hauptschleife:
BlitzBasic: [AUSKLAPPEN]
	;;Schuss;;
If KeyHit(57) Then
HeliSchussChannel = PlaySound(HeliSchussSound)
Schuss.TypeSchuss = New TypeSchuss
Schuss\Sprite = CreateSprite()
EntityColor Schuss\Sprite,0,255,0
ScaleSprite Schuss\Sprite,0.4,0.4
PositionEntity Schuss\Sprite,EntityX(Cam),EntityY(Cam),EntityZ(Cam)
RotateEntity Schuss\Sprite,EntityPitch(Cam),EntityYaw(Cam),EntityRoll(Cam)
MoveEntity Schuss\Sprite,0,0,20
EntityType Schuss\Sprite,4
Collisions 1,4,2,3
Collisions 4,1,2,3
For Gegner.TypeGegner = Each TypeGegner
Collisions 3,4,2,3
Collisions 4,3,2,3
DebugLog "2"
Next
EndIf
For Schuss.TypeSchuss = Each TypeSchuss
MoveEntity Schuss\Sprite,0,0,12
If EntityZ(Schuss\Sprite)>EntityZ(Cam) + 200 Or EntityX(Schuss\Sprite)>EntityX(Cam) + 200 Then
FreeEntity Schuss\Sprite
Delete Schuss
EndIf
Next
;;Gegner;;
For Gegner.TypeGegner = Each TypeGegner
Gegner\Richtung = Gegner\Richtung + Rand(-8,8)
RotateEntity Gegner\Ent,EntityPitch(Gegner\Ent),Gegner\Richtung,EntityRoll(Gegner\Ent)
MoveEntity Gegner\Ent,0,0,0.1
If EntityX(Gegner\Ent) < 0 Then
PositionEntity Gegner\Ent,0,EntityY(Gegner\Ent),EntityZ(Gegner\Ent)
EndIf
For Schuss.TypeSchuss = Each TypeSchuss
DebugLog "3"
If EntityCollided(Gegner\Ent,4) Then
DebugLog "aktiv"
End
EndIf
Next
Next

LinePick check ich nicht, könntest du vielleicht mal ein Beispiel posten?
Mfg Joshmami

joshmami

BeitragSa, Apr 23, 2011 12:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie schaue ich mir die Belegung von EntityType an?
Mfg Joshmami

Holzchopf

Meisterpacker

BeitragSa, Apr 23, 2011 12:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Bitte keine Doppelposts generieren Wink du kannst jederzeit deine Beiträge editieren (mit einem Klick auf den Edit-Button: user posted image) und eine Frage nachträglich hineinschreiben. Besonders bei so kurzem Zeitintervall, wird die Frage wohl kaum einer übersehen.

GetEntityType gibt dir übrigens den EntityType zurück.

Zu deinem Code: Du benutzt Collisions falsch. Es reicht vollkommen, zu Beginn einmal BlitzBasic: [AUSKLAPPEN]
Collisions 3,4,2,3
zu schreiben. Du musst dann einfach jedem Schuss EntityType 4 zuweisen und - was aktuell bei dir nicht der Fall zu sein scheint - jedem Gegner EntityType 3.

mfG
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm

joshmami

BeitragSa, Apr 23, 2011 14:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke Holzchopf,jetzt funkt's.
Mfg Joshmami

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group