在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
这节内容我们来实现熊猫的二段跳。
要点:二段跳的逻辑: 逻辑一,第一次点击屏幕,status就会变成jump。 逻辑二,第二次点击屏幕,status就会变成jump2。 逻辑三,当status变成jump2的时候不响应屏幕点击 逻辑四,当熊猫落地时将status变为run。
所以只要当status的不等于jump2的时候,点击屏幕都会给熊猫施加一个向上的速度。这时候判断。如果是一段跳就将status设为jump。如果是二段跳就将status设为jump2。落地改变状态之前已经写好了。 二段跳的实现:
func jump (){ self.removeAllActions() if status != Status.jump2 { self.runAction(SKAction.animateWithTextures(jumpFrames, timePerFrame: 0.05),withKey:"jump") self.physicsBody.velocity = CGVectorMake(0, 450) if status == Status.jump { status = Status.jump2 }else{ status = Status.jump } } }
整体代码: import SpriteKit enum Status:Int{ case run=1,jump,jump2,roll; } class Panda : SKSpriteNode { let runAtlas = SKTextureAtlas(named: "run.atlas") let runFrames = [SKTexture]() let jumpAtlas = SKTextureAtlas(named: "jump.atlas") let jumpFrames = [SKTexture](); let rollAtlas = SKTextureAtlas(named: "roll.atlas") let rollFrames = [SKTexture](); var status = Status.run init(){ let texture = runAtlas.textureNamed("panda_run_01") let size = texture.size() super.init(texture:texture,color:SKColor.whiteColor(),size:size) var i:Int for i=1 ; i<=runAtlas.textureNames.count ; i++ { let tempName = String(format: "panda_run_%.2d", i) let runTexture = runAtlas.textureNamed(tempName) if runTexture { runFrames.append(runTexture) } } for i=1 ; i<=jumpAtlas.textureNames.count ; i++ { let tempName = String(format: "panda_jump_%.2d", i) let jumpTexture = jumpAtlas.textureNamed(tempName) if jumpTexture { jumpFrames.append(jumpTexture) } } for i=1 ; i<=rollAtlas.textureNames.count ; i++ { let tempName = String(format: "panda_roll_%.2d", i) let rollTexture = rollAtlas.textureNamed(tempName) if rollTexture { rollFrames.append(rollTexture) } } self.physicsBody = SKPhysicsBody(rectangleOfSize: texture.size()) self.physicsBody.dynamic = true self.physicsBody.allowsRotation = false //摩擦力 self.physicsBody.restitution = 0 self.physicsBody.categoryBitMask = BitMaskType.panda self.physicsBody.contactTestBitMask = BitMaskType.scene | BitMaskType.platform self.physicsBody.collisionBitMask = BitMaskType.platform run() } func run(){ self.removeAllActions() self.status = .run self.runAction(SKAction.repeatActionForever(SKAction.animateWithTextures(runFrames, timePerFrame: 0.05))) } func jump (){ self.removeAllActions() if status != Status.jump2 { self.runAction(SKAction.animateWithTextures(jumpFrames, timePerFrame: 0.05),withKey:"jump") self.physicsBody.velocity = CGVectorMake(0, 450) if status == Status.jump { status = Status.jump2 }else{ status = Status.jump } } } func roll(){ self.removeAllActions() status = .roll self.runAction(SKAction.animateWithTextures(rollFrames, timePerFrame: 0.05),completion:{() in self.run()}) } }
项目文件地址http://yun.baidu.com/share/link?shareid=3824235955&uk=541995622
Swift游戏实战-跑酷熊猫系列00 游戏预览01 创建工程导入素材02 创建熊猫类03 熊猫跑动动画04 熊猫的跳和滚的动作05 踩踏平台是怎么炼成的06 创建平台类以及平台工厂类07 平台的移动08 产生源源不断的移动平台09 移除场景之外的平台10 视差滚动背景11 欢迎进入物理世界12 与平台的碰撞 |
请发表评论