求一个荒岛求生ios游戏攻略,不知道名字叫啥了,玩法和滚动和跳跃类似,不过是个小

声控游戏跳跃游戏叫什么 声控游戏app苹果版下载
八分音符酱尖叫版
近日在微博中火起来了一款声控游戏,德云色也是赶上了潮流,那么这款声控游戏跳跃游戏叫什么?下面小编为大家奉上声控游戏app苹果版下载。
近日,又有一款来自日本的搞怪游戏不断在各大社交网络上升温,看来又会是一款即将席卷全球的小品游戏作品,这款游戏就是《不要停!八音符酱(休むな!8分音符ちゃん?)》。小编为大家带来网页版的八分音符酱,抓紧进入试玩吧!
实在是不得不佩服生活在日本的人们的脑洞,在动漫、日用品、游戏等等方方面面,我们的这个邻居经常会带给我们一些脑洞大开的恶搞之作,动漫就不用说了,什么样奇奇怪怪的风格和故事都可以在动漫中看到,而在生活中更是不缺乏各种奇怪的发明,而在游戏作品中除了一些大作之外,不少立意奇特的作品仿佛更能吸引玩家们的注意。
&八分音符酱网页版:
八分音符酱声音控制器:
  游戏乍看上去似乎非常简单,玩家在游戏中需要控制一个小怪物在场景中跳过那些场景中的空隙,场景的设计基本以黑白色调为主。不过游戏的奇葩之处就在于游戏的操作方式是以玩家的声音进行控制,根据玩家声音的音量的大小不同,主角跳跃的高度也会不同。而且随着游戏的推进,&坑&会越来越多,会出现更大的空隙,或者移动的音符企图阻止玩家继续前进,而玩家所能做的就只能是跟着场景的变化开始各种大呼小叫了。
  其实单纯的从一款游戏的角度来看,游戏中场景设计简单,元素也并没有非常多,没有任何的剧情可言,而就是依靠着玩家用声音大小去控制角色的移动,这在如今的游戏世界里也算是一朵盛开的奇葩了,对本作感兴趣的玩家不妨去找来体验体验,不过要小心身边的朋友或者左邻右舍冲过来暴打你一顿。不知道游戏的作者有没有意愿将游戏移植到手机上呢。
