我想在上面移动一个SKSpriteNode Y-Axis.名为Player的SKSpriteNode没有Velocity.播放器只有在平台接触时才能跳转.
每次触摸屏幕时,我都想给玩家一个最小冲动或最大冲动的冲动
如果屏幕很快被点击,最小脉冲应该是例如y = 50.如果屏幕被保持,这意味着手指在屏幕上长,最大值应该是例如y = 100.
但是玩家也应该能够在最小高度和最高高度之间跳跃,如果对于例如屏幕不长但也没有很快按下,玩家应该只能得到一个冲动y = 70.
如果屏幕被保持,播放器应该跳到他的最大高度,跌倒,如果它再次与平台接触,它应该跳,因为你仍然按住屏幕.
我已经尝试过这个线程中的建议答案:StackOverFlow 但是这不会给出最小跳跃,也没有按下跳转.
为清楚起见:冲击不应该在敲击完成后,而是在敲击时.你握的时间越长,跳跃的时间就越长.
import SpriteKit
import GameKit
struct Constants {
static let minimumJumpForce:CGFloat = 40.0
static let maximumJumpForce:CGFloat = 60.0
static let characterSideSpeed:CGFloat = 18.0
}
class GameScene: SKScene, SKPhysicsContactDelegate {
var Player: SKSpriteNode!
var Platform0: SKSpriteNode!
var World: SKNode!
var Camera: SKNode!
var force: CGFloat = 40.0
var pressed = false
var isCharacterOnGround = false
.....
func …Run Code Online (Sandbox Code Playgroud) 我做了一个平台游戏并将相机指向主节点播放器.
我已经浏览了Apple文档,可以在这里找到:Apple
大约有6个平台,self.frame.size.height / 4.5它们之间有空格,每当它们dy = -15再次位于屏幕顶部时应重新生成,以使其成为无限循环.
我有一个播放器节点,每次触摸屏幕时都会产生一个冲动(播放器上下跳动).整场比赛只会继续前进y-Axis.
我创建的相机专注于播放器,每当玩家跳跃平台向下移动并且玩家向上移动时.然而,这只是观点,而不是现实世界的立场.这意味着,给定的位置SpawnPlatforms总是相同的,因为它们不移动,只有坚持播放器的视图上下移动.
我想在我的播放器节点上安装摄像头,它在y轴上移动,当它进一步向上时,平台也应该向下移动,此时只有视图改变,我无法使用更新:重建平台的方法.我怎么能改变呢?
编辑:我让我的代码使用了更新Update:Method,但这仍然没有回答我的初始问题,如何使用相机移动整个世界,而不仅仅是相机.
override func didMoveToView(view: SKView) {
/* Setup your scene here */
self.physicsWorld.contactDelegate = self
self.anchorPoint = CGPoint(x: 0, y: 0.30)
backgroundColor = SKColor(red: 81.0/255.0, green: 192.0/255.0, blue: 201.0/255.0, alpha: 1.0)
self.World = SKNode()
self.World.name = "World"
addChild(World)
self.Camera = SKNode()
self.Camera.name = "Camera"
self.World.addChild(Camera)
SpawnPlatforms()
SpawnPlayer()
}
func SpawnPlatforms() {
Platform0 = SKSpriteNode (color: SKColor.greenColor(), size: CGSize(width: …Run Code Online (Sandbox Code Playgroud) 我想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) { …Run Code Online (Sandbox Code Playgroud)