Alb*_*ert 10 physics ios sprite-kit swift
我想CGFloat在屏幕点击时每次增加一次.浮点数具有设定的最大值和最小值.我试图通过这个建议:StackOverflow
但是,这只会在触摸后增加CGFloat,或达到最大值.我想在触摸期间增加CGFloat ,这意味着你触摸的时间越长,Jump/CGFloat越高.
问题可能在于冲动,在应用之后你无法改变它.这意味着,在'玩家'获得20的冲动,并且屏幕被更长时间触摸后,浮动可能会增加,但冲动不会.
如果查看我当前的代码,触摸屏幕时脉冲设置为最大值,但如果释放,则应删除该操作.但是,它不起作用,冲动不会停止.
我知道你可以在按下之后将身体的速度设置为一个值,如果按下已经结束速度回到0,那么它会停止它'跳',但是看起来并不是很平滑有冲动.
有人有解决方案吗?
struct Constants {
static let minimumJumpForce:CGFloat = 20.0
static let maximumJumpForce:CGFloat = 60.0
}
class GameScene: SKScene, SKPhysicsContactDelegate {
var force: CGFloat = 20.0
func longPressed(longPress: UIGestureRecognizer) {
if (longPress.state == UIGestureRecognizerState.Began) {
println("Began")
self.pressed = true
let HigherJump = SKAction.runBlock({Player.physicsBody?.applyImpulse(CGVectorMake(0, Constants.maximumJumpForce))})
self.runAction(HigherJump , withKey:"HighJump")
}else if (longPress.state == UIGestureRecognizerState.Ended) {
println("Ended")
self.pressed = false
self.removeActionForKey("HighJump")
}
}
override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
/* Called when a touch begins */
for touch in (touches as! Set<UITouch>) {
let location = touch.locationInNode(self)
}
}
override func touchesEnded(touches: Set<NSObject>, withEvent event: UIEvent) {
for touch in (touches as! Set<UITouch>) {
let location = touch.locationInNode(self)
}
}
override func update(currentTime: CFTimeInterval) {
/* Called before each frame is rendered */
}
Run Code Online (Sandbox Code Playgroud)
1.基于SpriteKit从Xcode模板创建\xe2\x80\x98Game\xe2\x80\x99
\n2.将列出的代码复制粘贴到GameScene类
import SpriteKit\n\nclass GameScene: SKScene, SKPhysicsContactDelegate {\n\n var location = CGPoint()\n var floorSize = CGSize()\n var floorColor = UIColor()\n var player = SKSpriteNode()\n\n override func didMoveToView(view: SKView) {\n\n view.showsFPS = true;\n view.showsNodeCount = true;\n view.showsDrawCount = true;\n\n self.physicsBody = SKPhysicsBody(edgeLoopFromRect: self.frame)\n self.physicsBody?.categoryBitMask = 1\n self.physicsBody?.contactTestBitMask = 1\n self.physicsWorld.gravity = CGVectorMake(0, 0)\n self.physicsWorld.contactDelegate = self;\n\n location = CGPoint(x:CGRectGetMidX(self.frame), y:CGRectGetMidY(self.frame))\n\n player = SKSpriteNode(imageNamed:"Spaceship")\n player.physicsBody = SKPhysicsBody(rectangleOfSize: CGSize(width: 320, height: 320))\n player.physicsBody?.categoryBitMask = 1\n player.physicsBody?.collisionBitMask = 1\n player.physicsBody?.contactTestBitMask = 1\n player.physicsBody?.linearDamping = 0;\n player.xScale = 1\n player.yScale = 1\n player.position = location\n self.addChild(player)\n\n }\n\n override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {\n self.physicsWorld.gravity = CGVectorMake(0, 0)\n let direction = Float(1.5708)//Float(player.zRotation) + Float(M_PI_2)\n player.physicsBody?.applyForce(CGVector(dx: 150000*CGFloat(cosf(direction)), dy: 150000*CGFloat(sinf(direction))))\n }\n\n override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) {\n self.physicsWorld.gravity = CGVectorMake(0, -7.9)\n }\n\n}\nRun Code Online (Sandbox Code Playgroud)\n\n3.运行应用程序
\n\n这应该为您的“跳跃”游戏提供起点:)
\n| 归档时间: |
|
| 查看次数: |
472 次 |
| 最近记录: |