gpt4 book ai didi

ios - 如何在 SpriteKit 游戏中禁用第二次触摸?

转载 作者:行者123 更新时间:2023-11-29 10:26:48 25 4
gpt4 key购买 nike

玩家在我的游戏中拖动一个 Sprite ,但当不小心用第二根手指触摸屏幕时,它明显地扭曲了运动。

我使用了以下解决方案来禁用第二个触摸,但不幸的是它不起作用:

//--------------

-(void)touchesBegan:(NSSet*) touches withEvent:(UIEvent*) event {

if (touches.count == 1 && draggedNode == nil) {

CGPoint pos = [[touches anyObject] locationInNode:self];
SKNode * touchedNode = [self nodeAtPoint:pos];

if([touchedNode.name isEqual: @"shooterBall"]){
draggedNode = touchedNode;
}
draggedNodeOffset = CGPointMake(draggedNode.position.x - pos.x, draggedNode.position.y - pos.y);
}

}

//--------------

-(void)touchesMoved:(NSSet*) touches withEvent:(UIEvent*) event {
if (touches.count <= 1) {
CGPoint pos = [[touches anyObject] locationInNode:self];
draggedNode.position = CGPointMake(pos.x + draggedNodeOffset.x, pos.y+draggedNodeOffset.y);
}
}

//--------------

-(void)touchesEnded:(NSSet*) touches withEvent:(UIEvent*) event {
draggedNode = nil;
}

//--------------

你有什么解决办法吗?

提前感谢您的帮助!

最佳答案

您想在场景中实现 UIPanGestureRecognizer。它将允许您跟踪用户触摸的位置,同时控制其他“杂散”触摸:UIPanGestureRecognizer Documentation

初始化后,您需要实现一个方法来处理用户的平底锅。您必须在此方法内设置标志以控制滑动开始/结束的时间。我想this answer on StackOverflow gave a really good explanation of using it (with Swift) .顺便说一句,当您初始化它时,您应该将手势识别器的属性 maximumNumberOfTouches 设置为 1(这将导致它在用户平移时忽略其他触摸)。

比较棘手的部分是将您之前编写的相同代码转换为手势识别器。不同之处在于每次“滑动”或“平移”只会调用一次您的处理程序,而每次“触摸”时都会调用您现在使用的 touches 方法。在这一点上有几种方法可以继续,你可以尝试任何你喜欢的方法,但我认为一旦你设置了手势识别器(剧透),这将是最简单的方法:

  1. 确保手势识别器是一个实例变量,以便您可以从所有方法访问它。

  2. 转到 update: 方法并创建一个 if 语句来检查 gesture.state == UIGestureRecognizerStateBegan ||手势状态 == UIGestureRecognizerStateChanged

  3. 在此 if 语句中使用您之前使用的相同算法。要检查触摸所在的位置,请使用方法:locationInView:。使用self.view作为参数。

希望这对您有所帮助!祝你好运。

关于ios - 如何在 SpriteKit 游戏中禁用第二次触摸?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31766011/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com