1

問題は次のとおりです。スプライトとボディの両方を持つフィギュアがあります。この図はドラッグ可能で、タッチ イベントの Action Down では、ドラッグ中に他のボディと衝突しないようにボディを切断する必要があります。次に、Action Up ボディをスプライトに接続する必要があります。この問題を解決するために私が定義した 2 つの方法があります。

protected void connectBody() {
            if (!bodyConnected) {
                    connector = new PhysicsConnector(mSprite, mBody, true, true);
                    mPhysicsWorld.registerPhysicsConnector(connector);
                    bodyConnected = true;
            }
    }

protected void disconnectBody() {
            if (bodyConnected) {
                    if (connector != null) {
                            mPhysicsWorld.unregisterPhysicsConnector(connector);
                    }
                    bodyConnected = false;
            }
    }

ただし、これは機能しません。図形をドラッグすると、他の図形と衝突します。誰でもこれを解決するのを手伝ってもらえますか? よろしくお願いします。

4

2 に答える 2

3

私は数日前にそれをいじってみました、そしてこれは私がオブジェクトをドラッグするためにしたことでした。

public boolean onAreaTouched( final TouchEvent pSceneTouchEvent, final ITouchArea pTouchArea,final float pTouchAreaLocalX, final float pTouchAreaLocalY) {
        if(pSceneTouchEvent.isActionDown()) {
            final AnimatedSprite area = (AnimatedSprite) pTouchArea;
            PhysicsConnector tPhysicsConnector;
            tPhysicsConnector = physicsWorld.getPhysicsConnectorManager().findPhysicsConnectorByShape(area);
            physicsWorld.unregisterPhysicsConnector(tPhysicsConnector);
            physicsWorld.destroyBody(tPhysicsConnector.getBody()); 

        }
于 2011-05-05T22:05:15.907 に答える
2

私は同じ問題に直面しているこの投稿に出くわしました、そしてlordraidersの答えは私が正しい軌道に乗るのを助けましたが、私はより良い解決策を見つけてここに投稿することに決めました。このソリューションでは、ボディを破壊/再作成する必要はありません。次の手順を実行してください。

if(pSceneTouchEvent.getAction() == MotionEvent.ACTION_DOWN){
    physicsWorld.getPhysicsConnectorManager().findPhysicsConnectorByShape(self).getBody().setActive(false);
}

if(pSceneTouchEvent.getAction() == MotionEvent.ACTION_UP){
    physicsWorld.getPhysicsConnectorManager().findPhysicsConnectorByShape(self).getBody().setActive(true);
}

したがって、この方法では、オブジェクトのアクティブ状態をオン/オフに設定するだけで、物理的な力がドラッグアクションと戦うことなく、オブジェクトを自由にドラッグできます。また、オブジェクトに適用されている現在のすべての力をリセット/クリアすることもできます。そうしないと、オブジェクトをドロップすると、以前に行っていたアクションが再開されます。たとえば、丘を転がるボールを拾った場合、リリースするとそれは、あなたが物理的な体を無効にしたときにそれらの力がオブジェクトの状態で保存されたので、それは丘を下って行くように動き始めます。あなたはそのようにこれを行うことができます:

physicsWorld.getPhysicsConnectorManager().findPhysicsConnectorByShape(self).getBody().setAngularVelocity(0);

physicsWorld.getPhysicsConnectorManager().findPhysicsConnectorByShape(self).getBody().setLinearVelocity(0, 0);
于 2011-07-21T08:19:29.343 に答える