11

UIGestureRecognizers 私はと の新しいSKScene/SKNode'sを試してきましたSpriteKit。私は1つの問題を抱えていて、それを修正することに近づきましたが、1つのことで混乱しています. 基本的に、ユーザーが画面上でスプライトをドラッグできるようにするパン ジェスチャ レコグナイザーがあります。

私が抱えている唯一の問題は、パンジェスチャを実際に初期化するのに1回のタップが必要であり、2回目のタップでのみ正しく機能することです。これは、パン ジェスチャが で初期化されているためだと考えていますtouchesBeganinitWithSizeただし、SKScene のメソッドで初期化するとジェスチャ認識エンジンが実際に機能しなくなったため、他にどこに置くべきかわかりません。

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

    if (!self.pan) {

        self.pan = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(dragPlayer:)];
        self.pan.minimumNumberOfTouches = 1;
        self.pan.delegate = self;
        [self.view addGestureRecognizer:self.pan];
    }
}

-(void)dragPlayer: (UIPanGestureRecognizer *)gesture {

        CGPoint trans = [gesture translationInView:self.view];

        SKAction *moveAction =  [SKAction moveByX:trans.x y:-trans.y  duration:0];
        [self.player runAction:move];

        [gesture setTranslation:CGPointMake(0, 0) inView:self.view];
    }
4

2 に答える 2

11

これは、タッチ開始時にジェスチャを追加しているためです。そのため、画面が少なくとも 1 回タップされるまで、ジェスチャは存在しません。さらに、実際に initWithSize: を初期化子として使用していることを確認します。これは、そこにジェスチャを追加しても問題はないはずだからです。

もう 1 つのオプションは、コードを移動して-[SKScene didMovetoView:]、シーンが表示された直後に呼び出されるジェスチャを追加することです。詳しくはドキュメントをご覧ください。

- (void)didMoveToView:(SKView *)view
{
    [super didMoveToView:view];
    // add gesture here!
}
于 2013-09-26T23:33:47.313 に答える