新普金娱乐网址


自我村的故事(4)

自怀念念那年的暑假,再为反过来不来

比后门的班主任更吓人的,是无影无踪的体育老师

  • 九月 24, 2018
  • 数学
  • 没有评论

打算上iphone游戏编程,看到iteye有首好之章,所有就搬过来了。文章写的没错。

 原文链接:http://o0o0o0o.iteye.com/blog/649331

世家吓,我是刺鸡

 英文原文链接:http://www.raywenderlich.com/352/how-to-make-a-simple-iphone-game-with-cocos2d-tutorial

就是自个儿之第  16 个故事

 

亲,你真棒

立马无异于到家接触到Cocos2D支,在其的官网上见到Ray
Wenderlic写的有关cocos2d出之文章,感觉写的死好,翻译了转。
原稿链接地址大家可以点看到作者的再次多内容

平节约课40分钟即酱没了

首任翻译文章,望各位关照,想说的讲话在作者的章中也产生发挥,就一直开始吧

当及时40渡过的高温气候 

娱截图
 
数学 1
事例下载: 数学 2
Cocos2DSimpleGame.zip
(776 K) 下充斥次数:348

而这节体育课是长跑考试

     
Cocos2D是iPhone开发被一个特别有效之堆栈,它可以吃你在开创好的iPhone游戏时省去成千上万底时日。它富有许多的功力,比如sprite(精灵)扶持,非常坏的图纸效果,动画效果,物理库,音频引擎等等。

君还会见想数学老师消失也

     
我是一个Cocos2D支之初手,尽管发生多得力之课程来介绍如何开始运用Cocos2D支出,但自莫可知找到一个学科是本身欲的那样,它可创造一个简
单但功能丰富的娱乐,这个游乐所有动画,碰撞还有音频,不欲外更多的高档功能。我最终自己好了一个简练的例证,并且以自要好之经历下写了当时首教程以
便于它于其余的初手会有因此。

八卦一发问

    
这篇教程将带你持之以恒的来打探用Cocos2D来创造一个概括的iPhone游戏的长河。你可以一步步之以学科来,也说不定超越了直接打文章的末尾来下充斥例子工程。当然,里边会发生ninjas(忍者)

下载和安装Cocos2D

小儿形成的思索一贯,有无发出局限过您的眼界?

    你得从 the
Cocos2D Google Code page下载Cocos2D,现在底风行版本是0.99.0-final(这吗是立篇教程使用的)。 

 

    在您下充斥了代码后,你应当设置有用之工模板。打开Terminal
window(终端窗口),找到下载的Cocos2D所当的目,输入下面的指令:./install_template.sh。
假定您的XCode不是安在默认的目下面(比如说你的机械上面可能安装了大多单版本的SDK),你可以于设置脚本里边手工的丰富一个参数。(译者注,我未曾尝试过,试过的大妈好吃指明一下,17楼写清楚了,
谢谢17楼的唤起)

Hello, Cocos2D

      让咱们初步来用刚刚安装的Cocos2D工程模板来树立并运行一个大概的Hello
World 工程。启动XCode ,选中 cocos2d-0.99.0
Applications模板创建一个初的Cocos2D工,给工程命名为“Cocos2DSimpleGame

 

”. 
 
数学 3
继承编译并运行该工程。如果一切正常,你以张下图:

数学 4

    
Cocos2D吃集体到”scenes”(场景)的概念被,有硌类似于游戏受的”levels”(等级)或是”screens”(屏幕).比如你待发一个现象来啊打初始化菜单,一个气象吧戏的第一动作,一个状况也玩乐了。 

 

 

    
在情景中,你只要来诸多的图层(就如Photoshop里边的平),图层可能含多只(nodes)结点,比如sprites(精灵),labels(标签),menus(菜单)及任何。当然结点也带有其他的结点(比如,一个敏感可以有一个子精灵)。

    
在这个事例工程中,你得视出一个观-HelloWorldScene,我们啊拿当其里面开始实现我们的游乐。继续打开源文件,你晤面相于init这
只章程吃,它进入了一个label来当景中展示”Hello
World”。我们且放入一个聪明伶俐来替代它。
 
