Ste*_*sse 15 ios sprite-kit swift
所以基本上在我的游戏中我需要抛掷或抛出一个物体.到目前为止,我有一个精灵,它可以被拖动,但它不能被抛出.游戏的想法是抛出一个精灵与另一个精灵碰撞.我想要我们将调用testNode的精灵,移动用户抛出它的方式
意思是,当我释放精灵时,我希望它继续向我移动它的方向.我花了很多年时间试图解决这个问题,但我不能.我正在使用适用于iOS 8+的SpriteKit.如果有人可以提供帮助请.
这是我看过的视频,但它与GameSalad有关,这是另一个故事.你可以看看
(如果您需要进一步联系,请回复)
import Foundation;
import SpriteKit;
class Level:SKScene {
TestNode:Test? //Test is a class I made
//Removed the update and touches began due to it being irrelevant to what I need help with.
override func didMoveToView(view: SKView){
testNode = Fruit(imageNamed: "apple_idle")
testNode?.position = CGPointMake(60, 294)
testNode?.xScale = 0.5
testNode?.yScale = 0.5
self.addChild(testNode!)
}
override func touchesMoved(touches: NSSet, withEvent event: UIEvent) {
var nodeTouched = SKNode()
var currentNodeTouched = SKNode()
for touch: AnyObject in touches {
let location = touch.locationInNode(self)
nodeTouched = self.nodeAtPoint(location)
testNode?.position = location
}
}
override func touchesEnded(touches: NSSet, withEvent event: UIEvent) {
var touch: UITouch = touches.anyObject() as UITouch
var location: CGPoint = touch.locationInNode(self) as CGPoint
}
Run Code Online (Sandbox Code Playgroud)
Epi*_*yte 28
这里有一个简单的例子,我通过在游戏循环中模拟其速度来移动带有触摸的精灵,而不是直接设置位置.这使得精灵更加动态(即你可以"抛出"它,并让它在拖动精灵时与其他物理体交互).不需要角度计算,我只是计算在一段时间内将精灵移动到触摸位置所需的速度.在这种情况下,我将时间设置为1/60,以便瞬间应用运动,使对象看起来非常敏感.
import SpriteKit
class GameScene: SKScene {
var sprite: SKSpriteNode!
var touchPoint: CGPoint = CGPoint()
var touching: Bool = false
override func didMoveToView(view: SKView) {
self.physicsBody = SKPhysicsBody(edgeLoopFromRect: self.frame)
sprite = SKSpriteNode(color: UIColor.redColor(), size: CGSize(width: 50, height: 50))
sprite.physicsBody = SKPhysicsBody(rectangleOfSize: sprite.size)
sprite.position = CGPoint(x: self.size.width/2.0, y: self.size.height/2.0)
self.addChild(sprite)
}
override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
let touch = touches.first as! UITouch
let location = touch.locationInNode(self)
if sprite.frame.contains(location) {
touchPoint = location
touching = true
}
}
override func touchesMoved(touches: Set<NSObject>, withEvent event: UIEvent) {
let touch = touches.first as! UITouch
let location = touch.locationInNode(self)
touchPoint = location
}
override func touchesEnded(touches: Set<NSObject>, withEvent event: UIEvent) {
touching = false
}
override func update(currentTime: CFTimeInterval) {
if touching {
let dt:CGFloat = 1.0/60.0
let distance = CGVector(dx: touchPoint.x-sprite.position.x, dy: touchPoint.y-sprite.position.y)
let velocity = CGVector(dx: distance.dx/dt, dy: distance.dy/dt)
sprite.physicsBody!.velocity=velocity
}
}
}
Run Code Online (Sandbox Code Playgroud)

您可以自己微调phyiscs计算,以获得您想要的效果.但是这段代码应该足以让你入门.我能想到的一些改进可能会限制速度,因此物体在释放时不能移动得太快.在触摸拖动中添加延迟,以便移动精灵但在最后意外停止短时继续抛出对象.
| 归档时间: |
|
| 查看次数: |
3988 次 |
| 最近记录: |