- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 SpriteKit、Swift 中有 3 个 SKScenes:
一级
游戏结束
在Level 1和Level 2中,我的角色移动是通过以下代码完成的:
class Level1: SKScene, SKPhysicsContactDelegate {
func swipedRight(sender:UISwipeGestureRecognizer){
let moveRIGHT = SKAction.moveBy(CGVectorMake(60, 0), duration: 1)
Character.runAction(moveRIGHT)
}
func swipedLeft(sender:UISwipeGestureRecognizer){
let moveLEFT = SKAction.moveBy(CGVectorMake(-60, 0), duration: 1)
Character.runAction(moveLEFT)
}
let swipeRight:UISwipeGestureRecognizer = UISwipeGestureRecognizer(target: self, action: Selector("swipedRight:"))
swipeRight.direction = .Right
view.addGestureRecognizer(swipeRight)
let swipeLeft:UISwipeGestureRecognizer = UISwipeGestureRecognizer(target: self, action: Selector("swipedLeft:"))
swipeLeft.direction = .Left
view.addGestureRecognizer(swipeLeft)
当角色在关卡 1 中死亡时,我会过渡到“游戏结束”SKScene,如果您愿意,您可以在其中重试关卡 1。
但是,在级别 1 - 游戏结束 - 级别 1 - 游戏结束 - 级别 1 - 游戏结束等之间来回切换后,每当您在级别 1 和级别 2 上执行 UISwipeGesture 时,FPS 都会急剧下降。
然后我决定从 Level 1 中移除 UISwipeGestureRecognizer,然后故意在 Level 1 和 Game Over 之间来回切换,然后转到 Level 2。这样做之后在 Level 2 中使用 UISwipeGestures 时 FPS 没有下降。
因此,我的结论是,每当我用 UISwipeGestureRecognizer 一遍又一遍地加载 SKScene 时,每当您尝试启动滑动时,它都会导致 FPS 下降。
所以:1) 我是否错误地实现了这个 UISwipeGestureRecognizer?
2) 有没有其他方法可以在不使用 UISwipeGestureRecognizer 的情况下获得相同的角色移动效果?
谢谢大家!
最佳答案
您需要在转换到新场景之前删除手势,否则会不断添加相同的手势,从而导致 FPS 问题。例如,如果您在 2 级场景中的手势与 1 级场景中的手势不同,您的游戏将会崩溃,因为旧的 1 级手势尚未被删除。在改变场景之前试试这个
guard let view = view else { return }
guard view.gestureRecognizers != nil else { return }
for gesture in view.gestureRecognizers! {
if let recognizerTap = gesture as? UITapGestureRecognizer {
view.removeGestureRecognizer(recognizerTap)
}
if let recognizerSwipe = gesture as? UISwipeGestureRecognizer {
view.removeGestureRecognizer(recognizerSwipe)
}
}
另外,为了让您的生活更轻松,您或许应该开始子类化。考虑制作一个 BaseScene 类,其中包含您在所有关卡场景中显示的所有属性、控件、玩家 Sprite 、标签等。否则,例如,如果您有 20 个关卡,则需要复制太多代码。 super 简单
像这样制作一个BaseScene
class BaseScene: SKScene, SKPhysicsContactDelegate {
然后只需在 ViewDidLoad 方法中设置手势和所有级别所需的所有内容。还可以将 baseScene 用于您的联系方法和您需要在关卡之间共享的其他内容(gameOver 方法等)
在你的关卡场景中,你应该像这样子类化它们
class Level1Scene: BaseScene {
override func didMoveToView(view: SKView) {
super.didMoveToView(view) // imports everything from ViewDidLoad in base scene
// do other setUps specific to level 1 only
这将使您的代码更加灵活。假设您使用 BaseScene 中的 Update 函数来暂停游戏,它将在子类级别场景中工作,如上所述。但是例如,如果在 Level2 中您需要向仅在 Level2 中运行的 Update 函数添加一个方法,您可以执行类似于 ViewDidLoad 方法的操作。所以在你的 2 级场景中你可以这样说
override func update(currentTime: CFTimeInterval) {
super.update(currentTime) // will use all BaseScene update methods
// do something specific for level 2 only
现在如果你想要更新中的东西只在 Level2 场景中运行并且忽略 BaseScene 中的所有更新方法而不是简单地调用
super.update(currentTime)
这几乎适用于所有方法,例如接触方法、触摸开始等。这是要走的路。
关于xcode - UISwipeGestureRecognizer 的替代品?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34238803/
我有这个代码: UISwipeGestureRecognizer *recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self
我在调用两次 UISwipeGestureRecognize 时遇到问题,我创建了基于 tabbarcontroller 的应用程序,该应用程序有 4 个选项卡。每个选项卡在该 UIViewContr
是否有一种简单的方法可以延长滑动被识别之前必须移动的距离。看来默认值真的很短。它不仅仅是一个水龙头,但只是勉强。我是否需要创建自定义手势识别器来覆盖此距离? 谢谢。 最佳答案 没有记录的属性可以设置,
我需要根据用户是否滑动屏幕顶部、屏幕中间或屏幕底部来触发不同的事件。我正在尝试找出最好/最简单的方法来做到这一点,因为我很确定没有办法从 UISwipeGestureRecognizer 获取位置。
我正在使用 UISwipeGestureRecogizer刷卡left和 right通过使用 UISwipeGestureRecognizerDirectionRight和 UISwipeGestur
我在 iOS 应用程序中收到无法识别的选择器发送错误。我尝试根据其他类似线程中提到的答案解决该问题,但失败了。请看一下下面的代码并帮助我解决这个问题。 谢谢 class ThirdViewContro
我已经为左/右设置了一个 GestureRecognizer,但我还想为向下(但不是向上)添加一个 GestureRecognizer。当我应用以下内容时,向上滑动在设备屏幕上按预期工作;但是,UIS
我在我的UITabBarController中使用UISwipeGestureRecogniser: class TabBarController: UITabBarController {
我有一个滑动手势识别器,在用户滑动后将其关闭。那时我有一系列动画。第一, View 将沿着用户滑动的方向移动。然后,根据它停止的位置,根据它停止的位置发生另一个动画。然后,我在处理此滑动的函数末尾一直
我有以下 UIGestureRecognizer 可以正确检测向上滑动 - (void) addGestureRecognizer { _swipeRecognizer = [[UISwipe
我在使用 UISwipeGestureRecognizer 时遇到了一些异常行为。可以正确检测到第一次滑动,但无法正确检测到第二次滑动。然后第三次滑动被正确检测到,但第四次没有被正确检测到,等等。我有
我想在滑动 UItextView 时调用一个方法,并确定其标签。我正在使用这段代码: -(IBAction)donecomment:(id)sender{ UISwipeGestureRecogniz
我在 ImageView 中添加了4个UISwipeGestureRecognizer。但是当我向右滑动时,会触发向上UISwipeGestureRecognizer。当我向左滑动时,不会触发UISw
如果我将 UISwipeGestureRecognizer 应用于 View ,则当设备旋转时,滑动方向将按预期工作。但是,如果 UISwipeGestureRecognizer 在 AppDeleg
我如何识别UISwipeGestureRecognizer与 UISwipeGestureRecognizerDirectionUp然后紧接着,无需抬起手指,就识别出 UISwipeGestureRe
在我的 spritekit 游戏中,我试图使 2 个 UISwipeGestureRecognizers 可以同时被识别,但是,我无法这样做。任何帮助将不胜感激,在此先感谢。下面是我的代码... 在
在我的 UiView 中,我有一个名为“container”的 subView,如果用户向上或向下滑动,它应该执行旋转动画。基本上它就像一个轮子,如果用户向下滑动轮子,则向下滑动一定程度,同时向上滑动
我正在尝试创建一个由 UISwipeGestureRecognizer 触发的自定义交互过渡,但状态始终为 UIGestureRecognizerStateEnded,因此我无法使用它来控制动画。 A
在 iOS/Swift 中,UIGestureRecognizer 为 swiping有 location 方法 determine the location where a swipe begin.
我在 SpriteKit、Swift 中有 3 个 SKScenes: 一级 游戏结束 2 级。 在Level 1和Level 2中,我的角色移动是通过以下代码完成的: class Level1: S
我是一名优秀的程序员,十分优秀!