Сценеформ ARCore Android студия - PullRequest
0 голосов
/ 10 мая 2019

Я разрабатываю приложение AR, которое позволит вам перемещать мяч, проводя по экрану. Я могу обнаружить удар, но я не уверен, как я могу переместить мяч. поэтому я хочу, чтобы мяч перемещался из одной позиции в другую в зависимости от того, как долго будет проведен экран. поэтому, когда вы проводите пальцем, мяч перемещается как брошенный.

Может ли кто-нибудь помочь мне с этим. спасибо

1 Ответ

0 голосов
/ 14 мая 2019

Чтобы переместить рендеринг, вы можете удалить его на старой позиции и поместить на новую. Вот пример - это кнопка, а не движение пальцем, но движение можно использовать аналогично. Приведенный ниже код работает с текущим выбранным узлом привязки - то есть пользователь может выбирать различные узлы для перемещения.

        //Add a listener for the left button
        FloatingActionButton leftButtom = findViewById(R.id.left_button);
        leftButtom.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //Move the anchor left
                Log.d(TAG,"Moving anchor left");
                if (currentSelectedAnchorNode != null) {
                    //Get the current Pose and transform it then set a new anchor at the new pose
                    Session session = arFragment.getArSceneView().getSession();
                    Anchor currentAnchor = currentSelectedAnchorNode.getAnchor();
                    Pose oldPose = currentAnchor.getPose();
                    Pose newPose = oldPose.compose(Pose.makeTranslation(-0.05f,0,0));
                    currentSelectedAnchorNode = moveRenderable(currentSelectedAnchorNode, newPose);
                }
            }
        });
    private AnchorNode moveRenderable(AnchorNode markAnchorNodeToMove, Pose newPoseToMoveTo) {
        //Move a renderable to a new pose
        if (markAnchorNodeToMove != null) {
            arFragment.getArSceneView().getScene().removeChild(markAnchorNodeToMove);
            anchorNodeList.remove(markAnchorNodeToMove);
        } else {
            Log.d(TAG,"moveRenderable - markAnchorNode was null");
            return null;
        }
        Frame frame = arFragment.getArSceneView().getArFrame();
        Session session = arFragment.getArSceneView().getSession();
        Anchor markAnchor = session.createAnchor(newPoseToMoveTo.extractTranslation());
        AnchorNode newMarkAnchorNode = new AnchorNode(markAnchor);
        newMarkAnchorNode.setRenderable(andyRenderable);
        newMarkAnchorNode.setParent(arFragment.getArSceneView().getScene());
        anchorNodeList.add(newMarkAnchorNode);

        return newMarkAnchorNode;
    }
...