1

cocos2dとbox2dについて質問があります。ユーザーがIpadアプリのホイールに触れる方法に応じて回転する単純なホイールを作成する必要があります。あるタッチの動きに応じて、ホイールは特定の速度で開始し、回転した後、停止するまで速度を下げていきます。(古典的なラッキーホイールのように)。

ヒントが必要です。cocos2dだけを使ってそれを行うことは可能だと思いますか?または、Box2Dを使用する必要がありますか?私はすでにBox2dを使い始めました。これは非常に強力ですが、オブジェクトに特定の開始速度の回転を与え、その後、ワールドシミュレーションでオブジェクトを停止させることは可能ですか?

どうもありがとう!ベンザ

4

2 に答える 2

0

Androidでまったく同じものを開発したとき、これを実装するための有用な例/記事も見つからなかったので、次のようにしました。

ユーザーが画面に触れてフリング/スワイプ(画面上で指を動かして画面から離す)を行うと、speedXとspeedYをピクセル/秒で計算します(AndroidではonFling(float velocitY、float velocitX)メソッドがあります))。

次に、ピクセル/秒単位の速度を回転/秒に変換します。これは、ユーザーが指で触れた場合、1秒間に1500ピクセル移動すると、ホイールがX回回転することを意味します。たとえば、フリング/スワイプのspeedXとspeedYが1500 px / sで、ホイールの半径が150 pxの場合、次のようにホイールの弧の長さを計算します。

      arc = r * PI. (r=150)

次に、次のように1秒あたりの回転数で速度を計算します。

     spinSpeed = Math.sqrt((speedX*speedX)+(speedY*speedY))/arc)*360   

速度が決まったら、次のようにTミリ秒(私は40ミリ秒を使用)ごとにホイールの回転角度を変更できます。

     wheel.angle += spinSpeed;

また、ドラッグを実装する必要があるため、ホイールは最終的に次のように遅くなります。

     spinSpeed -= drag_value;
     wheel.angle += spinSpeed;

drag_valueを目的の効果(速度が低下する速度)に調整する必要があります。また、spinSpeedに定数を掛けて、より高速にすることもできます(私は40を使用しました)。

この実装には、ユーザーの指に続くホイールは含まれていません。これを行うには、画面を最後にタッチしてからユーザーの指がどれだけ移動したかを計算する必要があります(X座標とY座標の場合)。したがって、2つの座標(lastTouchX、lastTouchY、newTouchX、newTouchY)が必要です。座標がある場合は、この座標を通る線の傾きまたは勾配を計算できます(この式では、傾き/勾配はKです:y = kx + n-標準の線の式)。次に、この2つの線の交点を計算し、それをホイールに適用する必要があります。このようなもの:

      tg = ((k1-k2)/(1+(k1*k2))); // k1 is the slope of the previous touch coordinate; k2 is the slope of the current touch coordinates                     
      angle =   Math.toDegrees(Math.atan(Math.abs(tg)));
      wheel.angle += angle; // to implement spinning in the other way use wheel.angle -= angle;

あなたがアイデアを得ることを願っています

于 2011-08-10T10:45:07.727 に答える
0

uは今までにそれを理解しているかもしれませんが、どのような方法でも.. uはホイールを作成し、タッチ時に初期回転と速度で開始できます。次に、必要に応じて摩擦を有効にして、しばらくするとオブジェクトが表示されるようにします。それが役に立てば幸い

于 2011-09-07T19:39:20.307 に答える