用SpriteKit和Swift创建弹弓

时间:2015-08-25 17:43:29

标签: swift sprite-kit

我试图在简单的射击游戏中创建一个射击机制。简而言之,那就是"线"在屏幕的底部," bullet"谎言(像弓箭一样思考),玩家需要能够像弹弓一样轻弹并拖动子弹。我沿着这条线需要的动作沿着线左右移动,显然能够用线拖动子弹以产生弹弓效果。

关于如何做到这一点我唯一的理论就是创造一条绳子,就像我看到其他人用许多不同的部分一样,这些部分都与关节相连,然后将球连接到带有关节的线上。但是我如何允许球沿着线移动并像弹弓一样相互作用。当然球会被钉在其中一个小部分而不能滑动?

对于那些不熟悉Swift的人来说,这是一件巨大而又糟糕的事情,还是有一种可行的解决方法?

2 个答案:

答案 0 :(得分:2)

我会制作一根绳子,子弹附在末端(子弹的位置是绳子的末端):

let rope = SKSpriteNode(imageNamed: "rope")
rope.position = //location at bottom of screen
rope.size = //size that looks good resting
rope.name = "restingRope"
rope.anchorPoint = CGPointZero
self.addChild(restingRope)

然后,当用户按下并拖动子弹时,移除该绳索,根据{{1创建一条新绳索,其长度从“绳索”(原始绳索)的原点到用户手指的任何位置。功能。然后将子弹移动到新绳索的末端,并使用touchesMoved功能更改其位置。别忘了取下旧绳子。

SKAction.moveBy(x: , y: , duration: )

当用户放开(override func touchesMoved(touches: NSSet, withEvent event: UIEvent) { childNodeWithName("restingRope")?.removeFromParent()//remove origional rope var nodeTouched = SKNode() var currentNodeTouched = SKNode() let rope = childNodeWithName("rope") //reference old rope for touch: AnyObject in touches { childNodeWithName("strechedRope")?.removeFromParent() //remove strechedRope (will do nothing if it has not been initialized) let location = touch.locationInNode(self) var strechedRope = SKSpriteNode(imageNamed: "rope") strechedRope.position = rope!.position strechedRope.anchorPoint = CGPointZero strechedRope.size = CGSizeMake(location.x - rope!.position.x, 5) strechedRope.name = "strechedRope" self.addChild(strechedRope) } } )时,对子弹施加冲动并用它移动绳子。我没有包含任何子弹代码,因为它似乎是自我解释的。如果没有,请告诉我。

希望这有所帮助并祝你好运。

答案 1 :(得分:1)

以下是我将如何做到这一点,希望这符合您的期望。这主要是2d,但可以在3d工作。你的弹弓应该由三件事组成。

  1. 一行
  2. 另一行
  3. 弹弓精灵
  4. 子弹
  5. 那么你从他们那里做的事情很简单。我会写出代码,但我不知道如何在两个移动点之间画一条线。但基本上你要做的是从弹弓到子弹画线1,从弹弓到子弹画线2。然后使子弹可拖动,然后当它被释放时,将矢量从拖动位置移动到原始子弹位置,并将其作为物理冲动应用。这应该有用。