加上一个灵动

     在丰富灵动之前,我们需要将以的图样。你得团结创建,或者是故Ray
Wenderlich妻子为是工程专门绘制的图:
a player Image
数学 5
a Projectile Image
数学 6
a Target Image
数学 7

    
当您取这些图片后,把其一直拖到XCode里边的resources文件夹里边去,一定要选中”Copy items into destination group’s folder
(if needed)”。 

   
既然我们早就起了祥和之图,我们就算设摸索有该当哪来放玩家。请留意,在Cocos2D间屏幕的左下角是坐标原点(0,0),x和y值向右侧上斗递增。因为工程是以横向模式,这象征右上比赛的坐标值是(480,
320)。

     还待留意的凡当默认状态下当我们也一个体设置position属性时,position属性是和咱们添加的灵敏的核心点关联起来的。因此若我们想把玩家精灵放置在屏幕水平方向的左边,垂直方向的中档:
position的X坐标,要装成[player sprite’s width]/2.
Position的Y坐标,要设置成[window height]/2
脚就张图可以帮忙我们更好之知道

数学 8

    
让咱们试试一下咔嚓!打开Classes文件夹选中HelloWorldScene.m,用脚的代码来代表init方法:

Cpp代码  数学 9

  1. -(id) init{   
  2.     if( (self=[super init] )) {  
  3.    
  4.         CGSize winSize = [[CCDirector sharedDirector] winSize];   
  5.         CCSprite *player = [CCSprite spriteWithFile:@”Player.png”   
  6.         rect:CGRectMake(0, 0, 27, 40)];   
  7.         player.position = ccp(player.contentSize.width/2,   
  8.                                           winSize.height/2);   
  9.        [self addChild:player];   
  10.   
  11.   }   
  12.        return self;   
  13. }   

 

     你本可以编译并运行此工程,你的机灵应该会是显示,但背景默认是黑色的。对是作品来说,白色背景会还好。在Cocos2D中,把一个图层的底背景颜色改变成一个自定义颜色的简要方法是使用CCColoredLayer这个看似。来品尝一下咔嚓。选中HelloWorldScene.h并且改变HelloWorld接口省明像下面的那么:

Cpp代码  数学 10

  1. @interface HelloWorld : CCColorLayer   

 
  
然后入选HelloWorldScene.m并针对性init方法开展一个轻的修改来把背景色改呢白。

 

Cpp代码  数学 11

  1. if( (self=[super initWithColor:ccc4(255,255,255,255)] ))   

 
     
继续编译并运行工程,你见面盼您的玩家精灵在白之背景及。噢,我们的忍者已经准备表演了。    
数学 12

移动目标

    
下面我们需要在景被上加有目标为忍者去打击。为了吃工作变的复好玩一些,我们而被这些目标活动起来-要不然没什么挑战性。我们当有些有些偏屏幕右边的地方创造有目标,并为它立动作来给她为左移动。

在init方法之前增长下面的章程:

Cpp代码  数学 13

  1. -(void)addTarget {   
  2.   
  3. CCSprite *target = [CCSprite spriteWithFile:@”Target.png”rect:CGRectMak(0, 0, 27, 40)];   
  4.   
  5. // Determine where to spawn the target along the Y axis   
  6. CGSize winSize = [[CCDirector sharedDirector] winSize];   
  7.   
  8. int minY = target.contentSize.height/2;   
  9. int maxY = winSize.height – target.contentSize.height/2;   
  10. int rangeY = maxY – minY;   
  11. int actualY = (arc4random() % rangeY) + minY;   
  12.   
  13. // Create the target slightly off-screen along the right edge,   
  14. // and along a random position along the Y axis as calculated above  
  15.    
  16. target.position = ccp(winSize.width + (target.contentSize.width/2), actualY);   
  17.   
  18. [self addChild:target];   
  19.   
  20. // Determine speed of the target   
  21. int minDuration = 2.0;   
  22. int maxDuration = 4.0;   
  23. int rangeDuration = maxDuration – minDuration;   
  24. int actualDuration = (arc4random() % rangeDuration) + minDuration;   
  25.   
  26. // Create the actions   
  27. id actionMove = [CCMoveTo actionWithDuration:actualDuration position:ccp(-target.contentSize.width/2, actualY)];   
  28.   
  29. id actionMoveDone = [CCCallFuncN actionWithTarget:self selector:@selector(spriteMoveFinished:)];   
  30.   
  31. [target runAction:[CCSequence actions:actionMove,actionMoveDone, nil]];   
  32.   
  33. }   

 

    
在此间我因为同等种详细的计来表明事情以便为事情更爱懂。第一片段我们相应理解时早就讨论了:我们举行一些简练的计算,以确定我们设创建对象,设置对象的位置,并将其以补充加玩家精灵的均等方式丰富到景被失去。

    
这里边的新因素是长动作。Cocos2D提供了许多老便利坐的逯得以就此来制造动画的走,如运动,跳跃的行,褪色的步,动画动作和重新多。在此处我们为目标下了三项动作。

     
•CCMoveTo:我们利用CCMoveTo动作来指导物体屏幕左边。请留意,我们好指定运动应采用的持续时间,在此,我们用2-4秒的任意速度。

      •CCCallFuncN:
该CCCallFuncN函数允许我们指定一个回调至我们的目标出现不时,执行操作。

      我们正在指定一个回调称为”spriteMoveFinished”我们尚无写吧

      •CCSequence:
该CCSequence动作被咱创建同多级的动作,一浅一个。这样,我们好事先实行CCMoveTo动作,一旦得实施CCCallFuncN动作。

   
下面,添加前面我们早就于CCCallFuncN动作受到已提过的回调函数。你可以addTarget函数前面添加:

 

 

Cpp代码  数学 14

  1. -(void)spriteMoveFinished:(id)sender {   
  2.   
  3.       CCSprite *sprite = (CCSprite *)sender;   
  4.       [self removeChild:sprite cleanup:YES];   
  5.   
  6. }  

  

     
该函数的目的是于面貌被移除精灵,一旦该精灵离开屏幕。这同碰十分重要,这样我们无会见就时光之延迟,有巨大底失效精灵在场面之外而内存泄漏。请留意,
还起另(更好)的法门来缓解者问题像具有可重复使用Sprite的一再组,但这个初级教程,我们正使用简易的法。

     
最后一件工作在我们运行程序前。我们得实际调用的方式来创造目标!为了为事情更发生趣点,我们叫对象就日的延持续大量底面世。我们得在Cocos2D中通过部署一个回调函数的年限调用来形成这职责。每1秒执行同样次于。因此,在init函数返回之前调用下面的函数调用。

 

Cpp代码  数学 15

  1. [self schedule:@selector(gameLogic:) interval:1.0];   

 

当今像下这样概括的兑现者回调函数:

 

Cpp代码  数学 16

  1. -(void)gameLogic:(ccTime)dt {   
  2.      [self addTarget];   
  3. }   

  

 

 
     
就是这样!所以,现在,如果您编译并运行该种,现在若当看目标愉快地以屏幕及移步:

数学 17

打子弹

     
在这,忍者希望来一部分动作-让们丰富射击吧!我们发那么些之法门来实现射击,但在这游乐受我们如果当用户点击屏幕时来开展开,从玩家射来底枪弹将本点击的大方向发展。

     
我思念就此一个CCMoveTo动作去维持工作还当初级层面上,但为了实现这个,我们得开片数学。这是以CCMoveTo要求我们不能不也子弹目的地,但
我们不能够只是利用触摸点,因为接触点仅仅意味着相对于玩家的开方向。事实上,我们盼望维持子弹通过触摸点,直到移出屏幕。
从而同样摆图来诠释是事情:
 
