(3D) Entity kolliedieren 1 mal zählen
Übersicht

LucySalzBetreff: (3D) Entity kolliedieren 1 mal zählen |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo liebe BB Gemeinde ^^
Ich hab folgende frage: Code: [AUSKLAPPEN] Graphics3D 1024, 768,32,2
SetBuffer BackBuffer() AmbientLight 20, 20, 20 Global m=0 Global camera=CreateCamera() Global cylinder=CreateCylinder(30) Global sphere=CreateCylinder(20) PositionEntity cylinder, 0, 0, 5 PositionEntity sphere, -5, 0, 5 Global light=CreateLight(1) PositionEntity light, 0, 2, 4 PositionEntity camera,0,0,-6 EntityColor sphere, 0, 200, 0 EntityColor cylinder, 200, 0, 0 EntityType cylinder, 1 EntityType sphere, 2 Collisions 1, 2, 2, 2 While Not KeyHit(1) If m=0 If KeyDown(200) MoveEntity cylinder,0,0,.1 EndIf If KeyDown(205) MoveEntity cylinder,.1,0,0 EndIf If KeyDown(203) MoveEntity cylinder,-.1,0,0 EndIf If KeyDown(208) MoveEntity cylinder,0,0,-.1 EndIf EndIf WireFrame(0) UpdateWorld RenderWorld Text 100,100, "distanz: " + EntityDistance(sphere, cylinder) If KeyHit(28) m=m+1 If m > 1 m= 0 EndIf EndIf If EntityCollided(cylinder, 2) If a = -7 FreeEntity sphere EndIf ResetEntity sphere a=a-1 EndIf Text 0,0,a Text 0,15,m If m=2 m = m - 2 EndIf Flip Wend da sollen die beiden cylinder kollidieren, aber die variabel wir nur wenn sie sich beide berühren fast ganz runter gezählt, ich möchte aber, dass jede einzelne kollision gezöhlt wird, also der cylinder zurücksetzen muss um erst eine weitere kollision zu machen?! |
||
Lars Kammer |
Omenaton_2 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Mach für dein bewegliches Objekt eine neue Variable, "InKollision%". Als Wert soll sie 0 oder 1 haben können. Start Wert ist 0.
Dann mach noch eine Rutine, die am Ende der Haupt Spiel Schleife (nach RenderWorld) in der ganz allgemein geprüft wird, ob seit der letzten Überprüfung eine Kollision statfand. Wenn ja, dann setzt du die InKollision auf 1, wenn nicht, dann auf 0. Auf jeden Fall wird diese Variable ständig (oder nur alle halbe Sekunde) aufgefrischt. Dann an der Stelle, wo du abhängig davon ob dein bewegliches Objekt neu mit etwas kollidiert was machen willst (wie Punkte abziehen, etc.) machst du das Bewirken von etwas davon abhängig, ob gerade eine Kollision statfindet UND ob die InKollision auf 0 steht. Dann zählt die Kollision nur dann, wenn vorher noch keine Kollision da war. InKollision wird jetzt auf 1 gesetzt. Also so bald eine Kollision statfindet, führst du nur ein Mal deine Rutine mit dem Inhalt aus und sperrst gleichzeitig die Rutine für weiteres Ausführen in dem du InKollision auf 1 stellst. Erst wenn die Sperre durch Nicht-Statfinden von Kollisionen aufgehoben wird, kann deine wichtige Inhalts-Rutine wieder ausgeführt werden. Ich bin mir nicht ganz sicher ob das so funktioniert, aber so kurz nachgedacht könnte das so gehen. |
||
LucySalzBetreff: ?? |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
jo danke erstmal, doch könntest du mir mal nen code schnipsel geben?
Ich glaub ich hab grade ein gedächtnis und nachdenk stillstand XD |
||
Lars Kammer |
LucySalzBetreff: ??? |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Keiner? | ||
Lars Kammer |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Kurz und Knapp: Nö. Wie wäre es wenn Du erstmal selbst drüber nachdenkst und die Früchte deiner Überlegungen in Code fasst und den testest?
Und wenn es dann noch nicht klappt kannst Du uns deinen neu erschaffenen Code zeigen und vielleicht finden wir ja die Fehler darin. Nebenbei: Doppelposts zum Pushen sind hier untersagt, also unterlass das bitte zukünftig. Danke. |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
Dottakopf |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi !
also erstmal.. nimm dir das zu herzen was Blade sagt. Hier im forum kommst du nur vorran wenn du zeigst das du es wenigstens sinnvoll versucht hast zu Lösen. Bitte versuche auch im ersten post genauer zu beschreiben was du brauchst und nicht, Zitat: HI... <quellcode> und <fast nichts aussagender einzeilger> ![]() Also... hier in der Hilfe gibts einen Befehl und sogar ein Beispiel welcher dich glücklich machen könnte. Rausfizeln UND VERSTEHEN musst du es selber. Viel Spaß damit! Hier der besagte Befehl: BlitzBasic: [AUSKLAPPEN] EntityCollided Hier lauffähiger code... Code: [AUSKLAPPEN] Graphics3D 640, 480 SetBuffer BackBuffer() camera = CreateCamera() RotateEntity camera, 45, 0, 0 PositionEntity camera, 0, 15, - 10 light = CreateLight() RotateEntity light, 45, 0, 0 sphere = CreateSphere(32) EntityType sphere, 1 EntityRadius sphere, 1 PositionEntity sphere, 0, 11, 0 cube = CreateCube() EntityType cube, 2 EntityColor cube, 0, 100, 0 PositionEntity cube, 0, - 5, 0 ScaleEntity cube, 10, 10, 10 cylinder = CreateCylinder(32) EntityType cylinder, 2 EntityColor cylinder, 255, 0, 0 PositionEntity cylinder, 0, 7, 0 ScaleEntity cylinder, 2, 2, 2 Collisions 1, 2, 2, 2 While Not KeyDown(1) x# = 0 y# = 0 z# = 0 If KeyDown(203) = 1 Then x# = - 0.1 If KeyDown(205) = 1 Then x# = 0.1 If KeyDown(208) = 1 Then z# = - 0.1 If KeyDown(200) = 1 Then z# = 0.1 MoveEntity sphere, x#, - 0.1, z# UpdateWorld RenderWorld col = CountCollisions(sphere) Text 0, 0, "Kollision(en):" Text 300, 0, "1. Kollision mit:" + EntityCollided(sphere, 2) For i = 1 To col Text 000, i * 20, "Entity=" + CollisionEntity(sphere, i) Text 150, i * 20, "Surface=" + CollisionSurface(sphere, i) Text 300, i * 20, "Triangle=" + CollisionTriangle(sphere, i) Next Flip Wend End Hier im Forum unter Hilfe -> 3D -> und Kollision wirst du fündig. Gruß Dottakopf |
||
Rechtschreibfehler gelten der allgemeinen Belustigung! |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group