- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
玩家在我的游戏中拖动一个 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 方法。在这一点上有几种方法可以继续,你可以尝试任何你喜欢的方法,但我认为一旦你设置了手势识别器(剧透),这将是最简单的方法:
确保手势识别器是一个实例变量,以便您可以从所有方法访问它。
转到 update:
方法并创建一个 if 语句来检查 gesture.state == UIGestureRecognizerStateBegan ||手势状态 == UIGestureRecognizerStateChanged
在此 if 语句中使用您之前使用的相同算法。要检查触摸所在的位置,请使用方法:locationInView:
。使用self.view
作为参数。
希望这对您有所帮助!祝你好运。
关于ios - 如何在 SpriteKit 游戏中禁用第二次触摸?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31766011/
我是一名优秀的程序员,十分优秀!