数学 18

据此,大家好看出,我们用起点到触摸点的X和Y方向的晃动创造了单小三角形。我们才需要为同等的比例非常三角形

  • 咱俩知晓我们用一个离开屏幕的结束点。
     
    好了,上代码。首先,我们必须使我们的交汇可以支持触摸。添加下一行到公的init方法:

 

 

Cpp代码  数学 19

  1. self.isTouchEnabled = YES;   

 

     
因为我们都为图层支持触摸,现在咱们可吸纳触摸事件的回调。因此,让咱实现ccTouchesEnded方法,只要用户就了接触该法就是见面调用,具体如下:

 

 

Cpp代码  数学 20

  1. – (void)ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {   
  2.   
  3. // Choose one of the touches to work with   
  4. UITouch *touch = [touches anyObject];   
  5. CGPoint location = [touch locationInView:[touch view]];   
  6. location = [[CCDirector sharedDirector] convertToGL:location];   
  7.   
  8. // Set up initial location of projectile   
  9. CGSize winSize = [[CCDirector sharedDirector] winSize];   
  10. CCSprite *projectile = [CCSprite spriteWithFile:@”Projectile.png” rect:CGRectMake(0, 0, 20, 20)];   
  11. projectile.position = ccp(20, winSize.height/2);   
  12.   
  13. // Determine offset of location to projectile   
  14. int offX = location.x – projectile.position.x;   
  15. int offY = location.y – projectile.position.y;   
  16.   
  17. // Bail out if we are shooting down or backwards   
  18. if (offX <= 0) return;   
  19.   
  20. // Ok to add now – we’ve double checked position   
  21. [self addChild:projectile];   
  22.   
  23. // Determine where we wish to shoot the projectile to   
  24. int realX = winSize.width + (projectile.contentSize.width/2);   
  25. float ratio = (float) offY / (float) offX;   
  26. int realY = (realX * ratio) + projectile.position.y;   
  27. CGPoint realDest = ccp(realX, realY);   
  28.   
  29. // Determine the length of how far we’re shooting   
  30. int offRealX = realX – projectile.position.x;   
  31. int offRealY = realY – projectile.position.y;   
  32. float length = sqrtf((offRealX*offRealX)+(offRealY*offRealY));   
  33. float velocity = 480/1; // 480pixels/1sec   
  34. float realMoveDuration = length/velocity;   
  35.   
  36. // Move projectile to actual endpoint   
  37. [projectile runAction:[CCSequence actions:   
  38. [CCMoveTo actionWithDuration:realMoveDuration position:realDest],   
  39. [CCCallFuncN actionWithTarget:self selector:@selector(spriteMoveFinished:)], nil]];   
  40.   
  41. }   

 

      在首先有些,我们选一个触摸点来行使,先拿走在此时此刻视图中之职,然后调用convertToGL来把坐标转化及眼前之布局。这点特别重要,因为我们现是横向模式。

     接下来我们加载子弹精灵并像往一样装初始坐标。然后,我们确定我们愿意子弹移动的位置,按照前面描述的算法,使用玩家和触摸点之间的沟通来作指导载体。

    
请注意,该算法并无完美。我们正在迫使子弹继续上扬直到在X方向上离开屏幕-即使首先以Y方向直达业已离开了屏幕!有异之不二法门来化解这,包括检查离开屏
幕的最为小尺寸,让游戏之逻辑回调核查离开屏幕的枪弹及扫除回调,而无是使回调方法,等等。但此初级教程,我们将维持原样。

     
我们尽亟需做的哪怕是规定为移动时。我们盼望,子弹会于一个稳的速率按照放方向前进,所以我们更举行片数学。我们好找有用勾股定理来算有活动的相距。记得在几乎哪里法中,这是平整,指出了一个直角三角形的边长度等两直角边的平方的及之开方。

    
一旦我们来矣离开,我们只是除以速度,以抱所欲的流年。这是盖快=距离/时间,或换句话说
时间=距离/速度。

   
剩下的政工就是装动作,就想让目标设置动作一样。编译并运行,现在你的忍者可以于前来的平挺丛目标开火了

