我在图表上有一个圆圈,我希望能够轻弹它并使其无限移动并随着屏幕环绕。圆圈或球是我编码的方式,是一种观点。现在我只有一个圆圈,我可以通过以下代码触摸和拖动:
//Creates view for ball
FrameLayout flView = (FrameLayout) v;
flView.setPaddingRelative(0, padding, 0, 0);
//Creates new ball
ball = new Ball(findViewById(R.id.main_view).getContext(), x, y, 10,padding);
switch(event.getAction()){
case MotionEvent.ACTION_MOVE:
flView.removeAllViews();
flView.addView(ball);
break;
case MotionEvent.ACTION_DOWN:
flView.removeAllViews();
flView.addView(ball);
break;
}
答案 0 :(得分:0)
这就是我的所作所为。基本上我测量球的startPosition(x,y),以及用户第一次点击屏幕,球,等等的时间。然后,当用户在屏幕上移动他们的手指时,我计算给定球的当前(x,y)和时间的速度。然后我计算它正在移动的像素/毫秒。一旦他们拿起他们的身材,只需继续将X,Y速度添加到球的位置,然后根据屏幕大小进行修改,以便将其包裹起来。
// Don't keep adding and removing the ball from the view.
// Just add it once on startup, then you can move the ball's
// position when the user clicks on the screen.
flView.addView(ball);
switch(event.getAction()){
case MotionEvent.ACTION_MOVE:
ball.x = event.x;
ball.y = event.y;
int lastPositionX = ball.x
int lastPositionY = ball.y
long lastTime = System.currentTimeMillis();
ball.velocity.x = (lastPositionX - startPositionX) / (lastTime - startTime);
ball.velocity.y = (lastPositionY - startPositionY) / (lastTime - startTime);
break;
case MotionEvent.ACTION_DOWN:
ball.x = event.x;
ball.y = event.y;
ball.velocity.x = 0.0;
ball.velocity.y = 0.0;
startPositionX = ball.x;
startPositionY = ball.y;
long startTime = System.currentTimeMillis();
break;
}
我不确定你提供的代码到底是什么,但是Move部分监听器看起来很糟糕,所以我删除了我认为错误的代码。现在它只是将球移动到人触摸的位置。之后,您必须弄清楚如何为场景设置动画。基本上你所要做的就是:
ball.x = (ball.velocity.x + ball.x) % screenSize;
ball.y = (ball.velocity.y + ball.y) % screenSize;
答案 1 :(得分:0)
对于AndEngine,您可以使用onFlick方法。我相信它可以测量方向和速度。剩下的就是你需要使用的任何转换,然后是动画。我暂时没有使用该方法,我忘记了实际的代码,但我相信你可以在网上找到它。对不起,我无法给你任何代码。