2013-09-26 40 views
11

Tôi đã thử nghiệm với UIGestureRecognizersSKScene/SKNode's mới trong SpriteKit. Tôi đã có một vấn đề, và tôi đã gần sửa chữa nó nhưng tôi bối rối về một điều. Về cơ bản, tôi có một trình nhận dạng cử chỉ cho phép người dùng kéo một hình ảnh trên màn hình.UIPanGestureRecognizer trong SKScene

Vấn đề duy nhất tôi có là phải mất một lần nhấn để thực sự khởi chạy cử chỉ xoay, và sau đó chỉ trên vòi SECOND trên nó hoạt động chính xác. Tôi nghĩ rằng điều này là do cử chỉ pan của tôi được khởi tạo trong touchesBegan. Tuy nhiên, tôi không biết nơi nào khác để đặt nó kể từ khi khởi tạo nó trong phương pháp initWithSize của SKScene đã dừng trình nhận dạng cử chỉ thực sự hoạt động.

-(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]; 
    } 

Trả lời

11

Đó là vì bạn đang thêm cử chỉ khi chạm, do đó cử chỉ không tồn tại cho đến khi màn hình được nhấn ít nhất một lần. Ngoài ra, tôi sẽ xác minh rằng bạn đang thực sự sử dụng initWithSize: làm initializer của bạn, bởi vì bạn không nên có bất kỳ vấn đề thêm cử chỉ ở đó.

Một tùy chọn khác là di chuyển mã để thêm cử chỉ vào -[SKScene didMovetoView:] được gọi ngay sau khi cảnh được trình bày. Thông tin thêm in the docs.

- (void)didMoveToView:(SKView *)view 
{ 
    [super didMoveToView:view]; 
    // add gesture here! 
} 
1

Đây là bài viết đầu tiên của tôi! Hy vọng không đi qua các ngón chân của riêng tôi ...

Xin chào các bạn, vì vậy tôi đã gặp sự cố với UISwipeGestureRecognizer không hoạt động. Tôi đã khởi tạo nó trong phương thức initWithSize của mình dựa trên bài này, tôi đã chuyển nó sang phương thức didMoveToView của mình. Bây giờ nó hoạt động (nhờ 0x7fffffff). Tất cả những gì tôi đã làm là cắt hai dòng sau từ một phương pháp và dán chúng vào cái kia.

_warpGesture = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(warpToNextLevel:)]; 
[self.view addGestureRecognizer:_warpGesture]; 

Trong "điều tra" của tôi, tôi tình cờ gặp userInteractionEnabled và cố gắng để thiết lập nó để YES trong phương pháp initWithSize tôi ...

self.view.userInteractionEnabled = YES; 
NSLog(@"User interaction enabled %s", self.view.userInteractionEnabled ? "Yes" : "No"); 

này sẽ đăng nhập NO mặc dù tôi muốn chỉ cần đặt nó vào VÂNG. Điều tra thêm cho thấy rằng nếu tôi không cố gắng tự thiết lập userInteractionEnabled thì nó KHÔNG trong quá trình initWithSize (tôi dường như không thể thay đổi điều này nếu tôi muốn) và tự động được đặt thành YES khi tôi ở trong didMoveToView.

Điều này tất cả đều đánh tôi là có liên quan nhưng tôi rất thích người nào đó biết để giải thích những gì đang xảy ra ở đây. Cảm ơn!

Các vấn đề liên quan