Typekollision

Übersicht BlitzBasic Beginners-Corner

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

N0X

Betreff: Typekollision

BeitragSo, Jan 24, 2010 21:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!
Warum funktioniert meine Kollisionsabfrage nicht?

Code: [AUSKLAPPEN]
If KeyDown(57) Then
   For e.enemy = Each enemy
      If EntityCollided(e\mesh,PLY)
         End
      EndIf
   Next
EndIf


Mfg,
N0X
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5%

Nicdel

BeitragSo, Jan 24, 2010 21:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Weil nur geprüft wird, wenn du die Leertaste gedrückt hälst? Der Rest vom Code wäre ziemlich praktisch...
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7

N0X

BeitragSo, Jan 24, 2010 21:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Gut, hier mal das wichtigste.

(Achja, so blöd bin ich jetzt auch nicht, dass ich nicht weiß das ich die Leertaste gedrückt halten muss Rolling Eyes )

Code: [AUSKLAPPEN]
Type enemy
   Field mesh
End Type

;----------------------------------------------------------------------------------------------|
;Haupt-Teil
Graphics3D 1024,768,32,2
SetBuffer BackBuffer()
timer = CreateTimer(60)

;----------------------------------------------------------------------------------------------|
;3D Ressourcen
Global piv    = CreatePivot()
Global cam    = CreateCamera(piv)
Global player = LoadAnimMesh("models\dwarf1.b3d")

Global gegner = LoadAnimMesh("models\dwarf2.b3d")
Global horse  = LoadMesh("models\horse2.3ds")

;----------------------------------------------------------------------------------------------|
;Gegner
For i = 0 To 1
   e.enemy   = New enemy
   e\mesh    = CopyEntity(gegner)
Next

For o = 0 To 49
   e.enemy   = New enemy
   e\mesh    = CopyEntity(horse)
Next

;----------------------------------------------------------------------------------------------|
;Haupt-Schleife
While Not KeyHit(1)
   WaitTimer(timer)
   
   initBattleSys()
   
   ;----------------------------------------------------------------------------------------------|
   RenderWorld()
   UpdateWorld()
   Flip 0
Wend
End

Function initBattleSys()
   For e.enemy = Each enemy
      If KeyDown(57) Then
         If EntityCollided(e\mesh,PLY)
            End
         EndIf
      EndIf
   Next
End Function
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5%

Nicdel

BeitragSo, Jan 24, 2010 21:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Collisions fehlt, EntityType fehlt, deklaration von PLY fehlt.

Edit: Macht euch nichts draus, man kann nicht immer der erste sein Very Happy
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7
  • Zuletzt bearbeitet von Nicdel am So, Jan 24, 2010 21:59, insgesamt einmal bearbeitet

Tankbuster

BeitragSo, Jan 24, 2010 21:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Collisions Rolling Eyes

Und PLY hat keinen Wert...

€: zu spät
Twitter
Download Jewel Snake!
Windows|Android

Xeres

Moderator

BeitragSo, Jan 24, 2010 21:58
Antworten mit Zitat
Benutzer-Profile anzeigen
EntityType fehlt.

meh. ich werde alt und lahm...
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

N0X

BeitragSo, Jan 24, 2010 22:03
Antworten mit Zitat
Benutzer-Profile anzeigen
So?

Code: [AUSKLAPPEN]
Const PLY=1

Type enemy
   Field mesh
End Type

;----------------------------------------------------------------------------------------------|
;Haupt-Teil
Graphics3D 1024,768,32,2
SetBuffer BackBuffer()
timer = CreateTimer(60)

;----------------------------------------------------------------------------------------------|
;3D Ressourcen
Global piv    = CreatePivot()
Global cam    = CreateCamera(piv)
Global player = LoadAnimMesh("models\dwarf1.b3d")

Global gegner = LoadAnimMesh("models\dwarf2.b3d")
Global horse  = LoadMesh("models\horse2.3ds")

EntityType(player,PLY)

;----------------------------------------------------------------------------------------------|
;Gegner
For i = 0 To 1
   e.enemy   = New enemy
   e\mesh    = CopyEntity(gegner)
