【问题标题】:Dual Virtual Joystick for iOS simultaneous use适用于 iOS 同时使用的双虚拟操纵杆
【发布时间】:2016-03-17 01:21:22
【问题描述】:

我正在为 SpriteKit 使用虚拟操纵杆,效果很好。我尝试过JCInput 版本或SpriteKit-Joystick 版本。两者都用于运动,并在左侧使用它们。

这是我使用的代码,虽然文档在 gitHub 中还是很不错的:

对于 JCInput 版本:

    self.joystick = [[JCJoystick alloc] initWithControlRadius:40 baseRadius:45 baseColor:[SKColor blueColor] joystickRadius:25 joystickColor:[SKColor redColor]];
    [self.joystick setPosition:CGPointMake(70,70)];
    [self addChild:self.joystick];

和更新函数:

-(void)update:(CFTimeInterval)currentTime {

    [self.myLabel1 setPosition:CGPointMake(self.myLabel1.position.x+self.joystick.x, self.myLabel1.position.y+self.joystick.y)];

    [self.myLabel2 setPosition:CGPointMake(self.myLabel2.position.x+self.imageJoystick.x, self.myLabel2.position.y+self.imageJoystick.y)];

/* Called before each frame is rendered */

}

对于 SpriteKit-Joystick 版本:

    SKSpriteNode *jsThumb = [SKSpriteNode spriteNodeWithImageNamed:@"joystick"];
    [jsThumb setScale:0.5f];
    SKSpriteNode *jsBackdrop = [SKSpriteNode spriteNodeWithImageNamed:@"dpad"];
    [jsBackdrop setScale:0.5f];
    self.joystick = [Joystick joystickWithThumb:jsThumb andBackdrop:jsBackdrop];
    self.joystick.position = CGPointMake(50,50);
    [self addChild:self.joystick];
    //I've already declared it in the header file
    velocityTick = [CADisplayLink displayLinkWithTarget:self selector:@selector(joystickMovement)];
    [velocityTick addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes];

以及更新功能:

-(void)joystickMovement
{
    if (self.joystick.velocity.x != 0 || self.joystick.velocity.y != 0)
    {
        [self.myLabel1 setPosition:CGPointMake(self.myLabel1.position.x+.1 *self.joystick.velocity.x, self.myLabel1.position.y+.1 * self.joystick.velocity.y)];
    }
}

现在一切正常,没有任何问题。但是我需要添加另一个来旋转我的角色(我们称之为self.myLabel1)。我尝试复制对象创建(使用唯一的名称、参数和位置将它们放在屏幕的右侧,但其他代码位与我上面使用的完全相同)。

它们也可以工作,但问题是它们不能同时工作。我可以在任何给定时间使用左侧或右侧,而不是一起使用。我需要在两个单独的线程上运行它们吗?我尝试过使用两个 CADisplayLink 和两个单独的选择器,但什么也没有。我尝试使用相同的,但没有。

谁能解释一下这个阴影?

非常感谢。

【问题讨论】:

    标签: sprite-kit joystick gamecontroller


    【解决方案1】:

    您应该在您的 SKScene 中覆盖 update,而不是使用 CADisplayLink。可以从update调用joystickMovement,达到想要的效果。

    您可以阅读更多关于称为SKScene 处理SKScene class reference 中的每一帧的不同方法。

    如果您还没有,您还需要在您的 SKScene 视图中将 multipleTouchEnabled 设置为 true。您可以通过 GameViewController 使用

    self.view.multipleTouchEnabled = YES;
    

    【讨论】:

    • 太荒谬了!我在这上面花了一个小时,然后上床睡觉,做噩梦!你救了我今晚的迪翁。将多点触控设置为启用,它就像一种享受。我接受了您的建议,并使用了更新方法来做到这一点。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2011-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多