如何在触摸屏幕时移动精灵并在我点击屏幕时禁用

Posted

技术标签:

【中文标题】如何在触摸屏幕时移动精灵并在我点击屏幕时禁用【英文标题】:how to move the sprite when touch the screen and disable when I tap the screen 【发布时间】:2019-04-18 20:40:21 【问题描述】:

我正在制作一个游戏,我在屏幕上移动一个精灵,但如果我点击屏幕,它会移动到那个位置,我只希望它在我将手指放在屏幕上时移动,这样精灵就会跟随我的手指,它不会通过我的物体传送

override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) 
        for touch in touches 
            let touchLocation = touch.location(in: self)
            player.position.x = touchLocation.x

        
    

我试过这个(玩家是我的精灵)并且它有效,当我移动我的手指时,精灵会跟随,但是如果我点击屏幕一侧的 fx,它会传送到那个位置而我没有希望发生这种情况。

【问题讨论】:

你想让它动画到新的位置吗?或者根本没有移动,因为它最初没有被按下来拖动? 如果我只是在屏幕上按下它不应该移动到那个位置,但是如果我在屏幕上拖动我的手指它应该跟随,但我不知道该怎么做。跨度> 【参考方案1】:

试试下面的代码:

var isDragging = false
var player = /* SKSpriteNode or whatever */


override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) 
    if let touch = touches.first 
        let touchLocation = touch.location(in: view)
        if player.contains(touchLocation) 
            isDragging = true
        
    


override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) 
    guard isDragging else  return 

    if let touch = touches.first 
        let touchLocation = touch.location(in: view)
        player.position.x = touchLocation.x
    


override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) 
    isDragging = false

touchesBegan - 使用contains()确保触摸位置在播放器内的某个位置。

touchesMoved - 如果正在拖动播放器,请将播放器移动到触摸的位置。

touchesEnded - 当触摸结束时,拖动将停止。

【讨论】:

@frederikNiebling 很高兴听到!

以上是关于如何在触摸屏幕时移动精灵并在我点击屏幕时禁用的主要内容,如果未能解决你的问题,请参考以下文章

安卓按键精灵脚本。求大神制作一个安卓按键精灵点击屏幕的脚本。就是触摸一个位置后自动重复点击屏幕那个

iPhone,Cocos2D - 在触摸屏时向左/向右移动精灵

仅在触摸时拖动 SKSpriteNode

检测触摸并按住屏幕iPhone(Xcode)[重复]

没有事件处理的触摸检测

在屏幕上移动 SKSpriteNode