Next

For o = 0 To 9
   e.enemy   = New enemy
   e\mesh    = CopyEntity(horse)
Next

;----------------------------------------------------------------------------------------------|
;Haupt-Schleife
Collisions(PLY,enemy,2,2)
While Not KeyHit(1)
   WaitTimer(timer)
   
   initBattleSys()
   
   ;----------------------------------------------------------------------------------------------|
   RenderWorld()
   UpdateWorld()
   Flip 0
Wend
End


Klappt nicht.
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5%

Nicdel

BeitragSo, Jan 24, 2010 22:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei den Gegner fehlt immernoch EntityType, enemy ist ein Type und keine Konstante, das geht nicht. Schau dir das Beispiel in der Onlinehilfe an!
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7

N0X

BeitragSo, Jan 24, 2010 22:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Nochmal geändert, klappt noch nicht. Was habe ich jetzt noch falsch?

Code: [AUSKLAPPEN]
Const PLY=1,GEG=2

Type enemy
   Field mesh
End Type

;----------------------------------------------------------------------------------------------|
;Haupt-Teil
Graphics3D 1024,768,32,2
SetBuffer BackBuffer()
timer = CreateTimer(60)

;----------------------------------------------------------------------------------------------|
;3D Ressourcen
Global piv    = CreatePivot()
Global cam    = CreateCamera(piv)
Global player = LoadAnimMesh("models\dwarf1.b3d")

Global gegner = LoadAnimMesh("models\dwarf2.b3d")
Global horse  = LoadMesh("models\horse2.3ds")

EntityType(player,PLY)

;----------------------------------------------------------------------------------------------|
;Gegner
For i = 0 To 1
   e.enemy   = New enemy
   e\mesh    = CopyEntity(gegner)
   EntityType(e\mesh,GEG)
Next

For o = 0 To 9
   e.enemy   = New enemy
   e\mesh    = CopyEntity(horse)
Next

;----------------------------------------------------------------------------------------------|
;Haupt-Schleife
Collisions(PLY,GEG,2,2)
While Not KeyHit(1)
   WaitTimer(timer)
   
   initBattleSys()
   
   ;----------------------------------------------------------------------------------------------|
   RenderWorld()
   UpdateWorld()
   Flip 0
Wend
End

Function initBattleSys()
   For e.enemy = Each enemy
         If EntityCollided(player,GEG)
            End
         EndIf
   Next
End Function
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5%

Diedel

BeitragSo, Jan 24, 2010 22:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Vl., dass Du nun die Gegner auf Kollision mit den Gegnern überprüfst?

Code: [AUSKLAPPEN]
Function initBattleSys()
   For e.enemy = Each enemy
         If EntityCollided(player,GEG)  ; <=Da stand doch vorher noch PLY anstatt GEG
            End
         EndIf
   Next
End Function
Owned.

N0X

BeitragSo, Jan 24, 2010 22:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Ähm, ne!
Wenn da Code: [AUSKLAPPEN]
EntityCollided(e\mesh,GEG)
stehen würde, dann würde ich Gegner auf Gegner überprüfen. (Player ist nunmal der Player ^^)
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5%

Diedel

BeitragSo, Jan 24, 2010 22:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Gut, um es anderst auszudrücken: Dann schau deinen zuletzt geposteten Code doch bitte einmal etwas genauer an.
Owned.
  • Zuletzt bearbeitet von Diedel am So, Jan 24, 2010 22:43, insgesamt einmal bearbeitet

Tankbuster

BeitragSo, Jan 24, 2010 22:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Und warum prüfst du für jeden Gegner, ob der Spieler mit einem Gegner kollidiert?

Code: [AUSKLAPPEN]
   For e.enemy = Each enemy
         If EntityCollided(player,GEG)


Code: [AUSKLAPPEN]
EntityCollided(e\mesh,PLY)

mach da doch wirklich mehr Sinn.
Twitter
Download Jewel Snake!
Windows|Android

N0X

