Как распознать события ccTouches, когда мой ccLayer имеет loadNibNamed - PullRequest
0 голосов
/ 16 июля 2011

Моя проблема в том, что я не нашел решения для "прокола" через UIScrollView, чтобы ccLayer мог распознавать события ccTouch

   self.isTouchEnabled = YES;
    [[NSBundle mainBundle] loadNibNamed:@"myLayer" owner:self options:nil];

...

- (void) registerWithTouchDispatcher {
    [[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self priority:INT_MIN swallowsTouches:NO];
    }

-(BOOL) ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event {
        CGPoint location = [self convertToWorldSpace:[self convertTouchToNodeSpace:touch]];

Любые идеи, как создать делегат или другое решение, чтобы обойти пользовательский интерфейс и поговорить с CC?

1 Ответ

2 голосов
/ 17 августа 2011

У меня была эта проблема сегодня утром с Cocos2D v1.0.0. Мое решение состояло в том, чтобы включить вызов метода CCTouchDispatcher внутри моего метода init для слоя, а затем этот слой, внутри UIView, распознал бы прикосновения.

-(id) init
{
  if ((self = [super init]) != nil) {
    // do stuff
    [[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self priority:0 swallowsTouches:YES];
  }
  return self;
}

-(BOOL) ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event
{
  CGPoint location = [self convertToNodeSpace:[[CCDirector sharedDirector] convertToGL:[touch locationInView:[touch view]]]];
  NSLog(@"TouchBegan at x:%0.2f, y:%0.2f", location.x, location.y);

  return YES;
}

Альтернативным решением будет использование метода ccTouchesBegan:

-(id) init
{
  if ((self = [super init]) != nil) {
    // do stuff
    self.isTouchEnabled = YES;
  }
  return self;
}


-(void) ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{   
  for (UITouch *thisTouch in touches) {
    CGPoint location = [self convertToNodeSpace:[[CCDirector sharedDirector] convertToGL:[thisTouch locationInView:[thisTouch view]]]];
    NSLog(@"TouchesBegan at x:%0.2f, y:%0.2f", location.x, location.y); 
  }
}

Обратите внимание, что два сенсорных метода имеют разные методы, чтобы ваше приложение знало, что оно должно реагировать на прикосновения. Вы не можете смешивать и сопоставлять то, как вы хотите реагировать на прикосновения, и какие прикосновения вы хотите наблюдать.

...