Bowlingbahn in GroIMP Hallo zusammen,
ich bastel gerade mit GroIMP rum, das ist ein auf Java basierendes OpenSourceProgramm, in welchem man Wachstumsprozesse simulieren kann. Aktuell hab ich versucht, mir mal eine
Bowlingbahn zusammen zu schustern. Die Bahn steht, die Kugel rollt und die Kegel stehen...
und stehen. Meine Frage: Wie kann ich eine Kollisionsabfrage programmieren?
Hier ist mein Quellcode, die Shaders fehlen da zwar, aber das ist ja nicht sooo wichtig: Zitat:
module Cube;
module Pins;
module Ball;
module Schleife;
const Shader bahn = shader("bahn");
const Shader kugel = shader("kugel");
const Shader kegel = shader("kegel");
int i=0;
protected void init ()
[
Axiom ==>
//die Bahn an sich
[Cube
Box(15,4,0.4).(setShader(bahn)) Translate(2.5,0.1,-15) //RU(270) RL(90)
Box(15,1,0.2) Translate(-5,0,-15)
Box(15,1,0.2)
]
//die Kegel, aus jeweils 3 Körpern zusammengesetzt und mit translate positioniert
[Pins RU(270) RL(90) Translate(15,0,0)
[Translate(-1,0.4,0.4)
Frustum(1,0.2,0.1).(setShader(kegel)) RL(180) Translate( 0,0,1)
Frustum(0.3,0.2,0.2).(setShader(kegel)) Translate(0,0,-1.4)
Sphere(0.2).(setShader(kegel))
]
[Translate(-1,1.2,0.4)
Frustum(1,0.2,0.1).(setShader(kegel))RL(180) Translate( 0,0,1)
Frustum(0.3,0.2,0.2).(setShader(kegel)) Translate(0,0,-1.4)
Sphere(0.2).(setShader(kegel))
]
[Translate(-1,-0.4,0.4)
Frustum(1,0.2,0.1).(setShader(kegel))RL(180) Translate( 0,0,1)
Frustum(0.3,0.2,0.2).(setShader(kegel)) Translate(0,0,-1.4)
Sphere(0.2).(setShader(kegel))
]
[Translate(-1,-1.2,0.4)
Frustum(1,0.2,0.1).(setShader(kegel))RL(180) Translate( 0,0,1)
Frustum(0.3,0.2,0.2).(setShader(kegel)) Translate(0,0,-1.4)
Sphere(0.2).(setShader(kegel))
]
[Translate(-1.7,-0.8,0.4)
Frustum(1,0.2,0.1).(setShader(kegel))RL(180) Translate( 0,0,1)
Frustum(0.3,0.2,0.2).(setShader(kegel)) Translate(0,0,-1.4)
Sphere(0.2).(setShader(kegel))
]
[Translate(-1.7,0,0.4)
Frustum(1,0.2,0.1).(setShader(kegel))RL(180) Translate( 0,0,1)
Frustum(0.3,0.2,0.2).(setShader(kegel)) Translate(0,0,-1.4)
Sphere(0.2).(setShader(kegel))
]
[Translate(-1.7,0.8,0.4)
Frustum(1,0.2,0.1).(setShader(kegel))RL(180) Translate( 0,0,1)
Frustum(0.3,0.2,0.2).(setShader(kegel)) Translate(0,0,-1.4)
Sphere(0.2).(setShader(kegel))
]
[Translate(-2.4,-0.4,0.4)
Frustum(1,0.2,0.1).(setShader(kegel))RL(180) Translate( 0,0,1)
Frustum(0.3,0.2,0.2).(setShader(kegel)) Translate(0,0,-1.4)
Sphere(0.2).(setShader(kegel))
]
[Translate(-2.4,0.4,0.4)
Frustum(1,0.2,0.1).(setShader(kegel))RL(180) Translate( 0,0,1)
Frustum(0.3,0.2,0.2).(setShader(kegel)) Translate(0,0,-1.4)
Sphere(0.2).(setShader(kegel))
]
[Translate(-3.1,0,0.4)
Frustum(1,0.2,0.1).(setShader(kegel))RL(180) Translate( 0,0,1)
Frustum(0.3,0.2,0.2).(setShader(kegel)) Translate(0,0,-1.4)
Sphere(0.2).(setShader(kegel))
]
]
//die Bowlingkugel
[Ball
Translate(0,-0.7,1.5)
Sphere(0.5).(setShader(kugel))
]
;
]
public void run ()
//Schleife, die dafür sorgt das die Kugel sich immer weiter die z-Achse entlangbewegt, bis i>=85,
//dann stoppt sie und die Kugel bleibt stehen
[
Ball ==> M(0.07) Schleife;
Schleife ==> M(0.07) Ball
if (i < 85) (Schleife {i++;} )
else {break;}
;
]
|
Die Kegel sollen einfach nur umfallen in dem Moment wo die Kugel sie erreicht. Also ganz einfach
gehalten. Es wär klasse, wenn mir da jemand weiterhelfen könnte.
Den Quellcode werd' ich noch vereinfachen, sobald alles funktioniert wie's soll'
Ich danke (allein schon für's lesen :P)
Mit besten Grüßen,
Muny |