我遇到了麻煩, 我需要讓一個對象(Pong paddle)只能沿着屏幕循環移動。 同樣的事情,如果你將有一個恆定的Y軸值,它只會沿着X軸移動,因爲你拖動你的手指,但將其限制爲循環路線。Android - 移動一個對象在圈子裏
有什麼見解? 我看到這個東西 http://www.kirupa.com/developer/mx/circular.htm
,它只有在搞清楚如何不斷地以圓圈移動的東西可以幫助(儘管它已經是閃存,這個想法是一樣的)
感謝
我遇到了麻煩, 我需要讓一個對象(Pong paddle)只能沿着屏幕循環移動。 同樣的事情,如果你將有一個恆定的Y軸值,它只會沿着X軸移動,因爲你拖動你的手指,但將其限制爲循環路線。Android - 移動一個對象在圈子裏
有什麼見解? 我看到這個東西 http://www.kirupa.com/developer/mx/circular.htm
,它只有在搞清楚如何不斷地以圓圈移動的東西可以幫助(儘管它已經是閃存,這個想法是一樣的)
感謝
這裏是塊我用一個手指旋轉圖像視圖的代碼。
private float mCenterX, mCenterY;
private float direction = 0;
private float sX, sY;
private float startDirection=0;
private void touchStart(float x, float y) {
mCenterX = this.getWidth()/2;
mCenterY = this.getHeight()/2;
sX = x;
sY = y;
}
private void touchMove(float x, float y) {
// this calculate the angle the image rotate
float angle = (float) angleBetween2Lines(mCenterX, mCenterY, sX, sY, x,
y);
direction = (float) Math.toDegrees(angle) * -1 + startDirection;
this.invalidate();
}
@Override
protected void onDraw(Canvas canvas) {
canvas.rotate(direction, mCenterX, mCenterY);
super.onDraw(canvas);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
float x = event.getX();
float y = event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
// record the start position of finger
touchStart(x, y);
break;
case MotionEvent.ACTION_MOVE:
// update image angle
touchMove(x, y);
break;
case MotionEvent.ACTION_UP:
startDirection = direction;
break;
}
return true;
}
public double angleBetween2Lines(float centerX, float centerY, float x1,
float y1, float x2, float y2) {
double angle1 = Math.atan2(y1 - centerY, x1 - centerX);
double angle2 = Math.atan2(y2 - centerY, x2 - centerX);
return angle1 - angle2;
}
希望這有助於
編輯:基本上,上面的代碼的作用是讓用戶旋轉圖像,圖像的中心不會改變。 angleBetween2Line()用於計算手指移動到以圖像中心爲中心的圓的程度。
圓周上的點可以由函數來定義:
x = a + r cos(θ)
y = b + r sin(θ)
凡(A,B)是圓的中心。
根據你想要的速度,你可以說你想每T秒發生一個整圈。如果t是因爲動畫開始時間:
θ = (360/T) * (t % T)
您可以使用這些功能來創建自己的ViewAnimation,OpenGL的功能,或者如果你正在使用的畫布,設置onDraw()
期間槳的位置事件。
謝謝你的回答,但是如果它是動畫,這是有用的。我想通過觸摸來移動它。 基本上,我想要的是一個可移動的槳,只能在屏幕上的圓圈周圍移動。 希望現在清除 –
在這種情況下,您可以使用標準距離函數來確定槳距離圓心的距離。如果超出允許範圍,請不要允許。 (http://www.purplemath.com/modules/distform.htm) – spatulamania
不錯!我喜歡。 有關這方面的另一個問題是,有沒有辦法讓槳(這是相當長和平坦)旋轉的方式,平坦的一面總是面向內部或中心? 再次感謝! –
感謝您的快速評論! 我會告訴你我在這裏想要完成的事情, 我想要一個2D乒乓球遊戲,但不是隻限制上/下移動(或右/左)的遊戲板,遊戲發生在一個圓形場。所以我希望能夠在限制的環境中移動槳。 我很難搞清楚你發佈的例子在做什麼,你能詳細說明一下嗎? –
我已經添加了一些關於我的代碼的解釋。我不確定這會幫助你。 – Wenhui