我试图在简单的射击游戏中创建一个射击机制。简而言之,那就是"线"在屏幕的底部," bullet"谎言(像弓箭一样思考),玩家需要能够像弹弓一样轻弹并拖动子弹。我沿着这条线需要的动作沿着线左右移动,显然能够用线拖动子弹以产生弹弓效果。
关于如何做到这一点我唯一的理论就是创造一条绳子,就像我看到其他人用许多不同的部分一样,这些部分都与关节相连,然后将球连接到带有关节的线上。但是我如何允许球沿着线移动并像弹弓一样相互作用。当然球会被钉在其中一个小部分而不能滑动?
对于那些不熟悉Swift的人来说,这是一件巨大而又糟糕的事情,还是有一种可行的解决方法?
答案 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。然后使子弹可拖动,然后当它被释放时,将矢量从拖动位置移动到原始子弹位置,并将其作为物理冲动应用。这应该有用。