The below code helps you to rotate a body in Box2D manually.

-(void) start
	rot_sprite = [CCSprite spriteWithFile:[NSString stringWithFormat:@"rot_sprite.png" ]];
	[self addChild: rot_sprite];
	b2BodyDef bodyDef;
	b2Vec2 initVel;
	b2PolygonShape shape;
	b2CircleShape circleShape;
	b2FixtureDef fd;
	b2Body * rotating_body;
	b2RevoluteJointDef revJointDef;
	b2DistanceJointDef jointDef;
	b2Vec2 pos;
	bodyDef.position.Set(11.043825f, 4.984064f);
	bodyDef.angle = 0.000000f;
	bodyDef.userData = rot_sprite;
	rotating_body = world->CreateBody(&bodyDef;);
	initVel.Set(0.000000f, 0.000000f);
	b2Vec2 rotating_body_vertices[4];
	rotating_body_vertices[0].Set(-0.143426f, -1.565737f);
	rotating_body_vertices[1].Set(0.143426f, -1.565737f);
	rotating_body_vertices[2].Set(0.143426f, 1.565737f);
	rotating_body_vertices[3].Set(-0.143426f, 1.565737f);
	shape.Set(rotating_body_vertices, 4);
	fd.shape = &shape;
	fd.density = 0.015000f;
	fd.friction = 0.300000f;
	fd.restitution = 0.600000f;
	fd.filter.groupIndex = int16(0);
	fd.filter.categoryBits = uint16(65535);
	fd.filter.maskBits = uint16(65535);

	        //calling the schedular at intervals to rotate the body.

	[self schedule: @selector(rotateBody) interval:0.01];
	angle += 0.02;
	b2Vec2 pos = rotating_body.GetPosition();
	rotating_body.SetTransform(pos, angle);

Here the body is named “rotating_body” which is going to rotate and a sprite named “rot_sprite” is it’s userData, please give your own image for it.
Make sure that you have it in your resources otherwise your program will crash.

Note: call this function in a schedular for the body, here-rotating_body to rotate.
Adjust the angle and the schedular-interval for better results.


Leave a Reply

Your email address will not be published. Required fields are marked *




Theme by HermesThemes

Copyright © 2018 CoderzHeaven. All Rights Reserved

Please wait...

Subscribe to our newsletter

Want to be notified when our article is published? Enter your email address and name below to be the first to know.