Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Daniel o rei

giro box 2d

Recommended Posts

Não ta funcionando direito.

 

Entre nesse link e veja que se você ir para direita não consegue voltar para a esquerda.

http://megaswf.com/serve/95135/

package{
import flash.display.Sprite;import flash.display.MovieClip;import flash.ui.Keyboard;
import flash.events.Event;	import flash.events.KeyboardEvent;
// Classes used in this example
import Box2D.Dynamics.*;
import Box2D.Collision.*;
import Box2D.Collision.Shapes.*;
import Box2D.Common.Math.*;

public class jg extends Sprite{
public var world:b2World ;	var body:b2Body; var player ;var cbody:b2Body ;var nochao:Boolean ;
public function jg(){
	addEventListener(Event.ENTER_FRAME,doStep,false,0,true);
	stage.addEventListener(KeyboardEvent.KEY_UP, kup );
var grav = new b2Vec2(00,10);
world = new b2World(grav,true);

		var bodyDef:b2BodyDef;
		var boxShape:b2PolygonShape;
		var circleShape:b2CircleShape;



		// Add ground body
		bodyDef = new b2BodyDef();
		//bodyDef.position.Set(15, 19);
		bodyDef.position.Set(10, 12);
		//bodyDef.angle = 0.1;
		boxShape = new b2PolygonShape();
		boxShape.SetAsBox(30, 3);
		var fixtureDef:b2FixtureDef = new b2FixtureDef();
		fixtureDef.shape = boxShape;
		fixtureDef.friction = 0.3;
		fixtureDef.density = 0;
		bodyDef.userData = new quadra();
		bodyDef.userData.width = 30 *2* 30; 
		bodyDef.userData.height = 3 *2* 30; 
		addChild(bodyDef.userData);
		body = world.CreateBody(bodyDef);
		body.CreateFixture(fixtureDef);



		// Add ground body
		bodyDef = new b2BodyDef();
		//bodyDef.position.Set(15, 19);
		bodyDef.position.Set(10, 5);
		//bodyDef.angle = 0.1;
		boxShape = new b2PolygonShape();
		boxShape.SetAsBox(1, 1);
		fixtureDef.shape = boxShape;
		fixtureDef.friction = 0.3;
		fixtureDef.density = 0;// static bodies require zero density
		// Add sprite to body userData
		bodyDef.userData = new quadra();
		bodyDef.userData.width = 1*2* 30; 
		bodyDef.userData.height = 1 *2* 30; 
		addChild(bodyDef.userData);
		body = world.CreateBody(bodyDef);
		body.CreateFixture(fixtureDef);


				circleShape = new b2CircleShape(1);
				fixtureDef.shape = circleShape;
				fixtureDef.density = 100.0;
				fixtureDef.friction = 20;
				fixtureDef.restitution = 0.0;
				bodyDef.userData = new c();
				bodyDef.userData.width = 1 * 2 * 30; 
				bodyDef.userData.height = 1 * 2 * 30; 
				bodyDef.position.Set(4, 4);
				bodyDef.type = b2Body.b2_dynamicBody;
				cbody = world.CreateBody(bodyDef);
				cbody.CreateFixture(fixtureDef);
				addChild(bodyDef.userData);

				var cbody2:b2Body ;
				circleShape = new b2CircleShape(2);
				fixtureDef.shape = circleShape;
				fixtureDef.density = 1.0;
				fixtureDef.friction = 0.5;
				fixtureDef.restitution = 0.0;
				bodyDef.userData = new c();
				bodyDef.userData.width = 2 * 2 * 30; 
				bodyDef.userData.height = 2 * 2 * 30; 
				bodyDef.position.Set(10, 4);
				bodyDef.type = b2Body.b2_dynamicBody;
				cbody2 = world.CreateBody(bodyDef);
				cbody2.CreateFixture(fixtureDef);
				addChild(bodyDef.userData);
				player = bodyDef.userData ;
}

function doStep(e:Event):void{



		world.Step(1/30, 10, 10);

		// Go through body list and update sprite positions/rotations
		for (var bb:b2Body = world.GetBodyList(); bb; bb = bb.GetNext()){
			if (bb.GetUserData() is Sprite){
				var sprite:Sprite = bb.GetUserData() as Sprite;
				sprite.x = bb.GetPosition().x * 30;
				sprite.y = bb.GetPosition().y * 30;
				sprite.rotation = bb.GetAngle() * (180/Math.PI);
			}
		}





	//
	nochao = false;
	for (var bb:b2Body = world.GetBodyList(); bb; bb = bb.GetNext()){
			if (bb.GetUserData() is Sprite){
				if(bb != cbody){
					if(bb.GetUserData().hitTestPoint(cbody.GetUserData().x,cbody.GetUserData().y+cbody.GetUserData().height /2 + 1.5 ))
					{nochao = true;}
				}
			}
		}nochao_t.text = nochao.toString() ;

}
function kup(e:KeyboardEvent):void{
	trace("kdown");
	if(nochao == true){
	switch(e.keyCode){
	case Keyboard.LEFT:	
		cbody.ApplyTorque(-205);

		break;
	case Keyboard.RIGHT:	
	cbody.ApplyTorque(205);cbody.ApplyImpulse(new b2Vec2(1,0),cbody.GetWorldCenter());
		break;
	case Keyboard.UP:
	trace("UPP");cbody.ApplyImpulse(new b2Vec2(0,-2000),cbody.GetWorldCenter());
	// Go through body list and update sprite positions/rotations




							nochao = false;}}else{



	}



	}

}
}

/*}*/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pelo que vi ele volta sim. Não sei o termo certo, então vou usar uma expressão de leigo. Da a impressão de que esse circulo é muito pesado. Então quando você manda ele ir para a direita ele leva muito tempo para voltar para a esquerda depois que você pressionar a tecla. Será que o valor que você passa em ApplyTorque está correto? Talvez esteja muito pequeno, ou muito grande, num sei, ai você testa.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz umas modificações e está funcionando melhor. Você conhece uma outra forma alternativa de aplicar rotação?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.