Thread: Stop for... loop View Single Post
#12
 Johannes Member Join Date: Jan 2005 Posts: 143
Tried your example. Works, but it is only good for the case of one ball. Tried to change it (see below) to fit the more general purpose of more balls and objects:

collidables=[]
collidables.append(myroom)
collidables.append(ball)

I repaced info = ball.collidingwith(myroom,1) with

for objects in collidables:
#Perform the collision check with the object
info = ball.collidingwith(object,1)

Does not work.
Best,
Johannes

Here is the full changed Program
import viz
import vizmat

viz.go()

myroom.collidemesh()
ball.collidesphere(0.25)
ball.vector = viz.Vector(1,1,1)
ball.translate(0,1,0)

collidables=[]
collidables.append(myroom)
collidables.append(ball)

def moveball():
while 1:
info = ball.collidingwith(myroom,1)
#Perform the collision check with the room
if info.intersected:
#Set the balls new vector to the reflection vector
ball.vector = viz.Vector(vizmat.ReflectionVector(ball.vector,inf o.normalVector))
#Create a vector of the normal of the collision
normal = viz.Vector(info.normalVector)
#Check dot product of velocity and normal
if ball.vector * normal < 0:
ball.vector *= -1
#Get the balls current position
pos = ball.get(viz.POSITION)
#Calculate the balls future position based on its velocity
futurePos = pos + (ball.vector * 0.02)
ball.translate(futurePos.get())
viz.waittime(0.01)
viz.director(moveball)