数学 21
碰撞检测

    
所以现在我们都为shurikens满天飞了-但我们的忍者真正想只要做的是放倒一些目标。因此,让咱进入一些代码,以检测当我们的枪弹和对象的交接。

    
要做到就或多或少,我们率先使于手上之场面被重复好的跟踪目标和子弹。把以下的代码添加到你的HelloWorldScene类声明遭:

 

Cpp代码  数学 22

  1. NSMutableArray *_targets;   
  2. NSMutableArray *_projectiles;   

 
于init方法被初始化这有限独数组:

 

 

Cpp代码  数学 23

  1. _targets = [[NSMutableArray alloc] init];   
  2. _projectiles = [[NSMutableArray alloc] init];   

 
俺们为应有考虑,在您的dealloc方法被清理内存:

 

Cpp代码  数学 24

  1. [ _targets release];   
  2. _targets = nil;   
  3. [ _projectiles release];   
  4. _projectiles = nil;   

 
      现在,修改你的addTarget方法,添加新目标至对象数组中连吃它装一个号以便在其后使用:

Cpp代码  数学 25

  1. target.tag = 1;   
  2. [ _targets addObject:target];   

 
    

    
还要修改你的ccTouchesEnded方法,把新子弹添加到子弹数组中叫她装一个记以便在此后采取:

 

Cpp代码  数学 26

  1. projectile.tag = 2;   
  2. [_projectiles addObject:projectile];  

 

    
最后,修改你的spriteMoveFinished方法,根据标记的差于合适的数组中移除精灵: 

Java代码  数学 27

  1. if (sprite.tag == 1) {   
  2.           // target   
  3.           [_targets removeObject:sprite];   
  4.   
  5. } else  if (sprite.tag == 2) {   
  6.           // projectile   
  7.           [_projectiles removeObject:sprite];   
  8. }  

 

 

 
     
编译并运行该品种以保证一切正常。在这时应该没什么显著的异,但今天我们来标志,我们只要落实碰撞检测。

今日在HelloWorldScene类中补充加下面的计:

Cpp代码  数学 28

  1. – (void)update:(ccTime)dt {   
  2.       NSMutableArray *projectilesToDelete = [[NSMutableArray alloc] init];   
  3.   
  4. for (CCSprite *projectile in _projectiles) {   
  5.   
  6.        CGRect projectileRect = CGRectMake( projectile.position.x -(projectile.contentSize.width/2), projectile.position.y – (projectile.contentSize.height/2), projectile.contentSize.width, projectile.contentSize.height);   
  7.   
  8. NSMutableArray *targetsToDelete = [[NSMutableArray alloc] init];   
  9.   
  10. for (CCSprite *target in _targets) {   
  11.   
  12.     CGRect targetRect = CGRectMake( target.position.x -(target.contentSize.width/2), target.position.y – (target.contentSize.height/2), target.contentSize.width, target.contentSize.height);   
  13.   
  14. if (CGRectIntersectsRect(projectileRect, targetRect)) {   
  15.   
  16.         [targetsToDelete addObject:target];   
  17.   
  18. }  
  19.    
  20. }   
  21.   
  22. for (CCSprite *target in targetsToDelete) {   
  23.         [_targets removeObject:target];   
  24.         [self removeChild:target cleanup:YES];   
  25. }   
  26.   
  27. if (targetsToDelete.count > 0) {   
  28.        [projectilesToDelete addObject:projectile];  
  29. }   
  30.   
  31. [targetsToDelete release];   
  32.   
  33. }   
  34.   
  35.   
  36. for (CCSprite *projectile in projectilesToDelete) {   
  37.           [_projectiles removeObject:projectile];   
  38.           [self removeChild:projectile cleanup:YES];  
  39. }   
  40.   
  41. [projectilesToDelete release];   
  42.   
  43. }   

 

 

    以上应该非常了解了。我们只是经过子弹和对象往往组,按照其的分界框创建相应的矩形,并动用CGRectIntersectsRect方法来检查交叉。

    如果发现出,我们于景以及数组中拿它移除。请留意,我们是将这些目标上加至一个toDelete数组中,因为若免可知当一个方迭代的数组中除去一个对象。同样,有再度多的最佳办法来兑现这种事情,但自己使用了此简单的不二法门

     