BeitragSo, Jan 24, 2010 22:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, klar, geändert!
Ich stehe ja momentan im Modell. Wenn ich mich jetzt nach links bewege, dann ist dort kurz eine Kollision. (DebugLog) Wie kann ich den "Kollisionsradius" eines Modells ändern? Geht das?

//EDIT:
Achja, zum Testen habe ich das (wohl allen bekannte) Psionic's Dwarf Modell benutzt.
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5%

Xeres

Moderator

BeitragSo, Jan 24, 2010 22:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Es würde helfen, wenn du die Online Hilfe tatsächlich liest... EntityRadius taucht dabei sicher auf...
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

N0X

BeitragSo, Jan 24, 2010 23:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Jetzt weiß ich echt nicht mehr weiter. Habe alles ausprobiert. (auch EntityRadius)
Ich habe den Code nochmal gekürzt. Aber so wie der jetzt ist müsste er doch eigentlich funktionieren, oder?

Code: [AUSKLAPPEN]
Const PLY=1,GEG=2

Type enemy
   Field mesh
End Type

;----------------------------------------------------------------------------------------------|
;Haupt-Teil
Graphics3D 1024,768,32,2
SetBuffer BackBuffer()
timer = CreateTimer(60)

;----------------------------------------------------------------------------------------------|
;3D Ressourcen
Global piv    = CreatePivot()
Global cam    = CreateCamera(piv)
Global player = LoadAnimMesh("models\dwarf1.b3d")

Global gegner = LoadAnimMesh("models\dwarf2.b3d")

EntityType(player,PLY)
;----------------------------------------------------------------------------------------------|
;Gegner
e.enemy   = New enemy
e\mesh    = CopyEntity(gegner)

EntityType(e\mesh,GEG)

;----------------------------------------------------------------------------------------------|
;Haupt-Schleife
Collisions(PLY,GEG,2,2)
While Not KeyHit(1)
   WaitTimer(timer)
   
   move()
   initBattleSys()
   
   ;----------------------------------------------------------------------------------------------|
   RenderWorld()
   UpdateWorld()
   For e.enemy = Each enemy
      DebugLog(""+EntityCollided(e\mesh,PLY))
   Next
   Flip 0
Wend
End

Function initBattleSys()
   For e.enemy = Each enemy
      If EntityCollided(e\mesh,PLY) Then
         End
      EndIf
   Next
End Function

Function move()
   PositionEntity piv,EntityX(player),EntityY(player),EntityZ(player)
   
   If KeyDown(17) Then
      MoveEntity player,0,0,1
   EndIf
   If KeyDown(31) Then
      MoveEntity player,0,0,-1
   EndIf
   If KeyDown(30) Then
      MoveEntity player,-1,0,0
   EndIf
   If KeyDown(32) Then
      MoveEntity player,1,0,0
   EndIf
End Function
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5%

Xeres

Moderator

BeitragSo, Jan 24, 2010 23:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
EntityCollided(player,GEG)

Der Spieler ist das sich bewegende Objekt, von dem geprüft wird, ob es auf die Gruppe "GEG" auftrifft!

Edit:
Und für den anderen Fall muss Collisions natürlich anders herum definiert werden:
Code: [AUSKLAPPEN]
Collisions(GEG,PLY,2,2)


Dann muss sich nur e\mesh bewegen:

BlitzBasic: [AUSKLAPPEN]
Const PLY=1,GEG=2

Type enemy
Field mesh
End Type

;----------------------------------------------------------------------------------------------|
;Haupt-Teil
Graphics3D 1024,768,32,2
SetBuffer BackBuffer()
timer = CreateTimer(60)

;----------------------------------------------------------------------------------------------|
;3D Ressourcen
Global piv = CreatePivot()
Global cam = CreateCamera(piv)
Global player = CreateCube() ;LoadAnimMesh("models\dwarf1.b3d")

Global gegner = CreateSphere() ;LoadAnimMesh("models\dwarf2.b3d")

EntityType(player,PLY)
;----------------------------------------------------------------------------------------------|
;Gegner
e.enemy = New enemy
e\mesh = CopyEntity(gegner)

