首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >touchesMoved不能正常工作

touchesMoved不能正常工作
EN

Stack Overflow用户
提问于 2016-01-23 03:52:34
回答 2查看 128关注 0票数 0

我正在尝试实现一个覆盖的touchesMoved功能,以使SKSpriteNodes能够被用户移动。但是,我必须非常缓慢地移动节点,这样它才能在拖动时跟随我的触摸。此外,背景中还有三个SKSpriteNodes (您将看到我显式地设置为.userInteractionEnabled = false),这些节点偶尔会响应这些触摸。任何帮助都将不胜感激。如果您需要代码的其他部分,请告诉我。

代码语言:javascript
复制
    override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) {
        var positionInScene = CGPoint(x: 375.0, y: 400.0) //sets a default position

        titleLabel.userInteractionEnabled = false
        drawingBoard.userInteractionEnabled = false
        sideBar.userInteractionEnabled = false

        for touch in touches {
            positionInScene = touch.locationInNode(self)

            if self.nodeAtPoint(positionInScene) is SKSpriteNode {
                if (self.nodeAtPoint(positionInScene)).name == movableNodeName { //movableNodeName is the name assigned to all SKSpriteNodes that should be draggable
//I know this might be a strange way of doing it
                    (self.nodeAtPoint(touch.previousLocationInNode(self))).position = positionInScene
                }
            }
        }
    }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-15 18:41:01

我成功地解决了这个问题,只需设置节点的坐标,而当节点被移动时,它就不应该移动回原来的位置。这似乎是可行的,因为我还没有能够在测试中再次复制该bug。如果有人能想出更好的解决方案,我很想听听。

票数 1
EN

Stack Overflow用户

发布于 2016-02-15 18:44:32

您的问题是您正在使用touch.locationInNode(self),而self是您的SKSpriteNode。这意味着您的触摸移动代码将只响应您的SKSpriteNode内部正在发生的事情。您需要做的是,根据您想要应用这个逻辑的方式,使用sprite的父级或场景。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34959410

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档