八分音符酱是刚上线的新游戏,因为这款游戏是要靠吼出来的,很多小伙伴都不知道怎么玩这款游戏,清清下载吧小编为大家带来游戏新手攻略,一起来看看吧!
卧底注册机免授权码版
热门安卓游戏排行
类型:棋牌游戏
类型:益智休闲
类型:棋牌游戏
类型:益智休闲
类型:棋牌游戏
类型:棋牌游戏
类型:棋牌游戏
类型:棋牌游戏
类型:棋牌游戏
类型:棋牌游戏
声控游戏跳跃游戏叫什么 声控游戏app苹果版下载
八分音符酱尖叫版用Swift和SpriteKit开发iOS游戏
之前用SpriteKit做过一个叫做ColorAtom的小游戏,用了访问者模式处理碰撞检测,还用了SpriteKit中的粒子系统、连接体、力场和动画等,随着Swift的火热,我也用Swift和SpriteKit写了一个更为简单的小
&(via:)
之前用SpriteKit做过一个叫做的小游戏,用了访问者模式处理碰撞检测,还用了SpriteKit中的粒子系统、连接体、力场和动画等,可以说是一个学习SpriteKit比较不错的Demo,随着Swift的火热,我也用Swift和SpriteKit写了一个更为简单的小游戏。附上Spiral的动图:
游戏规则是:玩家是五角星小球,小球自动沿着陀螺线向外运动,当玩家点击屏幕时五角星小球会跳跃到内层螺旋,当五角星小球碰到红色旋风或滚动到螺旋线终点时游戏结束。玩家吃掉绿色旋风来得2分,吃到紫色三角得一分并获得保护罩,保护罩用来抵挡一次红色旋风。随着分数的增加游戏会升级,速度加快。游戏结束后可以截屏分享到社交网络,也可以选择重玩。
以下是本文内容:
1. 准备工作
2.&绘制基本界面
3. Swift中用访问者模式处理碰撞
4. 界面数据显示
5. 按钮的绘制和截图分享
SpriteKit是苹果iOS7新推出的2D游戏引擎,这里不再过多介绍。我们新建工程的时候选取iOS中的Game,然后选择SpriteKit作为游戏引擎,语言选择Swift,Xcode6会为我们自动创建一个游戏场景GameScene,它包含GameScene.swift和GameScene.sks两个文件,sks文件可以让我们可视化拖拽游戏控件到场景上,然后再代码中加载sks文件来完成场景的初始化:
extension&SKNode&{&&&&&class&func&unarchiveFromFile(file&:&NSString)&-&&SKNode?&{&&&&&&&&&&let&path&=&NSBundle.mainBundle().pathForResource(file,&ofType:&&sks&)&&&&&&&&&&var&sceneData&=&NSData.dataWithContentsOfFile(path,&options:&.DataReadingMappedIfSafe,&error:&nil)&&&&&&&&&var&archiver&=&NSKeyedUnarchiver(forReadingWithData:&sceneData)&&&&&&&&&&archiver.setClass(self.classForKeyedUnarchiver(),&forClassName:&&SKScene&)&&&&&&&&&let&scene&=&archiver.decodeObjectForKey(NSKeyedArchiveRootObjectKey)&as&GameScene&&&&&&&&&archiver.finishDecoding()&&&&&&&&&return&scene&&&&&}&}&
但我比较喜欢纯写代码的方式来搭接面,因为sks文件作为游戏场景布局还不成熟,它是iOS8新加入的功能,以前在iOS7的时候sks文件只是作为粒子系统的可视化编辑文件。
所以我们修改GameViewController.swift文件的viewDidLoad()函数,像以前那样直接用代码加载游戏场景:
override&func&viewDidLoad()&{&&&&&&&&&super.viewDidLoad()&&&&&&&&&&&&&&&&&&let&skView&=&self.view&as&SKView&&&&&&&&&&&&&&&&&&skView.ignoresSiblingOrder&=&true&&&&&&&&&let&scene&=&GameScene(size:&skView.bounds.size)&&&&&&&&&&&&&&&&&&scene.scaleMode&=&.AspectFill&&&&&&&&&skView.presentScene(scene)&&&&&&}&
GameScene虽然是Xcode自动生成的,但是只是个空架子,我们需要把它生成的没用的代码删掉,比如初始化函数里内容为&HelloWorld&的SKLabelNode,还有touchesBegan(touches: NSSet, withEvent event: UIEvent)方法中绘制飞船的代码。把这些删光后,我们还需要有图片素材来绘制这四类精灵节点:Player(五角星),Killer(红色旋风),Score(绿色旋风)和Shield(紫色三角)。我是用Sketch来绘制这些矢量图形的,文件名为spiral.sketch,随同工程文件一同放到GitHub上了。当然你不需要手动导出图片到工程,直接下载工程文件就好了:
绘制基本界面
这部分的工作主要是绘制出螺旋线作为地图,并让四种精灵节点动起来。
螺旋线的绘制
SKNode有一个子类SKShapeNode,专门用于绘制线条的,我们新建一个Map类,继承SKShapeNode。下面我们需要生成一个CGPath来赋值给Map的path属性:
import&UIKit&import&SpriteKit&class&Map:&SKShapeNode&{&&&&&let&spacing:CGFloat&=&35&&&&&var&points:[CGPoint]&=&[]&&&&&convenience&init(origin:CGPoint,layer:CGFloat){&&&&&&&&&&var&x:CGFloat&=&origin.x&&&&&&&&&var&y:CGFloat&=&origin.y&&&&&&&&&var&path&=&CGPathCreateMutable()&&&&&&&&&self.init()&&&&&&&&&CGPathMoveToPoint(path,&nil,&x,&y)&&&&&&&&&points.append(CGPointMake(x,&y))&&&&&&&&&for&index&in&1..&layer{&&&&&&&&&&&&&y-=spacing*(2*index-1)&&&&&&&&&&&&&CGPathAddLineToPoint(path,&nil&,&x,&y)&&&&&&&&&&&&&points.append(CGPointMake(x,&y))&&&&&&&&&&&&&x-=spacing*(2*index-1)&&&&&&&&&&&&&CGPathAddLineToPoint(path,&nil&,&x,&y)&&&&&&&&&&&&&points.append(CGPointMake(x,&y))&&&&&&&&&&&&&y+=spacing*2*index&&&&&&&&&&&&&CGPathAddLineToPoint(path,&nil&,&x,&y)&&&&&&&&&&&&&points.append(CGPointMake(x,&y))&&&&&&&&&&&&&x+=spacing*2*index&&&&&&&&&&&&&CGPathAddLineToPoint(path,&nil&,&x,&y)&&&&&&&&&&&&&points.append(CGPointMake(x,&y))&&&&&&&&&}&&&&&&&&&self.path&=&path&&&&&&&&&self.glowWidth&=&1&&&&&&&&&self.antialiased&=&true&&&&&&&&&CGPathGetCurrentPoint(path)&&&&&}&}&
算法很简单,就是顺时针计算点坐标然后画线,这里把每一步的坐标都存入了points数组里,是为了以后计算其他数据时方便。因为这部分算法不难而且不是我们的重点,这里不过多介绍了。
四种精灵的绘制
因为四种精灵都是沿着Map类的路径来顺时针运动,它们的动画绘制是相似的,所以我建立了一个Shape类作为基类来绘制动画,它继承于SKSpriteKit类,并拥有半径(radius)、移动速度(moveSpeed)和线段计数(lineNum)这三个属性。其中lineNum是用于标记精灵在螺旋线第几条线段上的,这样比较方便计算动画的参数。
class&Shape:&SKSpriteNode&{&&&&&let&radius:CGFloat&=&10&&&&&var&moveSpeed:CGFloat&=&50&&&&&var&lineNum&=&0&&&&&init(name:String,imageName:String){&&&&&&&&&super.init(texture:&SKTexture(imageNamed:&imageName),color:SKColor.clearColor(),&size:&CGSizeMake(radius*2,&radius*2))&&&&&&&&&self.physicsBody&=&SKPhysicsBody(circleOfRadius:&radius)&&&&&&&&&self.physicsBody.usesPreciseCollisionDetection&=&true&&&&&&&&&self.physicsBody.collisionBitMask&=&0&&&&&&&&&self.physicsBody.contactTestBitMask&=&playerCategory|killerCategory|scoreCategory&&&&&&&&&moveSpeed&+=&CGFloat(Data.speedScale)&*&self.moveSpeed&&&&&&&&&self.name&=&name&&&&&&&&&self.physicsBody.angularDamping&=&0&&&&&&}&}&
构造函数中设定了Shape类的一些物理参数,比如物理体的形状大小,碰撞检测掩码等。这里设定usesPreciseCollisionDetection为true是为了增加碰撞检测的精度,常用于体积小速度快的物体。collisionBitMask属性标记了需要模拟物理碰撞的类别,contactTestBitMask属性标记了需要检测到碰撞的类别。这里说的&类别&指的是物体的类别:
let&playerCategory:UInt32&&&&&&=&&0x1&&&&0;&let&killerCategory:UInt32&&&&&&=&&0x1&&&&1;&let&scoreCategory:UInt32&&&&&&&=&&0x1&&&&2;&let&shieldCategory:UInt32&&&&&&=&&0x1&&&&3;&
这种用位运算来判断和存储物体类别的方式很常用,上面这段代码写在了NodeCategories.swift文件中。
为了描述Shape的速度随着游戏等级上升而增加,这里速度的计算公式含有Data.speedScale作为参数,关于Data&类&在后面会讲到。
为了让精灵动起来,需要知道动画的移动目的地是什么。虽然SKAction有followPath(path: CGPath?, speed: CGFloat)方法,但是在这里并不实用,因为Player会经常改变路线,所以我写了一个runInMap(map:Map)方法让精灵每次只移动到路径上的下一个节点(之前Map类存储的points属性用到了吧!嘿嘿)
func&runInMap(map:Map){&&&&&&&&&let&distance&=&calDistanceInMap(map)&&&&&&&&&let&duration&=&distance/moveSpeed&&&&&&&&&let&rotate&=&SKAction.rotateByAngle(distance/10,&duration:&duration)&&&&&&&&&let&move&=&SKAction.moveTo(map.points[lineNum+1],&duration:&duration)&&&&&&&&&let&group&=&SKAction.group([rotate,move])&&&&&&&&&self.runAction(group,&completion:&{&&&&&&&&&&&&&self.lineNum++&&&&&&&&&&&&&if&self.lineNum==map.points.count-1&{&&&&&&&&&&&&&&&&&if&self&is&Player{&&&&&&&&&&&&&&&&&&&&&Data.gameOver&=&true&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&if&self&is&Killer{&&&&&&&&&&&&&&&&&&&&&self.removeFromParent()&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&if&self&is&Score{&&&&&&&&&&&&&&&&&&&&&self.removeFromParent()&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&if&self&is&Shield{&&&&&&&&&&&&&&&&&&&&&self.removeFromParent()&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&}&&&&&&&&&&&&&else&{&&&&&&&&&&&&&&&&&self.runInMap(map)&&&&&&&&&&&&&}&&&&&&&&&&&&&})&&&&&}&
上面的代码先是调用calDistanceInMap(map:Map)-&CGFloat方法计算精灵距离下一个节点的距离(也就是需要移动的距离),然后计算精灵需要旋转动画时间和移动动画时间,最后将两个动画作为一个group来运行,在动画运行结束后判断精灵是否运行到了最后一个节点,也就是螺旋线的终点:如果到终点了则移除精灵,否则开始递归调用方法,来开始下一段动画(奔向下一个节点)。
计算距离的calDistanceInMap(map:Map)-&CGFloat方法代码如下:
func&calDistanceInMap(map:Map)-&CGFloat{&&&&&&&&&if&self.lineNum==map.points.count&{&&&&&&&&&&&&&return&0&&&&&&&&&}&&&&&&&&&switch&lineNum%4{&&&&&&&&&case&0:&&&&&&&&&&&&&return&position.y-map.points[lineNum+1].y&&&&&&&&&case&1:&&&&&&&&&&&&&return&position.x-map.points[lineNum+1].x&&&&&&&&&case&2:&&&&&&&&&&&&&return&map.points[lineNum+1].y-position.y&&&&&&&&&case&3:&&&&&&&&&&&&&return&map.points[lineNum+1].x-position.x&&&&&&&&&default:&&&&&&&&&&&&&return&0&&&&&&&&&}&&&&&}&
到此为止Shape类完成了,Killer、Score和Shield类比较简单,继承Shape类并设置自身纹理和类别即可:
class&Killer:&Shape&{&&&&&convenience&init()&{&&&&&&&&&self.init(name:&Killer&,imageName:&killer&)&&&&&&&&&self.physicsBody.categoryBitMask&=&killerCategory&&&&&}&}&class&Score:&Shape&{&&&&&convenience&init()&{&&&&&&&&&self.init(name:&Score&,imageName:&score&)&&&&&&&&&self.physicsBody.categoryBitMask&=&scoreCategory&&&&&}&}&class&Shield:&Shape&{&&&&&convenience&init()&{&&&&&&&&&self.init(name:&Shield&,imageName:&shield&)&&&&&&&&&self.physicsBody.categoryBitMask&=&shieldCategory&&&&&}&}&
而Player因为有护盾状态并可以在螺旋线上跳跃到内层,所以稍微复杂些:
class&Player:&Shape&{&&&&&var&jump&=&false&&&&&var&shield:Bool&=&false&{&&&&&willSet{&&&&&&&&&if&newValue{&&&&&&&&&&&&&self.texture&=&SKTexture(imageNamed:&&player0&)&&&&&&&&&}&&&&&&&&&else{&&&&&&&&&&&&&self.texture&=&SKTexture(imageNamed:&&player&)&&&&&&&&&}&&&&&}&&&&&}&&&&&convenience&init()&{&&&&&&&&&self.init(name:&Player&,imageName:&player&)&&&&&&&&&self.physicsBody.categoryBitMask&=&playerCategory&&&&&&&&&self.moveSpeed&=&70&&&&&&&&&self.lineNum&=&3&&&&&}&&&&&func&restart(map:Map)&{&&&&&&&&&self.alpha&=&1&&&&&&&&&self.removeAllActions()&&&&&&&&&self.lineNum&=&3&&&&&&&&&self.moveSpeed&=&70&&&&&&&&&self.jump&=&false&&&&&&&&&self.shield&=&false&&&&&&&&&self.position&=&map.points[self.lineNum]&&&&&&&&&self.runInMap(map)&&&&&}&}&
Player类的初始位置是螺旋线第四个节点,而且移动速度要略快于其他三种精灵,所以在这里设置为70(Shape默认速度50)。jump和shield是用来标记Player当前状态的属性,其中shield属性还定义了属性监察器,这是Swift中存储属性具有的响应机制,类似于KVO。在shield状态改变时也同时改变Player的纹理。需要注意的是构造器中对属性的改变并不会调用属性检查器,在willSet和didSet中改变自身属性也不会调用属性检查器,因为那样会造成死循环。
restart(map:Map)方法用于在游戏重新开始时重置Player的相关数据。
Swift中用访问者模式处理碰撞
访问者模式是双分派(Double Dispatch)模式的一种实现,关于双分派模式的详细解释,参考我的另一篇文章:,里面包含了C++,Java和Obje-C的实现,这次我们用Swift实现访问者模式。
因为SpriteKit中物理碰撞检测到的都是SKPhysicsBody,所以我们的被访问者需要包含一个SKPhysicsBody对象:
class&VisitablePhysicsBody{&&&&&let&body:SKPhysicsBody&&&&&init(body:SKPhysicsBody){&&&&&&&&&self.body&=&body&&&&&}&&&&&func&acceptVisitor(visitor:ContactVisitor){&&&&&&&&&visitor.visitBody(body)&&&&&}&}&
acceptVisitor方法传入的是一个ContactVisitor类,它是访问者的基类(也相当于接口),访问者的visitBody(body:SKPhysicsBody)方法会根据传入的body实例来推断出被访问者的真实类别,然后调用对应的方法来处理碰撞:
func&visitBody(body:SKPhysicsBody){&&&&&&&&&&&&&&&&&&&&&&&&&&&var&contactSelectorString&=&&visit&&+&body.node.name&+&&:&&&&&&&&&&let&selector&=&NSSelectorFromString(contactSelectorString)&&&&&&&&&if&self.respondsToSelector(selector){&&&&&&&&&&&&&dispatch_after(0,&dispatch_get_main_queue(),&{&&&&&&&&&&&&&&&&&NSThread.detachNewThreadSelector(selector,&toTarget:self,&withObject:&body)&&&&&&&&&&&&&&&&&})&&&&&&&&&}&&&&&&}&
Swift废弃了performSelector方法,所以这里刷了个小聪明来将消息传给具体的访问者。有关Swift中替代performSelector的方案,参见。
下面让GameScene实现SKPhysicsContactDelegate协议:
func&didBeginContact(contact:SKPhysicsContact){&&&&&&&&&&&&&&&&&&let&visitorA&=&ContactVisitor.contactVisitorWithBody(contact.bodyA,&forContact:&contact)&&&&&&&&&let&visitableBodyB&=&VisitablePhysicsBody(body:&contact.bodyB)&&&&&&&&&visitableBodyB.acceptVisitor(visitorA)&&&&&&&&&&&&&&&&&&let&visitorB&=&ContactVisitor.contactVisitorWithBody(contact.bodyB,&forContact:&contact)&&&&&&&&&let&visitableBodyA&=&VisitablePhysicsBody(body:&contact.bodyA)&&&&&&&&&visitableBodyA.acceptVisitor(visitorB)&&&&&}&
跟Objective-C中实现访问者模式类似,也是通过ContactVisitor类的工厂方法返回一个对应的子类实例来作为访问者,然后实例化一个被访问者,被访问者接受访问者的访问。A访问B和B访问A在大多数场合是相同的,但是你不知道谁是A谁是B,所以需要两种情况都调用。下面是ContactVisitor类的工厂方法和构造器:
class&ContactVisitor:NSObject{&&&&&let&body:SKPhysicsBody!&&&&&let&contact:SKPhysicsContact!&&&&&class&func&contactVisitorWithBody(body:SKPhysicsBody,forContact&contact:SKPhysicsContact)-&ContactVisitor!{&&&&&&&&&&&&&&&&&&if&0&!=&body.categoryBitMask&playerCategory&{&&&&&&&&&&&&&return&PlayerContactVisitor(body:&body,&forContact:&contact)&&&&&&&&&}&&&&&&&&&if&0&!=&body.categoryBitMask&killerCategory&{&&&&&&&&&&&&&return&KillerContactVisitor(body:&body,&forContact:&contact)&&&&&&&&&}&&&&&&&&&if&0&!=&body.categoryBitMask&scoreCategory&{&&&&&&&&&&&&&return&ScoreContactVisitor(body:&body,&forContact:&contact)&&&&&&&&&}&&&&&&&&&if&0&!=&body.categoryBitMask&shieldCategory&{&&&&&&&&&&&&&return&ShieldContactVisitor(body:&body,&forContact:&contact)&&&&&&&&&}&&&&&&&&&return&nil&&&&&&}&&&&&init(body:SKPhysicsBody,&forContact&contact:SKPhysicsContact){&&&&&&&&&self.body&=&body&&&&&&&&&self.contact&=&contact&&&&&&&&&super.init()&&&&&&}&}&
PS:上面的代码省略了已经提到过的visitBody(body:SKPhysicsBody)方法
因为这个游戏逻辑比较简单,所有碰撞后的逻辑都写到了PlayerContactVisitor类里:
func&visitKiller(body:SKPhysicsBody){&&&&&&&&&let&thisNode&=&self.body.node&as&Player&&&&&&&&&let&otherNode&=&body.node&&&&&&&&&&if&thisNode.shield&{&&&&&&&&&&&&&otherNode.removeFromParent()&&&&&&&&&&&&&thisNode.shield&=&false&&&&&&&&&}&&&&&&&&&else&{&&&&&&&&&&&&&Data.gameOver&=&true&&&&&&&&&}&&&&&}&&&&&func&visitScore(body:SKPhysicsBody){&&&&&&&&&let&thisNode&=&self.body.node&&&&&&&&&let&otherNode&=&body.node&&&&&&&&&&otherNode.removeFromParent()&&&&&&&&&Data.score&+=&2&&&&&}&&&&&func&visitShield(body:SKPhysicsBody){&&&&&&&&&let&thisNode&=&self.body.node&as&Player&&&&&&&&&let&otherNode&=&body.node&&&&&&&&&otherNode.removeFromParent()&&&&&&&&&thisNode.shield&=&true&&&&&&&&&Data.score++&&&&&&&&&&&&&&}&
上面的方法都是&visit+类名&格式的,处理的是Player碰撞到其他三种精灵的逻辑。而其他三种精灵之间的碰撞不需要处理,所以KillerContactVisitor、ScoreContactVisitor和ShieldContactVisitor这三个ContactVisitor的子类很空旷,这里不再赘述。
我们设置Player碰撞到Killer游戏结束,碰撞到Score加两分,碰撞到Shield加一分并获得护甲(shield属性设为true)。可以看到这里大量用到了Data&类&&,它其实是一个存储并管理全局数据的结构体,它里面存储了一些静态的成员属性,也可看做非线程安全的单例。
界面数据显示
这部分很简单,主要是将Data结构体中存储的分数和等级等数据通过SKLabelNode显示在界面上,只不过我封装了一个Display类来将所有的SKLabelNode统一管理,并让其实现我定义的DisplayData协议来让Data中的数据变化驱动界面更新:
protocol&DisplayData{&&&&&func&updateData()&&&&&func&levelUp()&&&&&func&gameOver()&&&&&func&restart()&}&
下面是Data结构体代码,大量使用了存储属性的监察器来响应数据变化:
struct&Data{&&&&&static&var&display:DisplayData?&&&&&static&var&updateScore:Int&=&5&&&&&static&var&score:Int&=&0{&&&&&willSet{&&&&&&&&&if&newValue&=updateScore{&&&&&&&&&&&&&updateScore+=5&*&++level&&&&&&&&&}&&&&&}&&&&&didSet{&&&&&&&&&display?.updateData()&&&&&}&&&&&}&&&&&static&var&highScore:Int&=&0&&&&&static&var&gameOver:Bool&=&false&{&&&&&willSet{&&&&&&&&&if&newValue&{&&&&&&&&&&&&&let&standardDefaults&=&NSUserDefaults.standardUserDefaults()&&&&&&&&&&&&&Data.highScore&=&standardDefaults.integerForKey(&highscore&)&&&&&&&&&&&&&if&Data.highScore&&&Data.score&{&&&&&&&&&&&&&&&&&Data.highScore&=&Data.score&&&&&&&&&&&&&&&&&standardDefaults.setInteger(Data.score,&forKey:&&highscore&)&&&&&&&&&&&&&&&&&standardDefaults.synchronize()&&&&&&&&&&&&&}&&&&&&&&&&&&&display?.gameOver()&&&&&&&&&}&&&&&&&&&else&{&&&&&&&&&&&&&display?.restart()&&&&&&&&&}&&&&&}&&&&&didSet{&&&&&&}&&&&&}&&&&&static&var&level:Int&=&1{&&&&&willSet{&&&&&&&&&speedScale&=&Float(newValue)*0.1&&&&&&&&&if&newValue&!=&1{&&&&&&&&&&&&&display?.levelUp()&&&&&&&&&}&&&&&}&&&&&didSet{&&&&&&&&&display?.updateData()&&&&&&}&&&&&}&&&&&static&var&speedScale:Float&=&0{&&&&&willSet{&&&&&&}&&&&&didSet{&&&&&&}&&&&&}&&&&&&static&func&restart(){&&&&&&&&&Data.updateScore&=&5&&&&&&&&&Data.score&=&0&&&&&&&&&Data.level&=&1&&&&&&&&&Data.speedScale&=&0&&&&&}&}&
这里不得不提到一个更新界面时遇到的一个坑,当我想通过名字遍历GameScene子节点的时候,一般会用到enumerateChildNodesWithName(name: String?, usingBlock: ((SKNode!, UnsafePointer&ObjCBool&) -& Void)?)方法,但是这个方法在Xcode6Beta3更新后经常会抛异常强退,这让我很费解,恰巧遇到此问题的不只是我一个人,所以还是老老实实的自己写循环遍历加判断吧。
按钮的绘制和截图分享
参考我的另外两篇文章:和。
在本工程中只有ShareButton和ReplayButton两个按钮,Swift版本的代码很简洁,而我通过Social.Framework中的UIActivityViewController来分享得分,这部分代码写在了ShareButton.swift中:
let&scene&=&self.scene&as&GameScene&&&&&&&&&let&image&=&scene.imageFromNode(scene)&&&&&&&&&let&text&=&&我在Spiral游戏中得了\(Data.score)分,快来追逐我的步伐吧!&&&&&&&&&&let&activityItems&=&[image,text]&&&&&&&&&let&activityController&=&UIActivityViewController(activityItems:&activityItems,&applicationActivities:&nil)&&&&&&&&&(scene.view.nextResponder()&as&UIViewController).presentViewController(activityController,&animated:&true,&completion:&nil)&
CocoaChina是全球最大的苹果开发中文社区,官方微信每日定时推送各种精彩的研发教程资源和工具,介绍app推广营销经验,最新企业招聘和外包信息,以及Cocos2d引擎、Cocos Studio开发工具包的最新动态及培训信息。关注微信可以第一时间了解最新产品和服务动态,微信在手,天下我有!
请搜索微信号“CocoaChina”关注我们!
关注微信 每日推荐
扫一扫 浏览移动版玩的就是飞檐走壁 iOS平台10大跑酷游戏推荐
腾讯数码讯(李小鹏)很久之前,一部叫做《暴力街区的》的电影,让人很多人认识了一项运动——跑酷。这项极具观赏性的运动可是相当令人血脉贲张。而任何热门、流行的东西都可以在游戏中找到替代品。跑酷也是一样。随着Temple Run的风靡全球,跑酷类游戏再次火了一把。暴力街区让很多人认识了跑酷作为目前最火的移动平台,iOS素以应用质量高著称。在这之中,又以游戏最具代表性。而在目前的iOS平台上,质量上乘的跑酷类游戏同样不少。今天,编辑就为大家推荐10款相当值得一玩的跑酷类游戏。玩的就是飞檐走壁 10大iOS跑酷游戏推荐也许你不能在现实生活中飞檐走壁,又各种优雅的动作来完成翻越障碍的目的,但在游戏中,还是值得去尝试的。怎么样,想不想知道自己的反应速度和耐久性?随便挑战一款本次推荐的10大跑酷游戏吧!Temple Run 2也许几年前说起跑酷游戏你还不知道哪一款可以作为代表作的话,那么Temple Run的出现让这个问题有了一个标准的答案。作为可以在iOS平台比肩植物大战僵尸、愤怒的小鸟的一款游戏,Temple Run已经是iOS上最成功的游戏之一。今年1月中旬,这款游戏的续作正式发布——Temple Run 2。如果你喜欢跑酷游戏的话,Temple Run 2自然是不能错过的。虽然对比第一代很难说有实质性的提升(跑酷类游戏的确很难有突破),但更好的画面和多丰富的元素让它玩起来更为刺激。此外,各种技能升级和内购也方便用户使用。总体而言,作为目前iOS最成功的游戏之一,Temple Run 2还是值得试玩的。要知道,这款只需要上下左右滑动以及左右摇摆机身的游戏能够成功肯定是有道理的。镜之边缘毫无夸张的是,即便有Temple Run这样风靡全球的“神作”在,镜之边缘依然是编辑心中无可挑战的跑酷游戏NO.1。这款由知名游戏公司EA发行的游戏,早在2008年、2009年就已经相继登陆主机平台、PC平台,且于2010年发布版本。镜之边缘的iOS版本,不同于主机平台版本,它是以第三人称视角的跑酷游戏,在游戏中我们需要根据地形来完成各种动作,到达终点。这款安装包超过100MB的游戏,在跑酷类游戏里要算是“大块头”了。而它的画面感和游戏性也是极其出色的,喜爱跑酷游戏的你,镜之边缘不玩玩的话,绝对是损失。当然,面对最后更新于日,以及内容提要还是“针对iPhone 4视网膜显示技术优化”,你也知道镜之边缘是不完美适配iPhone 5,且制作团队已经放弃了这款游戏。这一点不免让人游戏遗憾。滑雪大冒险不同于常规的跑酷游戏,滑雪大冒险是一款横屏游戏,甚至它的玩法要比Temple Run 2还要简单,我们只需按或者按住屏幕即可。当然,选择不同的时机可是有截然不同的效果的,游戏的精髓也正是在这里。在滑雪大冒险中,我们要做的就是让主角更快的滑行,然后获得更多的滞空时间,来进行后空翻。而后空翻的目的也正是让主角更快的滑行。选择一个恰当的时间以及搭配好动作来让主角速度越来越快就是这个游戏最考验人的地方。这款游戏目前有收费和免费版,而如果选择免费版的话,游戏过程中一直有广告的问题还是很让人烦心的。地铁跑酷地铁跑酷(Subway Surfers)也是之前在国内相当火爆的一款跑酷类游戏。游戏操作上与Temple Run大同小异,都是上滑、下滑、左滑、右滑来让主角躲避障碍,或者获得奖励。不过有了多种类似于上坡、下坡,跳跃的设计让它的游戏玩法更为丰富。除此之外,地铁跑酷的优秀之处还在于它的画面,它采用了3D立体视角,同时它的画面也看上去清新可爱,相比于看起来有些“土”的Temple Run,地铁跑酷可就洋气多了。当然,至于Q版的风格还是要看你是不是能够接受。不过在编辑看来,地铁跑酷和Temple Run仅对比画面的话,地铁跑酷还是“高端、大气、上档次”的。末日跑酷看名字就知道末日跑酷(The End App)的游戏背景是怎样的了。没错,游戏是以世界末日为背景,我们要做的是帮助主角获得奖励和生存必需品。这款末日跑酷在玩法上同样属于常规类跑酷游戏,我们要做的就是各种滑动。在画面上,颇具科技感的灾难场景让游戏过程更具有代入感。当然,末日跑酷这款游戏比较适合硬汉,对于喜欢甜美的游戏的话,就不要尝试了。神庙逃亡:魔境仙踪事实上,神庙逃亡:魔境仙踪(TempleRun:魔境仙踪)可以算是Temple Run 2的特别篇。因为在游戏玩法上它并没有带来什么新鲜元素,而只是把游戏主人公换成了同名电影中的主人公。当然,出品方变成了迪士尼。虽然玩法上一致,但对于喜欢这部电影的人而言,显然神庙逃亡:魔境仙踪会更具代入感,让人玩儿起来不会太生硬。至于怎么玩,需要攻略秘籍的话,等同于Temple Run 2。Pitfall如果硬实力的话,Pitfall应该是本次推荐的跑酷游戏中最强之一。这款游戏早在1982年就已经登陆Windows平台。而现在,它由动视旗下工作室重制,发布iOS版本。而提到动视,这个主机平台的游戏巨擎,它出品的游戏必然不俗。在试玩过程中,Pitfall也的确带来了新鲜感。画面具有鲜明的特点,而不时切换视角的设计也让游戏充满了趣味和可玩性。同样的,Pitfall也是一款横版的跑酷游戏,游戏玩法也同样是像常规跑酷游戏一样。特工跑酷如果你喜欢玩Temple Run,但厌倦了它的画面感的话,那么特工跑酷(Agent Dash)应该会满足你的需要。我们在游戏里扮演的是一名颇具搞笑意味的特工。而如果不喜欢的话,还有丰富的人物可供解锁选择。与其他游戏风格不同的是,特工跑酷的画面线条硬朗,音效也带有自己的特点。游戏玩法方面,它与Temple Run、地铁跑酷等等常规跑酷游戏无异。甚至你可以将它视为更换了皮肤的Temple Run,但各种让人忍俊不禁的主人公形象,可是比起Temple Run更讨巧。克4第二章索尼克,这个经典的游戏动画主人公的知名度已经不需要多做解释了。这只历史上最快的刺猬也是著名游戏公司SEGA的招牌人物。它的《索尼克》游戏系列一直是SEGA的代表。而在iOS平台上,索尼克4第二章正是它的最新作品。如果你经历过世嘉游戏机时代,那么索尼克这款游戏肯定不会陌生,即便没玩过也会在各种店面里看到这款游戏。这款游戏中我们有夸张的速度和跳跃能力,玩法上也与常规跑酷游戏截然不同。需要注意的是,索尼克4第二章目前在App Store售价30元,对于一款iOS游戏而言,不算便宜。不过,索尼克4第二章的安装包大小高达400MB+,整体质量和画面也可以从这个数据猜到一些。边境传奇喜欢跑酷,并且酷爱科幻的话,边境传奇(Outland Games)绝对是你的菜。如果那些科幻片子里一样,离不开机器人的话题,我们操作逃亡的就是一个意外觉醒的机器人。我们要做的就是无尽的逃亡。边境传奇是一款横版设计的游戏,虽然游戏玩法和画面都没有太过值得称赞的地方,但整体的无明显短板让它在玩腻了其他跑酷游戏的时候还是可以调节一下口味的。尤其是很多跑酷设计,诸如二连跳和冲击等还是为游戏增添了一定的乐趣。总结:跑酷最不缺的就是佳作看完10款跑酷游戏大推荐,你可能最大的感受就是我们绝对不缺优秀的跑酷游戏,至少在现在iOS平台可以这么说。EA、动视、SEGA都有产品推出。而且其他团队推出的游戏也同样值得试玩,综合来看,如果你是跑酷游戏爱好者还是有很多选择的。不过就目前来看,跑酷游戏的缺点在于目前很多都大同小异,差异化不明显。不知道未来会不会有团队推出一款跑酷游戏,同时给人耳目一新的感觉。
[责任编辑:leizou]
还能输入140字
还能输入140字
Copyright & 1998 - 2017 Tencent. All Rights Reserved}

我要回帖

更多关于 华为watch ios玩法 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信