Collisions
Übersicht

![]() |
PddBetreff: Collisions |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo,
Ich habe mom. ein Problem mit 3D-Collisions. (Gibt es dazu ein Tutorial o.ä.? ) Hier mein Code: Code: [AUSKLAPPEN] ... For Player = Each TPlayer EntityType Player\schiff, Player\ID ; muss das jedesmal sein? oder reicht das einmal, am anfang als der Player erstellt wird? MoveEntity Player\schiff, 0, 0, Player\Speed# ... For Schuss = Each TSchuss EntityType Schuss\Cube, 999 ; Muss das jedesmal sein? o.O Collisions Player\ID, 999, 2, 1 ; Muss das jedesmal sein? ;ClearCollisions ; Muss das rein oder nicht? MoveEntity Schuss\Cube, 0, 0, Schuss\Speed For s = 1 To 15 ; Schüsse stückweise versetzen, damit der Schuss nicht das schiff überspringt. MoveEntity Schuss\Cube, 0, 0, (Schuss\Speed / 15) Col_Anzahl = CountCollisions(Player\schiff) For i = 1 To Col_Anzahl DebugLog("COL!!! >>> " + CollisionEntity(Player\schiff, i) + " <<< ") Next Next Next Leider funktioniert das nicht richtig. Hat einer ne Idee? |
||
Lieber Apfel als Birne. |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
EntityType und Collisions müssen nicht immer wieder gesetzt werden. Bei ClearCollisions bin ich mir nicht ganz sicher. Probleme hat es bei mir nicht gegeben, wenn man es nicht in ein Loop rein setzte. Auch dann nicht, wenn tausende Kollisionen statt gefunden haben. Es muß auch nicht eine schrittweise Kollisionsprüfung durchgeführt werden, um ein Objekt durch zu hoche Geschwindigkeit nicht durch ein Hinderniss schiessen zu lassen. Das macht 3D schon für dich... | ||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Deine "Move damit nicht überspringt" funktionalität ist eine gute idee. Leider wird ein updateworld notwendig um die Kollisionen neu zu berechnen.
Wenn du "überspringen" verhindern willst, empfielt sich LinePick. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
Pdd |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also es tut ![]() Code: [AUSKLAPPEN] For Player = Each TPlayer
For Schuss = Each TSchuss Col_Anzahl = CountCollisions(Schuss\Cube) For i = 1 To Col_Anzahl DebugLog("COL!!! >>> " + CollisionEntity(Player\schiff, i) + " <<< ") Next Next Next Diese FUnktion nützt garnichts. Denn es zeigt nichts an. Das es tut merke ich nur daran, das die Schüsse am Gegner hängen bleiben ![]() ![]() |
||
Lieber Apfel als Birne. |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
@Dreamora, hab ich jetzt was falsch verstanden? Ein Überspringen kommt nicht vor in 3D. Dazu hab ich mal ein Testprogramm geschrieben. Falls es bei euch anders sein sollte, so währe es natürlich gravierend!
Code: [AUSKLAPPEN] Graphics3D 400,400,0,2
SetBuffer BackBuffer() camera=CreateCamera() PositionEntity camera,0,0,-20 light=CreateLight() RotateEntity light,40,20,0 cube=CreateCube() ScaleEntity cube,.1,10,10 EntityType cube,2 sphere1=CreateSphere() EntityType sphere1,1 sphere2=CreateSphere() EntityColor sphere2,255,0,0 Collisions 1,2,2,2 For x=15 To -15 Step -10 PositionEntity sphere1,x,2,0 PositionEntity sphere2,x,-2,0 UpdateWorld RenderWorld Flip Delay 1000 Next End |
||
![]() |
Pdd |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja, also Überspringen tut er nicht ![]() Hab aber das Problem, das die Schüsse zwar hängenbleiben, aber nicht "registriert" werden. Code: [AUSKLAPPEN] For Player = Each TPlayer
For Schuss = Each TSchuss If EntityCollided(Player\schiff, 999) <> 0 Then DebugLog("col!") Col_Anzahl = CountCollisions(Schuss\Cube) For i = 1 To Col_Anzahl DebugLog("COL!!! >>> " + CollisionEntity(Player\schiff, i) + " <<< ") Next Next Next[quote] Ich probiere also 2 Möglichkeiten, einmal EntityCollieded, und einmal mit CountCollissions. Doch im Log wird nichts angezeigt! Wie kannich denn nun erkennen ob eine Kollision stattgefunden hat?[/quote] |
||
Lieber Apfel als Birne. |
![]() |
Markus2 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Collisionen finden nur statt bei den Dingen die sich bewegt haben so weit ich mich erinnern kann ... | ||
![]() |
Pdd |
![]() Antworten mit Zitat ![]() |
---|---|---|
Aber beides Bewegt sich! Schiff und Schuss! ![]() |
||
Lieber Apfel als Birne. |
![]() |
Markus2 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hm,
habe dir mal nen Beispiel gemacht wie es sein sollte : Rechte Maustaste bewegt den Schuss auf einen Spieler wo Punkte abgezogen werden und der Spieler wo der Schuss her kam bekommt Punkte . Code: [AUSKLAPPEN] Graphics3D 640,480,0,0 cam=CreateCamera() PositionEntity cam,0,0,-8 CameraClsColor cam,64,64,64 ;---------------------------- Type TPlayer Field e Field Schield# Field Points End Type Global p1.TPlayer p1.TPlayer=New TPlayer p1\e=CreateCube() p1\Schield=255 EntityType p1\e,1 ;<- EntityRadius p1\e,1 NameEntity p1\e,"Spieler 1" MoveEntity p1\e,6,0,0 Global p2.TPlayer p2.TPlayer=New TPlayer p2\e=CreateCube() p2\Schield=255 EntityType p2\e,2 ;<- EntityRadius p2\e,1 NameEntity p2\e,"Spieler 2" ;---------------------------- Vorlage zum kopieren des Entitys Global eSchuss=CreateCube() EntityColor eSchuss,255,0,0 HideEntity eSchuss EntityType eSchuss,999 EntityRadius eSchuss,1 NameEntity eSchuss,"Schuss" ;---------------------------- Type TSchuss Field e Field p.TPlayer End Type ;---------------------------- MainLoop() End Function MainLoop() Local i Local ColAnzahl Local s.TSchuss Local p.TPlayer ClearCollisions Collisions 999,1, 2,1 ;Schuss 999 mit Spieler 1 testen , Kugel zu Polygon , Stop Collisions 999,2, 2,1 ;Schuss 999 mit Spieler 2 testen , Kugel zu Polygon , Stop While Not KeyHit(1) s.TSchuss=First TSchuss If s=Null Then NeuerSchuss p1 Else If MouseDown(1)>0 Then MoveEntity s\e,-0.5,0,0 If MouseDown(2)>0 Then MoveEntity s\e, 0.5,0,0 EndIf UpdateWorld RenderWorld For s = Each TSchuss ColAnzahl = CountCollisions(s\e) If ColAnzahl Then Text 0,0,"COL " + ColAnzahl + "x " + EntityName(s\e) + " von " + EntityName(s\p\e) For i = 1 To ColAnzahl e=CollisionEntity(s\e,i) Text 0,i*14,"COL mit " + EntityName(e) For p = Each TPlayer If e=p\e Then p\Schield=p\Schield-1:If p\Schield<0 Then p\Schield=0 EntityColor e,p\Schield,p\Schield,p\Schield EndIf Next Next s\p\Points=s\p\Points+1 FreeEntity s\e Delete s EndIf Next Text 0,200,"Spieler 1 Punkte "+p1\Points Text 0,214,"Spieler 2 Schield "+p2\Schield Flip Wend End Function Function NeuerSchuss(p.TPlayer) Local s.TSchuss s.TSchuss=New TSchuss s\e=CopyEntity(eSchuss) s\p=p ;<- von wem der Schuss kam MoveEntity s\e,-5,0,0 End Function |
||
FBI-blitz |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
https://www.blitzforum.de/foru...php?t=9775
Das ist n Tutorial dazu.... |
||
Computer 1: AMD Athlon64 3500+ | nVidia GF 7900GT | 1024 MB DDR-RAM | ASUS A8N-SLI Preimium | 250 GB SATA 2 || WindowsXP | Blitz3D | Blitz+
Computer 2: AMD AthlonXP 2400+ | ATI Radeon 9500 | 512 MB DDR-RAM | MSI K7N2 | 80 GB IDE | 160 GB IDE || WindowsXP | Blitz3D | Blitz+ Computer 3: Intel Pentium MMX | onBoard-Grafik | 32 MB RAM | 1 GB IDE || Windows 98 SE | Blitz+ |
![]() |
Pdd |
![]() Antworten mit Zitat ![]() |
---|---|---|
Vielen Dank, habs hinbekommen, es funktioniert jetzt wunderbar *freu* ![]() |
||
Lieber Apfel als Birne. |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group