在公准备而运行前您一味需要开同样桩事-通过添加底下的代码到init方法吃失去安排方面的点子尽可能多之运行

   

Cpp代码  数学 29

  1. [self schedule:@selector(update:)];   

 
于其编译并运行,现在当您的枪弹和对象碰撞时它就会消失!

末了的润色

     
我们十分类似拥有一个实惠之(但非常简单)的戏了。我们一味需要加上一些响效果以及音乐(因为什么类型的游戏没有音乐的!)和有些简约的游玩逻辑。

     如果您一直关注自我之blog series on audio programming for the
iPhoneblog
series on audio programming for the
iPhone,关于iPhone的一律多级音频编程博客,你见面非常高兴地领略,对于Cocos2D开发者来说,在耍中落实基本的音效果是多的简练。

 

第一步:

     
 拖动一些背景音乐和一个打声音效果及你的resources文件夹着。随意行使
cool background music I made 数学 30
background-music-aac.caf.zip
(252 K) 下充斥次数:52
或是 awesome pew-pew sound effect 数学 31
pew-pew-lei.caf.zip
(40 K) 下充斥次数:42 ,或者做而协调之。

然后:

       添加底的代码到你的HelloWorldScene.m文件之头部:

Cpp代码  数学 32

  1. #import “SimpleAudioEngine.h”   

 
     在公的init方法,像下的代码所示启动背景音乐:

 

Cpp代码  数学 33

  1. [[SimpleAudioEngine sharedEngine]playBackgroundMusic:@”background-music-aac.caf”];   

 
0.99-final update:(关于0.99-final更新):

       看起在0.99-final版本中生出一个微细bug,背景音乐只能播放一糟(而其以应循环)-要么是它们的错要么就是本人打错了。对于一个变通方法,请参考本文结尾的眼光。
关于  0.99-final版本中发生一个小小的bug,

当 CDAudioManager.m
的第72行在以下代码,  可以解决背景音乐只能播放一蹩脚(而其本应有循环)

 
- (void)setNumberOfLoops:(NSInteger)theNumberOfLoops 
{
    numberOfLoops = theNumberOfLoops;
    audioSourcePlayer.numberOfLoops = theNumberOfLoops;
}
 

于你的ccTouchesEnded方法吃播放下面的声效果:

Cpp代码  数学 34

  1. [[SimpleAudioEngine sharedEngine] playEffect:@”pew-pew-lei.caf”];   

 
     
现在,让我们创建一个新的场景,将当咱们的“你赢了”,或“你输”的指令。点击Classes文件夹,进入File\New
File,并选Objective-C
class,并确定了NSObject类被入选。单击Next,然后输入GameOverScene作为文件称,并包“Also
create GameOverScene.h”被入选。

下一场据此脚的代码来代表GameOverScene.h中的情:

Cpp代码  数学 35

  1. #import “cocos2d.h”   
  2.   
  3. @interface GameOverLayer : CCColorLayer {   
  4.   
  5.     CCLabel *_label;   
  6.   
  7. }   
  8. @property (nonatomic, retain) CCLabel *label;   
  9.   
  10. @end   
  11.   
  12.   
  13. @interface GameOverScene : CCScene {   
  14.     GameOverLayer *_layer;   
  15. }   
  16. @property (nonatomic, retain) GameOverLayer *layer;   
  17. @end   

 
