0

画面のスワイプ方向に応じてスプライトを動かそうとしています。これまでのところ、これはインターネット上の例に基づいて私が思いついたコードです。

-(void)ccTouchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{
UITouch *touch = [touches anyObject];
CGPoint location = [touch locationInView:[touch view]];
location = [[CCDirector sharedDirector]convertToGL:location];
endTouch = location;

float swipeLength = endTouch.x - beginTouch.x;
float swipeY = endTouch.y - beginTouch.y;    

if(swipeY > 0)
{
 if(swipeLength == 0){
 //Do action here
}}}

さて、私の質問は、endTouch.xの範囲を制限する必要があるということです。たとえば、100より大きく150未満である必要があります。横または下にスワイプするのではなく、上向きまたは50〜120度などの特定の角度でスワイプした場合にのみアクションを実行します。どうすればこれを実装できますか?

4

1 に答える 1

1

あなたの質問を理解するのに少し苦労しています。ただし、上方向のスワイプのみを取得する場合は、次のようにする必要があります。

  1. 取得しtouchEnd.y - beginTouch.yます。
  2. 結果が負の場合、それは上向きのスワイプではありませんでした。
  3. それ以外の場合は、引き続き勾配を計算しfloat slope = (touchEnd.y - touchBegin.y)/(touchEnd.x - touchBegin.x)ます。
  4. 傾斜が十分に急でない場合、スワイプは上向きではなく、方向に関して横向きになります。if (abs(slope) >= threshold) { //It's an upward swipe }

あなたが何をしようとしているのかわからない:

たとえば、100 より大きく 150 より小さくする必要があります。

しかし、上向きのスワイプを構成する角度を制限したい場合は、次のことができます。

  1. 度を勾配に変換する ( )を使用する理由については、ここtan(theta)で 2 番目の式を参照してください。tan(theta)
  2. したがって、勾配を 90 ± 30 度の範囲内にしたい場合は、次のようにします。threshold = tan((pi/180)*30)
于 2013-02-18T07:14:57.993 に答える