2015-02-09 2 views
0

Текущая ситуацияtouchesMoved двигаться фоновое изображение

Показать грузы, грузы BackgroundImage Показывает reticle BOOL как ложные

-(void)didMoveToView:(SKView *)view { 
    /* Setup your scene here */ 
    self.anchorPoint = CGPointMake(0.5, 0.5); 
    self.backgroundColor = [SKColor colorWithRed:0.15 green:0.15 blue:0.3 alpha:1.0]; 
    //Add background 
    NSString *bundle = [[NSBundle mainBundle] pathForResource:@"backgroundTemp" ofType:@"png"]; 
    UIImage *image = [[UIImage alloc] initWithContentsOfFile:bundle]; 
    SKTexture *texture = [SKTexture textureWithImage:image]; 
    backgroundImage = [SKSpriteNode spriteNodeWithTexture:texture]; 
    backgroundImage.size = CGSizeMake(self.frame.size.width, self.frame.size.height); 
    backgroundImage.position = CGPointMake(0.5, 0.5); 
    backgroundImage.zPosition = 0; 
    [self addChild:backgroundImage]; 
    //END Add Background 

    removeArray = [[NSMutableArray alloc] init]; 
    reticleShow = false; 

} 

Так после того, как был загружен фоновое изображение, отображается. Единственный другой вариант - нажать на экран, чтобы увеличить размер backgroundImage, а также загрузить изображение reticle.

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    /* Called when a touch begins */ 
    if (reticleShow == false) { 
     //Add Reticle 
     NSString *bundle = [[NSBundle mainBundle] pathForResource:@"reticle_001" ofType:@"png"]; 
     UIImage *image = [[UIImage alloc] initWithContentsOfFile:bundle]; 
     SKTexture *texture = [SKTexture textureWithImage:image]; 
     SKSpriteNode *reticle = [SKSpriteNode spriteNodeWithTexture:texture]; 
     reticle.zPosition = 1; 
     reticle.size = CGSizeMake(self.frame.size.width, self.frame.size.height); 
     reticle.position = CGPointMake(0.5, 0.5); 
     [self addChild:reticle]; 

     [removeArray addObject:reticle]; 
     //End Add Reticle 

     //Enlarge background 
     backgroundImage.size = CGSizeMake(self.frame.size.width*3, self.frame.size.height*3); 
     //End Enlarge background 

     reticleShow = true; 
    } else { 
//  //Remove reticle 
//  backgroundImage.size = CGSizeMake(self.frame.size.width, self.frame.size.height); 
//  [self removeChildrenInArray:removeArray]; 
//  reticleShow = false; 
//  //end remove reticle 

     //enable drag 

     //end enable drag 
    } 
} 

Теперь, обеспечивает расширение и булев предотвращает дальнейшие спрайты добавляются, а также обеспечение прицельных изображений.

Теперь, после этого загрузился. Или начальная печать была сделана. Теперь я хочу иметь возможность перетащить фон. перемещаем фон и сохраняем сетку в центре.

Так что я сделал это,

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { 
    for (UITouch *touch in touches) { 
     CGPoint location = [touch locationInNode:self]; 
     SKNode *node = [self nodeAtPoint:location]; 

     if ([node.name isEqualToString:backgroundImage]) { <--- ERROR HERE sksprite node to type nsstring 

      CGPoint previousLocation = [touch previousLocationInNode:self]; 
      float diff = location.y - previousLocation.y; 
      CGPoint newPosition = CGPointMake(node.position.x, node.position.y +diff); 

      if (newPosition.y > 230) { 
       newPosition.y = 230; 
      } 
      node.position = newPosition; 
     } 
    } 
} 

Три вопроса

  1. Как перетащить изображение в меньшем г-индекс? i.e перетащите фон вместо сетки?

  2. Как перемещать фоновое изображение после его увеличения?

  3. Как пройти sknode & nsstring error? backgroundImage.name = @ "backgroundImage";

+1

3 - SKNode имеет свойство имени. Вам нужно установить его. Например, myNode.name = @ "myName"; то вы проверяете его, используя if ([myNode.name isEqualToString: @ "myName"]) – sangony

+0

@sangony Отлично, это ответили на один из моих вопросов. Спасибо – user2415313

+0

@sangony теперь я могу переместить фон на z-index 0, однако, если сетка z-index 1 наложена, я не могу переместить фоновое изображение. – user2415313

ответ

0

Вопрос Один Перетащите на меньшей Z-Index

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { 
    for (UITouch *touch in touches) { 
     CGPoint location = [touch locationInNode:self]; 
     SKNode *node = [backgroundImage nodeAtPoint:location]; 

     if ([node.name isEqualToString:@"backgroundImage"]) { 

      CGPoint previousLocation = [touch previousLocationInNode:self]; 
      float ydiff = location.y - previousLocation.y; 
      float xdiff = location.x - previousLocation.x; 
      CGPoint newPosition = CGPointMake(node.position.x - xdiff, node.position.y - ydiff); 

      if (newPosition.y > 230) { 
       newPosition.y = 230; 
      } 
      node.position = newPosition; 
     } 
    } 
} 

Вставьте этот reticle.userInteractionEnabled = NO;

Вопрос Два

Не влияет на его путем увеличения

Вопрос Три

Именование SkSpriteNode для обнаружения

backgroundImage.name = @"backgroundImage";

Смежные вопросы