我正在为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
)。我尝试复制对象创建(使用唯一的名称,参数和位置将它们放在屏幕的右侧,但其他代码与我上面使用的完全相同)。
它们也有效,但问题是它们不能同时工作。我可以在任何给定时间使用左一个或右一个,而不是在一起。我需要在两个单独的线程上运行它们吗?我尝试过使用两个带有两个独立选择器的CADisplayLinks,什么都没有。我尝试使用同一个,没有。
任何人都可以对这个影子有所了解吗?
提前多多感谢。
答案 0 :(得分:1)
您应该在SKScene中覆盖update
,而不是使用CADisplayLink
。您可以从joystickMovement
拨打update
并获得所需的效果。
您可以在SKScene class reference的每一帧中详细了解被称为SKScene
处理的不同方法。
如果您还没有,则还需要在SKScene的视图中将multipleTouchEnabled
设置为true。您可以使用<{1}}
GameViewController