PDA

View Full Version : inheritence question


theuberk
01-09-2008, 06:42 AM
Hi,

I'm trying to make custom class called car a subclass of the VizNode class, but I'm having a few problems. Here is the main part of my constructor for the car class:

class Car(viz.VizNode):

def __init__(self, direction = "right", id = sys.carID):

randomCar = random.randint(1,14)

if (randomCar == 10):
randomCar += 1
if (randomCar > 10):
self.tempCar = viz.add( "cars\car_" + str(randomCar) + ".ive" )
else:
self.tempCar = viz.add( "cars\car_0" + str(randomCar) + ".ive" )

viz.VizNode.__init__( self, self.tempCar.id )

The problem lies in that I cannot seem to manipulate any of the fields present in the VizNode class from outside the car class. For example:

If I add the following code to the car constructor:

self.tempCar.collideBox()
self.tempCar.setVelocity([10,0,0])


the car will fall and move along the x-axis at 10units/s

however, if I type the following code outside of the car class:

viz.go()
viz.phys.enable()
car = Car()
car.collideBox()
car.setVelocity([100,0,0])

I get the following error:

Cannot collideBox with invalid bounding box

collideBox is not the only method that does not work. I've also tried methods like car.setPosition(10,0,0) which also does not do anything.

Any ideas?

farshizzo
01-09-2008, 04:10 PM
Can you provide a minimal working sample that reproduces the problem? The following code works for me:class Car(viz.VizNode):
def __init__(self):

model = viz.add('mini.osgx')

viz.VizNode.__init__(self,model.id)


import viz
viz.go()

c = Car()
c.setPosition(0,0,10)
c.setEuler(180,0,0)
c.addAction(vizact.spin(0,1,0,90))

theuberk
01-10-2008, 06:49 AM
Alright I figured out the problem. It had to do with getting a child object from the model that was imported as a "car". This was code that was in the constructor that I didn't include in my previous post because I didn't think it was important (oops.):

self.frontWheels = self.tempCar.getChild( '0' + str(randomCar) + 'tyresBack-OFFSET' )
self.backWheels = self.tempCar.getChild( '0' + str(randomCar) + 'tyresFront-OFFSET' )


this needed to be changed to:

self.frontWheels = self.getChild( '0' + str(randomCar) + 'tyresBack-OFFSET' )
self.backWheels = self.getChild( '0' + str(randomCar) + 'tyresFront-OFFSET' )

theuberk
01-10-2008, 07:01 AM
Sorry I forgot, I also had to change the name of the ID parameter in the constructor. It must have been scope problems with tempcar.id or something..