Я изо всех сил пытаюсь заставить это работать. У меня есть класс SKSpriteNode с именем playerNode, который я хочу переместить жестами смахивания. Я пытаюсь вызвать метод дескриптора смахивания из контроллера представления, но не получаю ответа.

ViewController.h

#import <UIKit/UIKit.h>
#import <SpriteKit/SpriteKit.h>

@interface ViewController : UIViewController
@property (nonatomic, strong) UISwipeGestureRecognizer *leftSwipeGestureRecognizer;
@property (nonatomic, strong) UISwipeGestureRecognizer *rightSwipeGestureRecognizer;
@end

ViewController.m

#import "ViewController.h"
#import "MyScene.h"
#import "playerNode.h"

@implementation ViewController{
    playerNode *player;
}

- (void)viewDidLoad
{
    [super viewDidLoad];

    // Configure the view.
    SKView * skView = (SKView *)self.view;
    skView.showsFPS = YES;
    skView.showsNodeCount = YES;

    // Create and configure the scene.
    SKScene * scene = [MyScene sceneWithSize:skView.bounds.size];
    scene.scaleMode = SKSceneScaleModeAspectFill;

    // Present the scene.
    [skView presentScene:scene];

    // swipe gestures
    self.leftSwipeGestureRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:player action:@selector(handleSwipes:)];
    self.rightSwipeGestureRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:player action:@selector(handleSwipes:)];
    self.leftSwipeGestureRecognizer.direction = UISwipeGestureRecognizerDirectionLeft;
    self.rightSwipeGestureRecognizer.direction = UISwipeGestureRecognizerDirectionRight;
    [self.view addGestureRecognizer:self.leftSwipeGestureRecognizer];
    [self.view addGestureRecognizer:self.rightSwipeGestureRecognizer];

}

PlayerNode.h

#import <SpriteKit/SpriteKit.h>

@interface playerNode : SKSpriteNode

-(void)handleSwipes:(UISwipeGestureRecognizer *)sender;

@end

PlayerNode.m

#import "playerNode.h"

@implementation playerNode

-(void)handleSwipes:(UISwipeGestureRecognizer *)sender
{
    NSLog(@"swipe");
    if (sender.direction == UISwipeGestureRecognizerDirectionLeft)
    {
        NSLog(@"left");
    }


    if (sender.direction == UISwipeGestureRecognizerDirectionRight)
    {
        NSLog(@"rigth");
    }
}


@end

Я ценю любую помощь, спасибо

1
Caetano 13 Мар 2014 в 16:32
Добавьте жесты смахивания в SKScene:
 – 
Gabriel.Massana
13 Мар 2014 в 16:41
Я добавляю их в метод -(id)initWithSize:(CGSize)size в MyScene.m и все равно не реагирую на жесты. Должен ли я добавить другой метод?
 – 
Caetano
13 Мар 2014 в 16:58
Добавьте жесты в - (void)didMoveToView: (SKView *) просмотр и нацеливание на себя
 – 
Gabriel.Massana
13 Мар 2014 в 17:00
DidMoveToView - это более или менее viewDidLoad в SpriteKit
 – 
Gabriel.Massana
13 Мар 2014 в 17:00

2 ответа

Лучший ответ

Добавьте жесты смахивания в SKScene.

- (void)didMoveToView: (SKView *)
{
    self.leftSwipeGestureRecognizer = [[UISwipeGestureRecognizer alloc] init];
    [self.leftSwipeGestureRecognizer addTarget:self action:@selector(handleSwipes:)];
    [self.leftSwipeGestureRecognizer setDirection:UISwipeGestureRecognizerDirectionLeft];
    [self.view addGestureRecognizer: self.leftSwipeGestureRecognizer];
}

DidMoveToView - это более-менее viewDidLoad в SpriteKit

Затем обработайте свайпы в подклассе SKScene.

0
Gabriel.Massana 13 Мар 2014 в 17:03
1
Теперь он работает намного лучше, чем помещать его в класс viewcontroller. Большое спасибо
 – 
Caetano
13 Мар 2014 в 18:51

В файле .h сделайте плеер видимым для всех.

@property (strong) playerNode *player;

В файле .m установите игрока как цель ..

self.leftSwipeGestureRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self.player action:@selector(handleSwipes:)];

Примечание. Перед добавлением цели playerNode уже должен быть создан.

1
Mani 13 Мар 2014 в 16:40