Spring Query
-
- Posts: 6
- Joined: Wed May 05, 2010 2:47 am
- Contact:
Spring Query
Morning Chipmunkers
Firstly, I just wanted to say how impressed I am with Chipmunk. Eventhough I am new to physics engines I am found my introduction quite rewarding thus far.
I currently have a ball that I want to be pulled towards and held at another point. I currently have a collision callback that creates a damped spring between the ball and the sensor shape. The collision call back works well however the spring seems to push away from the sensor point rather than away. I assume this is due to the wrong parameters in my cpApplyDampedSpring call. Could someone show me an example of a spring call that would pull 2 points together?
Not sure what other info you guys would need if any to let me know and I will post it if I know it
There is a good chance that I have completely miss understood the purpose on a Damped Spring so I am happy to receive suggestions of alternates.
Thanks in advance
Firstly, I just wanted to say how impressed I am with Chipmunk. Eventhough I am new to physics engines I am found my introduction quite rewarding thus far.
I currently have a ball that I want to be pulled towards and held at another point. I currently have a collision callback that creates a damped spring between the ball and the sensor shape. The collision call back works well however the spring seems to push away from the sensor point rather than away. I assume this is due to the wrong parameters in my cpApplyDampedSpring call. Could someone show me an example of a spring call that would pull 2 points together?
Not sure what other info you guys would need if any to let me know and I will post it if I know it
There is a good chance that I have completely miss understood the purpose on a Damped Spring so I am happy to receive suggestions of alternates.
Thanks in advance
- mallyone
- Posts: 9
- Joined: Mon Apr 26, 2010 8:31 am
- Contact:
Re: Spring Query
Would you mind posted a snippet of your code?
One thing that comes to mind is your restLength in the spring might be set longer than you want, giving the illusion of push?
m...
One thing that comes to mind is your restLength in the spring might be set longer than you want, giving the illusion of push?
m...
- slembcke
- Site Admin
- Posts: 4166
- Joined: Tue Aug 14, 2007 7:13 pm
- Contact:
Re: Spring Query
If you want to pull two points together, the distance between the points has to be greater than the rest length. Presumably you just want to use a rest length of 0.
Can't sleep... Chipmunks will eat me...
Check out our latest projects! -> http://howlingmoonsoftware.com/wordpress/
Check out our latest projects! -> http://howlingmoonsoftware.com/wordpress/
-
- Posts: 6
- Joined: Wed May 05, 2010 2:47 am
- Contact:
Re: Spring Query
I have my rest lenght set to 0, but it still seems to just push the ball to the edge of the screen. I am sure it is just something I don't understand with the other figures.
I will have to guess the code I have at the minute, I will post it from my source after work if I am wrong.
a and b are the shapes involved in the colision. a is the ball and b doesn't move. I have written the x and y values to NSLog and they are correct. (they weren't for ages but I fixed that )
Does that help?
I will have to guess the code I have at the minute, I will post it from my source after work if I am wrong.
a and b are the shapes involved in the colision. a is the ball and b doesn't move. I have written the x and y values to NSLog and they are correct. (they weren't for ages but I fixed that )
Code: Select all
cpApplyDampedSpring(a->body, b->body, cpv(a->body->p.x, a->body.p.y), cpv(b->body->p.x, b->body.p.y), 0.0f, 100.0f, 0.5f, dt);
- slembcke
- Site Admin
- Posts: 4166
- Joined: Tue Aug 14, 2007 7:13 pm
- Contact:
Re: Spring Query
That looks fine. You said that you are only guessing about what the code is. I'm guessing that you have some parameters flipped or something.
Also, cpv(a->body->p.x, a->body.p.y) is equivalent to just a->body->p. You don't need to copy the vector like that.
Also, cpv(a->body->p.x, a->body.p.y) is equivalent to just a->body->p. You don't need to copy the vector like that.
Can't sleep... Chipmunks will eat me...
Check out our latest projects! -> http://howlingmoonsoftware.com/wordpress/
Check out our latest projects! -> http://howlingmoonsoftware.com/wordpress/
-
- Posts: 6
- Joined: Wed May 05, 2010 2:47 am
- Contact:
Re: Spring Query
Okay, this is my collision callback with the new improved anchor points thanks to Slembcke
I added in a cpvdist to check the distance was greater than the test length and it is.
However this still pushed the ball away from the static body. I have messed about with the numbers but nothing seems to pull the ball to the position I want (anchr2)
Any thoughts?
Code: Select all
void pullToStatic(cpArbiter *arb, cpSpace *space, void *unused) {
cpShape *a, *b; cpArbiterGetShapes(arb, &a, &b);
int steps = 10;
cpFloat dt = 1.0/60.0/(cpFloat)steps;
cpApplyDampedSpring(a->body, b->body, a->body->p, b->body->p, 0.0f, 100.0f, 20.0f, dt);
cpFloat dist = cpvdist(a->body->p, b->body->p);
NSLog(@"%f x %f", a->body->p.x, a->body->p.y);
NSLog(@"%f x %f", b->body->p.x, b->body->p.y);
NSLog(@"Dist = %f", dist);
}
However this still pushed the ball away from the static body. I have messed about with the numbers but nothing seems to pull the ball to the position I want (anchr2)
Any thoughts?
- slembcke
- Site Admin
- Posts: 4166
- Joined: Tue Aug 14, 2007 7:13 pm
- Contact:
Re: Spring Query
Oh! Crap, and I looked right at it to give you the advice about generating the anchor points. :p
The anchor points are relative, so you are using anchor points that are as far away from the bodies as the bodies are from (0, 0). You want to be using cpvzero for both anchor points.
The anchor points are relative, so you are using anchor points that are as far away from the bodies as the bodies are from (0, 0). You want to be using cpvzero for both anchor points.
Can't sleep... Chipmunks will eat me...
Check out our latest projects! -> http://howlingmoonsoftware.com/wordpress/
Check out our latest projects! -> http://howlingmoonsoftware.com/wordpress/
-
- Posts: 6
- Joined: Wed May 05, 2010 2:47 am
- Contact:
Re: Spring Query
Cool, cpvzero gives me what I wanted. Thanks
Out of interest though I still got a strange effect when using cpApplyDampedSpring but when I used ....
.... instead it worked just fine
Now I am stuck on removing the spring when the ball is no longer touching, I has assumed I could get to the constraint using a->body->constraints but no such look
Out of interest though I still got a strange effect when using cpApplyDampedSpring but when I used ....
Code: Select all
cpConstraint *spring = cpDampedSpringNew(a->body, b->body, cpvzero, cpvzero, 0.0f, 50.0f, 20.0f);
cpSpaceAddConstraint(space, spring);
Now I am stuck on removing the spring when the ball is no longer touching, I has assumed I could get to the constraint using a->body->constraints but no such look
- slembcke
- Site Admin
- Posts: 4166
- Joined: Tue Aug 14, 2007 7:13 pm
- Contact:
Re: Spring Query
Chipmunk doesn't really track one-to-many relationships. While it could, I usually find it's much better to organize that in the game code instead.
Can't sleep... Chipmunks will eat me...
Check out our latest projects! -> http://howlingmoonsoftware.com/wordpress/
Check out our latest projects! -> http://howlingmoonsoftware.com/wordpress/
Who is online
Users browsing this forum: Bing [Bot] and 9 guests