EntityType(e\mesh,GEG)
EntityRadius(e\mesh, 1, 1)
PositionEntity(e\mesh, 0, 0, +5)

;----------------------------------------------------------------------------------------------|
;Haupt-Schleife
Collisions(GEG,PLY,2,2)
While Not KeyHit(1)
WaitTimer(timer)

move()
;initBattleSys()

;----------------------------------------------------------------------------------------------|
RenderWorld()
UpdateWorld()
For e.enemy = Each enemy
If EntityCollided(e\mesh,PLY) Then Text(10,10,"Kollision! "+e\mesh) ;DebugLog(""+EntityCollided(e\mesh,PLY))
Next
Flip 0
Wend
End

Function initBattleSys()
For e.enemy = Each enemy
If EntityCollided(e\mesh,PLY) Then
End
EndIf
Next
End Function

Function move()
e.enemy = First enemy
PositionEntity piv,EntityX(player),EntityY(player),EntityZ(player)

If KeyDown(17) Then
MoveEntity e\mesh,0,0,1
EndIf
If KeyDown(31) Then
MoveEntity e\mesh,0,0,-1
EndIf
If KeyDown(30) Then
MoveEntity e\mesh,-1,0,0
EndIf
If KeyDown(32) Then
MoveEntity e\mesh,1,0,0
EndIf
End Function
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

N0X

BeitragSo, Jan 24, 2010 23:21
Antworten mit Zitat
Benutzer-Profile anzeigen
AHH! Das hatte ich doch auch schonmal, und es klappt wieder nicht.
Es kommt einmal ganz kurz eine Kollision (bei dem Zwerg), wenn mich nach rechts bewege.
Das wars aber auch! Mad

Code: [AUSKLAPPEN]
Const PLY=1,GEG=2

Type enemy
   Field mesh
End Type

;----------------------------------------------------------------------------------------------|
;Haupt-Teil
Graphics3D 1024,768,32,2
SetBuffer BackBuffer()
timer = CreateTimer(60)

;----------------------------------------------------------------------------------------------|
;3D Ressourcen
Global piv    = CreatePivot()
Global cam    = CreateCamera(piv)
Global player = LoadAnimMesh("models\dwarf1.b3d")

Global gegner = LoadMesh("models\dwarf2.3ds")

EntityType(player,PLY)
;----------------------------------------------------------------------------------------------|
;Gegner
e.enemy   = New enemy
e\mesh    = CopyEntity(gegner)

EntityType(e\mesh,GEG)

;----------------------------------------------------------------------------------------------|
;Haupt-Schleife
Collisions(PLY,GEG,2,1)
While Not KeyHit(1)
   WaitTimer(timer)
   
   move()
   initBattleSys()
   
   ;----------------------------------------------------------------------------------------------|
   RenderWorld()
   UpdateWorld()
   DebugLog(""+EntityCollided(player,GEG))
   Flip 0
Wend
End

Function initBattleSys()
      If EntityCollided(player,GEG) Then
         End
        EndIf
End Function

Function move()
   PositionEntity piv,EntityX(player),EntityY(player),EntityZ(player)
   
   If KeyDown(17) Then
      MoveEntity player,0,0,1
   EndIf
   If KeyDown(31) Then
      MoveEntity player,0,0,-1
   EndIf
   If KeyDown(30) Then
      MoveEntity player,-1,0,0
   EndIf
   If KeyDown(32) Then
      MoveEntity player,1,0,0
   EndIf
End Function


//EDIT:
Bei anderen Modellen wird die Kollision garnicht erkannt!
Und mit [[MeshesIntersect()]] klappts einwandfrei. (Da das aber langsamer sein soll, lasse ich das lieber.)
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5%

Xeres

Moderator

BeitragSo, Jan 24, 2010 23:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Naja, du erstellst beide Entitys auf Position 0,0,0 ineinander. Das kann ja bloß komische Ergebnisse liefern.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

N0X

BeitragSo, Jan 24, 2010 23:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Hm, alles in allem ist bei mir EntityCollide() glaube ich ziemlich verbuggt, aber jetzt funktioniert es einigermaßen. Danke.
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5%

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group