[Closed] move one object by moving another
I know this is a real basic question but I can’t seem to figure it out.
Say you have two boxes. With a script how do you make it so that when you move one box along y it makes the other box move up and down along x on a sin wave?
I am trying to do this in real time so that when I move the one box along y with the mouse I get these results. I don’t want to have to key.
I tried a position controller but that doesn’t seem to work in real time. What am I missing?
what you’re looking for is one of…
- parameter wiring
- expression controller
- script controller
Attached is an example with a script controller. Move the text up and down to make the box move straight horizontally, and in a sine wave vertically. In track view, open the properties of Box02’s X and Y position tracks to see what it does.
Thats what I was looking for!
Now the real question and I apologize if I am asking too much, but how do you write a script that would do that. I can’t seem to figure out the right expression and when I look up the expression controler in the maxscript reference it doesn’t make that much sense to me…is the only thing that it can accept a string for it’s expression?
Thank you so much for your help.
Here’s a script_controller version of what you’re after…
-- create two objects
b = box()
b2 = box pos:[50,50,25]
-- create a variable holding the difference in the two positions
offset = b.pos - b2.pos
-- create a point to hold the script, then create the script
p = point()
fs = float_script()
p.position.z_position.controller = fs
fs.addNode "cube1" b
fs.addNode "cube2" b2
fs.script = "cube2.pos = cube1.pos - offset
0" /* the zero
is tacked on at the end because float script needs to return a float */
ParamWire version…
b = box()
b2 = box pos:[50,50,25]
paramWire.connect2way b.pos.controller[#x_position]\
b2.pos.controller[#x_position] ("x_position")("X_Position + 50")
paramWire.connect2way b.pos.controller[#y_position] \
b2.pos.controller[#y_position] ("y_position")("y_Position + 50")
paramWire.connect2way b.pos.controller[#z_position] \
b2.pos.controller[#z_position] ("z_position")("z_Position + 25")
in the script version… what happens when you restart max and reload the file? Doesn’t the “offset” variable get lost? You’d have to make it a global variable Better to add it as a variable to the controller?
Also… no sine wave motion – but that should be easy enough to add.
Now an expression controller version?
Awesome! Thank you both so much for your help! Exactly what I was looking for.