更就此脚的代码来顶替GameOverScene.m中的内容

Cpp代码  数学 36

  1. #import “GameOverScene.h”   
  2. #import “HelloWorldScene.h”   
  3.   
  4. @implementation GameOverScene   
  5. @synthesize layer = _layer;   
  6.   
  7. – (id)init {   
  8.   
  9. if ((self = [super init])) {   
  10. self.layer = [GameOverLayer node];   
  11. [self addChild:_layer];   
  12.   
  13. }   
  14. return self;   
  15.   
  16. }   
  17.   
  18. – (void)dealloc {   
  19.       [ _layer release];   
  20.         _layer = nil;   
  21.       [super dealloc];   
  22. }   
  23.   
  24. @end   
  25.   
  26. @implementation GameOverLayer   
  27.   
  28. @synthesize label = _label;   
  29.   
  30. -(id) init {   
  31.   
  32. if( (self=[super initWithColor:ccc4(255,255,255,255)] )) {   
  33.   
  34. CGSize winSize = [[CCDirector sharedDirector] winSize];   
  35. self.label = [CCLabel labelWithString:@”” fontName:@”Arial” fontSize:32];   
  36. _label.color = ccc3(0,0,0);   
  37. _label.position = ccp(winSize.width/2, winSize.height/2);   
  38. [self addChild:_label];   
  39.   
  40. [self runAction:[CCSequence actions: [CCDelayTime actionWithDuration:3], [CCCallFunc actionWithTarget:self selector:@selector(gameOverDone)], nil]];   
  41.   
  42. }   
  43.     return self;   
  44.   
  45. }   
  46.   
  47. – (void)gameOverDone {   
  48.   
  49. [[CCDirector sharedDirector] replaceScene:[HelloWorld scene]];   
  50.   
  51. }   
  52.   
  53. – (void)dealloc {   
  54.           [_label release];   
  55.            _label = nil;   
  56.           [super dealloc];   
  57. }   
  58.   
  59. @end   

 

      请小心,这里发出有限单例外的对象:一个光景(scene)和一个图层(layer)。场景可以分包多独图层,尽管以是例子是它们才发生一个。图层里边只在屏幕中心放了一个标签,并配置了一个3秒中的连通,然后回到到HelloWorld场景中。

 
     
最后,让咱们抬高一些要命基本的嬉戏逻辑。首先,让咱跟玩家破坏的靶子。添加一个成员变量到你的HelloWorldScene.h中
HelloWorld类如下:

 

Cpp代码  数学 37

  1. int _projectilesDestroyed;    

在HelloWorldScene.m中,添加GameOverScene类的声明:

 

Cpp代码  数学 38

  1. #import “GameOverScene.h”  

  

    
在update方法中removeChile:target:后面的targetsToDelete循环中多计数并检讨获胜条件

Cpp代码  数学 39

  1. _projectilesDestroyed++;   
  2.   
  3. if (_projectilesDestroyed > 30) {   
  4.   
  5. GameOverScene *gameOverScene = [GameOverScene node];   
  6. [gameOverScene.layer.label setString:@”You Win!”];   
  7. [[CCDirector sharedDirector] replaceScene:gameOverScene];   
  8.   
  9. }   

 

 

    
最后我们这么来确定,即使只有来一个靶过去了,你就是败了。修改spriteMoveFinished方法,在removeChild:sprite:方法的背后的tag
== 1条件里添加下面的代码:

 

Java代码  数学 40

  1. GameOverScene *gameOverScene = [GameOverScene node];   
  2. [gameOverScene.layer.label setString:@”You Lose :[“];   
  3. [[CCDirector sharedDirector] replaceScene:gameOverScene];   

 

后续编译并运行该型,这样你产生了羸和战败的判定标准并会于相当的时见到游戏结束之气象。

 

相关文章

No Comments, Be The First!
近期评论
    分类目录
    功能
    网站地图xml地图