(NO.00002)iOS游戏精灵战争雏形(十一)

来源:互联网 时间:1970-01-01

为了在子弹触碰到目标时做一些事情,我们必须要设置碰撞回调.

首先在MainScene.h的类接口中添加碰撞协议:

[code]@interface MainScene : CCNode <CCPhysicsCollisionDelegate>@end


接下来在类初始化中设置碰撞代理:

[code] _physics.collisionDelegate = self;


然后就可以设置碰撞回调函数了.至于其中的具体规则不是短短几句话能说清楚的,现在只要知道,我们可以根据不同的碰撞类来分别处理碰撞,即可以设置多个碰撞回调函数.

回到SpriteBuilder中分别设置Player和Bullet的碰撞类型为player和bullet:



切换回Xcode,在MainScene.m中添加如下碰撞回调方法:

[code]-(BOOL)ccPhysicsCollisionBegin:(CCPhysicsCollisionPair *)pair player:(CCNode *)player bullet:(CCNode *)bullet{ bullet.visible = NO; return YES;}


代码很简单,在碰撞时将子弹不可见,返回YES表示发生碰撞,否则不发生碰撞行为.按道理说应该将子弹不可见的代码放到碰撞之后,应该放到ccPhysicsCollisionPreSolve回调中,不过这里也不影响实际效果.返回NO和物理对象为传感器的行为差不多,后面遇到传感器对象时再谈.

现在到了让精灵轰击子弹的时候了,我们简单的每隔2秒向地方精灵发射一颗子弹,在didLoadFromCCB方法中添加如下一句:

[code] [self schedule:@selector(autoShoot:) interval:2];


添加autoShoot方法:

[code]-(void)autoShoot:(CCTime)delta{ [self shoot:_sprite1 target:_sprite2.position];}


其实有些童鞋可能会认为发射子弹方法应该成为Player的方法而不是MainScene的方法.这样说是有道理的,但是这必须解决子弹在哪里的问题.是放在MainScene中,还是放在每个player中?这个涉及到模式的问题,在这里不展开说了.

编译运行,效果如下:



请暂时无视爆炸的特效,那将是下一篇中的故事 ;)



相关阅读:
Top