【发布时间】:2019-09-27 20:18:27
【问题描述】:
我正在开发一款 AR 应用,可让您通过滑动屏幕来移动球。我能够检测到滑动,但我不确定如何移动球。所以我希望球根据屏幕滑动的时间从一个位置移动到另一个位置。所以当你刷球时,球就像被扔了一样移动。
谁能帮我解决这个问题。谢谢
【问题讨论】:
标签: android-studio-3.0 arcore sceneform
我正在开发一款 AR 应用,可让您通过滑动屏幕来移动球。我能够检测到滑动,但我不确定如何移动球。所以我希望球根据屏幕滑动的时间从一个位置移动到另一个位置。所以当你刷球时,球就像被扔了一样移动。
谁能帮我解决这个问题。谢谢
【问题讨论】:
标签: android-studio-3.0 arcore sceneform
要移动可渲染对象,您可以在旧位置将其删除,然后将其放置在新位置。这是一个示例 - 这是按钮驱动而不是滑动驱动,但可以类似地使用移动。下面的代码适用于当前选择的anchorNode - 即用户可以选择不同的节点来移动。
//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;
}
【讨论】: