【问题标题】:SpriteKit Gesture IssueSpriteKit 手势问题
【发布时间】:2015-03-28 05:36:08
【问题描述】:

所以我一直在尝试在这款战术/益智游戏中实现类似于洛克人战斗网络的瓷砖系统。但是,我似乎无法通过滑动手势将精灵移动到所需的距离。

相反,手势最终会将精灵移动到视图的左下方。在那个角落里,手势似乎仍然不像配置的那样运行。

为什么精灵会移动到左下角?

代码如下:

class GameScene: SKScene {

var mageNodeOne: Mage?

//Swipe gesture handlers
func swipedRight(sender:UISwipeGestureRecognizer) {
    mageNodeOne!.position = CGPointMake(self.position.x + 115, self.position.y)
    println("swiped right")
}

func swipedLeft(sender:UISwipeGestureRecognizer) {
    mageNodeOne!.position = CGPointMake(self.position.x - 115, self.position.y)
    println("swiped left")
}

func swipedUp(sender:UISwipeGestureRecognizer) {
    mageNodeOne!.position = CGPointMake(self.position.x, self.position.y + 220)
    println("swiped up")
}

func swipedDown(sender:UISwipeGestureRecognizer) {
    mageNodeOne!.position = CGPointMake(self.position.x, self.position.y - 220)
    println("swiped down")
}

//Scene Setup
override func didMoveToView(view: SKView) {

    // Add gesture recognizers to view
    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)

    let swipeUp:UISwipeGestureRecognizer = UISwipeGestureRecognizer(target: self, action: Selector("swipedUp:"))
    swipeUp.direction = .Up
    view.addGestureRecognizer(swipeUp)

    let swipeDown:UISwipeGestureRecognizer = UISwipeGestureRecognizer(target: self, action: Selector("swipedDown:"))
    swipeDown.direction = .Down
    view.addGestureRecognizer(swipeDown)

    // Add tiles to view
    var tileSpacerOne = SKSpriteNode(imageNamed: "TileSpacer")
    tileSpacerOne.position = CGPoint(x: 508, y: 388)
    tileSpacerOne.zPosition = -1
    self.addChild(tileSpacerOne)

    var tileOne = SKSpriteNode(imageNamed: "TileExampleOne")
    tileOne.position = CGPoint(x: 350, y: 608)
    self.addChild(tileOne)

    var tileTwo = SKSpriteNode(imageNamed: "TileExampleOne")
    tileTwo.position = CGPoint(x: 350, y: 388)
    self.addChild(tileTwo)

    var tileThree = SKSpriteNode(imageNamed: "TileExampleOne")
    tileThree.position = CGPoint(x: 350, y: 168)
    self.addChild(tileThree)

    var tileFour = SKSpriteNode(imageNamed: "TileExampleOne")
    tileFour.position = CGPoint(x: 665, y: 608)
    self.addChild(tileFour)

    var tileFive = SKSpriteNode(imageNamed: "TileExampleOne")
    tileFive.position = CGPoint(x: 665, y: 388)
    self.addChild(tileFive)

    var tileSix = SKSpriteNode(imageNamed: "TileExampleOne")
    tileSix.position = CGPoint(x: 665, y: 168)
    self.addChild(tileSix)

    // Add mage to view
    mageNodeOne = Mage(imageNamed: "MageOne")
    mageNodeOne!.position = CGPointMake(667,475.5)
    addChild(mageNodeOne!)
}

【问题讨论】:

    标签: ios swift sprite-kit


    【解决方案1】:

    为什么要将精灵移动到self + 115 的位置,而不是mageNodeOne's 当前位置+ 115。

    例子:

     CGPointMake(self.position.x + 115, self.position.y)
    

    应该是

     CGPointMake(mageNodeOne.position.x + 115, mageNodeOne.position.y)
    

    【讨论】:

    • 解决了,谢谢!我不敢相信我没想过这样做。我猜“self”指的是视图或手势识别器本身?
    • sender 将是手势,因为它是作为参数传递的。 self 引用了你所在的类的实例。
    • 所以在这种情况下,GameScene 就是 self. sender 将是调用该方法的手势识别器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-13
    • 1970-01-01
    • 2011-06-19
    相关资源
    最近更新 更多