1

私はゲームでBox2Dを使用していますが、見栄えの良い春、つまり触れたときにプレーヤーを押すための壁が必要です。これは次のようになります(3フレーム): ここに画像の説明を入力してください

質問:それを実装する方法は?アニメーション化されたスプライトに壁効果をアタッチできますか?

4

1 に答える 1

1

答えは: プリズム ジョイントです。画像を静的部分と動的部分 (動くバー) の 2 つの部分に分割しました。以下のコードは、私の質問の画像のように、向きにプリズム ジョイントを作成するためのものです。

//prismatic joint
    final Sprite springFrameT = new Sprite(pX, pY, mSpringFrameTRegion, getVertexBufferObjectManager());
    final Sprite springBarT = new Sprite(pX, pY + mSpringFrameTRegion.getHeight()-mSpringBarTRegion.getHeight(), 
            mSpringBarTRegion, getVertexBufferObjectManager());        
    mMainScene.attachChild(springFrameT);
    mMainScene.attachChild(springBarT);        
    mMapSprites.add(springFrameT);
    mMapSprites.add(springBarT);

    final Body springFrameBody = PhysicsFactory.createBoxBody(mPhysicsWorld, springFrameT, BodyType.StaticBody, FIXTURE_DEF);
    final Body springBarBody = PhysicsFactory.createBoxBody(mPhysicsWorld, springBarT, BodyType.DynamicBody, SPRING_FIXTURE_DEF);        
    mPhysicsWorld.registerPhysicsConnector(new PhysicsConnector(springFrameT, springFrameBody, false, false));
    mPhysicsWorld.registerPhysicsConnector(new PhysicsConnector(springBarT, springBarBody, true, true));

    final PrismaticJointDef prismaticJointDef = new PrismaticJointDef();        
    prismaticJointDef.initialize(springFrameBody, springBarBody, springFrameBody.getWorldCenter(), // new Vector2(springFrameT.getWidth(), springFrameT.getHeight()/2), 
            new Vector2(0, 1.0f)); 
    prismaticJointDef.lowerTranslation = -0.5f;
    prismaticJointDef.upperTranslation = 0.5f;
    prismaticJointDef.enableLimit = true;
    prismaticJointDef.enableMotor = true;
    prismaticJointDef.maxMotorForce = 100.0f;
    prismaticJointDef.motorSpeed = 100000f;
    prismaticJointDef.collideConnected = false;
    this.mPhysicsWorld.createJoint(prismaticJointDef);         
于 2012-10-28T09:11:06.437 に答える