Jack Cloud
Forum Replies Created
-
Hey guys,
I too am animating a 2D plant character like from Little Shop of Horrors. I’ve run into a snag and wondered if you guys had any thoughts.
My rig is such:
Plant Leaves and Flower Petals have been rigged using simple expressions on rotation and parented to a slider on a Null. These are around 6 layers in total
The stem of the plant I used the Puppet tool with an expression linking it to a Null like this:n=thisComp.layer(“NullObject_Name”);
nullpos=n.toComp(n.anchorPoint);
fromComp(nullpos);The snag is that although the flower petal and leaves are parented to the Puppet Layer, they do not respond to position changes as you animate the puppet layer and of course it all falls apart. The leaves and Petals do not follow the stem.
SO,
I Pre-comped the whole thing and re-routed the expressions to the new comp and tried to Puppet that new layered Pre-comp. Ah that will not accept the puppet pins at all. So I guess I’m figuring out that you cannot Puppet Tool a Pre-Comp that contains multiple layers?
Big Bummer! Any thoughts are appreciated.cheers,
Jackcheers
-
THAT DID IT!!! Your a rockstar in my book Dan!
I only wish I understood more clearly this code you’ve written
I get the 1st 3 variables
but can I learn about the for statement on motionscripts
Also the i statement. I don’t see a variable defining it?
Whatever you did works and works well. All I have to do is change the expression if I add more instances.
I could probably connect that to a slider and just count out the number of instances, then I can leave the expression alone.
YOU ROCK did I already say that?!This code is quite useful for grabbing a specific number of layers in a comp and doing something with them.
numInstances = 5;
idx = thisComp.layer(“Blink”).index;
gotBlink = false;
for (i = 0; i < numInstances; i++){
L = thisComp.layer(idx+i);
if (time >= L.inPoint && time < L.outPoint) gotBlink = true;
}
gotBlink ? 0 : 100cheers
-
Hi Dan, thanks so much for your timely replies. This is useful knowledge as well.
I may have been unclear though. I would like the eyelash to respond to ALL instances of the Blink
and so far I’ve only been able to get it to one instance (occurrence). I did notice that I can change the number and it would see the Blink above or below BUT reference ALL has not been successful yet.I could use index I suppose but then it would reference the other layers that are NOT Blink as well eh?
cheers
-
Oops here’s the link:
https://gallery.me.com/jackcloud#100155/blink_timeline
thisComp.layer(thisComp.layer(“Blink”),4).inPoint
time < blink.inPoint || time > blink.outPoint ? 100 : 0I got an error at the end on line one. Didn’t like the .inPoint after the ,4)
Without the .inPoint it works but only on 1 instance.Still trying though
cheers
-
Ah huh, does this look right to you?
Im only getting it to read the last instance now. I thought it’d be simple sorry to bug you with it, but of course this animation is sitting here waiting on me in the studio.cheers
-
Hi Dan,
my bad. I applied the expression to the correct “eyelash” layer Opacity BUT pickwhipped it to the “Blink” layer Opacity rather than the layer itself. All good now!However
Any thoughts on how to do this with 10 or 20 instances of the “blink” layer in the timeline?Thanks again sir Dan
cheers
-
I also noted that if I use the:
op = thisComp.layer(“blink”).transform.opacity;
100 – op
expression the eyelash layer will ONLY look at the 1st layer in heirarchy to do the opacity change. All other instances of “Blink” subComp have no effect. Oh boy.
cheers
-
Hi Dan,
thanks so much for that. I applied the expression and it returned this error.
Expression was applied to “eyelash” layer’s Opacity:blink = thisComp.layer(“blink 2”).transform.opacity;
time < blink.inPoint || time > blink.outPoint ? 100 : 0and returned error was:
Warning: Class ‘Property’ has no property or method named ‘inPoint’.
Expression disabled
Error occurred in line 2.Now I applied another expression like this;
op = thisComp.layer(“blink”).transform.opacity;
100 – op
AND it worked as long as I keyed the ‘Blink’ layer’s Opacity
I’d like to try and get yours to work because it seems that expression functions from the subcomp’s mere appearance in the timeline regardless of any keyframes AND I’ll have many occurrences of the “Blink” layer duplicated anytime I want the character to blink.
Thanks again for your help. You’re a genius Dan
best,
Jackblink = thisComp.layer("blink 2").transform.opacity;
time < blink.inPoint || time > blink.outPoint ? 100 : 0OR
op = thisComp.layer("blink").transform.opacity;
100 - op
cheers
-
Need a blink expression that can control a layers opacity from a nested comp.
Is there a way that a short nested “BLINK” comp can have an expression on it so that wherever it appears in the timeline ANOTHER LAYER’S Opacity is changed from 100% to 0% and the start of the nested comp and then back to 100% at the end of the nested comps duration within the main comp? In effect, I can then drop copies of the 6 frame “Blink” nested comp anywhere along the time line and it will drive an “eyelash” layer’s opacity?
cheers