代码之家  ›  专栏  ›  技术社区  ›  user5177178

超越Spritekit中的触感

  •  1
  • user5177178  · 技术社区  · 8 年前

    在我正在开发的游戏中,你可以通过触摸屏幕的左/右侧来将角色从左向右移动。我想做的是,如果你触摸左侧,然后触摸右侧,角色开始向右移动,而不是向左移动;向左移动的动作被覆盖。我目前做的是让游戏是单点触摸,但覆盖上一次触摸的方法是我一直坚持的地方。我的代码:

    - (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
        UITouch *touch = [touches anyObject];
        CGPoint location = [touch locationInNode:self];
    
        if (location.x < screenWidth/2){
            leftMovement = YES;
            [player runLeft];
        }
        else {
            rightMovement = YES;
            [player runRight];
        }
    
        self.userInteractionEnabled = NO;
    
    }
    - (void) touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
        [self playerStop];
        self.userInteractionEnabled = YES;
    }
    
    - (void) update:(NSTimeInterval)currentTime {
        if (isTouched && leftMovement){
            player.physicsBody.velocity=CGVectorMake(-PLAYERSPEED,
                                    player.physicsBody.velocity.dy);
        }
    
        else if (isTouched && rightMovement){
            player.physicsBody.velocity=CGVectorMake(PLAYERSPEED,
                                  player.physicsBody.velocity.dy);
        }
    
    }
    

    1 回复  |  直到 8 年前
        1
  •  1
  •   WangYudong    8 年前

    你应该考虑的一件事是改变两者的价值 leftMovement rightMovement 当用户触摸屏幕的另一侧时,否则 update 方法将永远不会被调用。

    if (location.x < screenWidth/2){
        leftMovement = YES;
        rightMovement = NO;
        [player runLeft];
    }
    else {
        rightMovement = YES;
        leftMovement = NO;
        [player runRight];
    }