(NO.00004)iOS实现打砖块游戏(十六):导弹发射道具的实现(下)
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处.
如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;)
上一篇我们完成了导弹道具相关的道具制作,本篇中我们来完成其实现代码
首先我们在Star.m的spawnStar方法中添加如下代码:
case brkColorPoolBlue:
star = [Star starWithType:starTypeStickShoot];
break;
接着打开GameScene.m文件,在星星和反弹棒的碰撞处理方法中添加如下处理分支:
case starTypeStickShoot:
@synchronized(self){
[Star doStickShootWork];
}
break;
现在重新回到Star.m中,添加doStickShootWork方法:
+(void)doStickShootWork{
GameScene *gameScene = [GameScene sharedGameScene];
if (gameScene.isStickShooting) {
return;
}
gameScene.isStickShooting = YES;
[gameScene scheduleBlock:^(CCTimer *timer){
@synchronized(gameScene){
gameScene.isStickShooting = NO;
}
} delay:10];
}
该方法很简单,首先如果反弹棒已处在射击状态则直接返回.否则将反弹棒设置为射击状态,然后在10秒后取消射击状态.
再次回到GameScene.m中,添加设置射击状态的方法:
-(void)setIsStickShooting:(BOOL)isStickShooting{
_isStickShooting = isStickShooting;
if (_gunTop) {
_gunTop.visible = _isStickShooting;
}
}
在初始化方法的最下面中添加如下一行:
[self schedule:@selector(autoShoot) interval:1];
游戏逻辑每隔1秒钟调用一次autoShoot方法来实现自动射击,那么该方法做了什么事呢?我们来看一下:
-(void)autoShoot{
@synchronized(self){
if (self.isStickShooting && _gunTop && _gunTop.visible) {
[Star shoot:_gunTop.position];
}
}
}
貌似很简单,方法首先判断当前反弹棒是否处在射击状态,并且设计炮管已初始化且可见.如果这些条件都满足则调用Star类中的shoot方法,并向方法传递了当前炮管位置的坐标.
导弹是可以摧毁砖块的,所以还要实现一个碰撞处理方法:
-(BOOL)ccPhysicsCollisionBegin:(CCPhysicsCollisionPair *)pair bullet:(CCNode *)bullet
brick:(CCNode *)brick{
@synchronized(self){
CCSprite *bulletSp = (CCSprite*)bullet;
[bullet removeFromParent];
[_userInterface updateHitsLabel:[NSString stringWithFormat:@"Hits:%d",++_hits]];
_score += ((Brick*)brick).value * _scoreRatio;
if (_scoreRatio > 1) {
[self updateMsgLabel:[NSString stringWithFormat:@"Score X %d",_scoreRatio]];
}
[_userInterface updateScoreLabel:[NSString stringWithFormat:@"得分:%d",_score]];
[Star spawnStar:(Brick*)brick];
[brick removeFromParent];
[_level removeFromBricks:brick];
}
return YES;
}
代码很简单,大家可以自行理解.
最后我们就来实现Star的+shoot方法:
+(void)shoot:(CGPoint)startPos{
GameScene *gameScene = [GameScene sharedGameScene];
CCPhysicsNode *physWorld = gameScene.physicsWorld;
@synchronized(gameScene){
CGSize viewSize = [CCDirector sharedDirector].viewSize;
CCSprite *bullet = (CCSprite*)[CCBReader load:@"Elements/Bullet"];
bullet.position = startPos;
[physWorld addChild:bullet];
CCActionMoveTo *move = [CCActionMoveTo actionWithDuration:2 position:ccp(bullet.position.x,
viewSize.height)];
CCActionCallBlock *blk = [CCActionCallBlock actionWithBlock:^{
[bullet removeFromParent];
}];
CCActionSequence *seq = [CCActionSequence actions:move,blk,nil];
[bullet runAction:seq];
}
}
方法主要逻辑如下:
- 取得游戏场景对象中的物理世界对象
- 初始化导弹动画精灵对象
- 在导弹对象上运行向前飞行的动作,直到屏幕最上端
- 在到达屏幕最上端后,将导弹对象删除
编译运行游戏,可以看到效果如下:
当然球掉落之后,应该游戏结束了,导弹不用再发射了,在实际游戏中这是一个需要修改的地方.
好了,我们在本系列打砖块游戏中实现了不少东西,其实限于时间原因很多地方都没有扩展和完善.毕竟一个真实的游戏想要吸引玩家的眼球和手指还有很多部分需要修改.
但让我们暂时在这里打住,向下一个游戏目标前进吧.
下一系列<<愤怒的炸弹>>的博文中再见吧 ;)
(本系列完)
(NO.00004)iOS实现打砖块游戏(十六):导弹发射道具的实现(下)的更多相关文章
- (NO.00004)iOS实现打砖块游戏(十五):导弹发射道具的实现(上)
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 上一篇中我们实现了3球道具,但是好像还是不过瘾,如果能让反弹棒更 ...
- (NO.00004)iOS实现打砖块游戏(十四):3球道具的实现
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 反弹棒变化道具实现前面已经介绍过了,我们下面可以在小球上做些文章 ...
- (NO.00004)iOS实现打砖块游戏(十二):伸缩自如,我是如意金箍棒(上)!
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 通用的星星类已经完成了,下面我们来实现具体的变长和缩短道具. 变 ...
- (NO.00004)iOS实现打砖块游戏(十):砖块!更多的砖块!
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 到目前为止游戏基本可玩,但是砖块数量是不变的,等玩家打光所有的砖 ...
- (NO.00004)iOS实现打砖块游戏(六):反弹棒类
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 打砖块游戏另一个要素是反弹棒,我们在这篇类来实现反弹棒类. 创建 ...
- 从零开始学ios开发(十六):Navigation Controllers and Table Views(下)
终于进行到下了,这是关于Navigation Controllers和Table Views的最后一个例子,稍微复杂了一点,但也仅仅是复杂而已,难度不大,我们开始吧. 如果没有上一篇的代码,可以从这里 ...
- (NO.00004)iOS实现打砖块游戏(一):素材的制作
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 本系列来实现一个儿时就很喜欢的打砖块游戏,我记得以前红白机上有一 ...
- (NO.00004)iOS实现打砖块游戏(十三):伸缩自如,我是如意金箍棒(下)!
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 准备缩短反弹棒素材 和上一篇类似,我们如法炮制一张缩短后反弹棒的 ...
- (NO.00004)iOS实现打砖块游戏(十一):"一闪一闪亮晶晶,我们都是小星星"
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 现在一个基本的游戏逻辑已经搭建好了,但是感觉还是缺点什么呢? 蠢 ...
随机推荐
- Python中byte与str
原文传送门:请点击 现在计算机中,在内存中采用unicode编码方式. 可以看到上图中,字节型数据t并没有像想象中的一样显示0,1字符串.显示仍然是b,这是因为t是采用utf-8来编码,而utf-8与 ...
- C语言第二次作业——顺序结构
一.改错题 1.输出带框文字:在屏幕上输出以下3行信息. (1)源程序 对程序进行编译,发现错误信息1 错误原因:stdio拼写错误 改正方法:将stdio正确拼写 对程序进行编译,发现错误信息2 错 ...
- 关于 form表单 嵌套问题的解决方案
我们经常是这样嵌套的: <form id="formId1" action="" method="post"> //表单1 &l ...
- jquery常用函数
.text() //获得或更改元素文本: .html() //获得或更改元素标签: .val() //获得或更改input值: .css() //获得或更改元素样式: .click() //点击触发事 ...
- SpringBoot学习之启动探究
SpringApplication是SpringBoot的启动程序,我们通过它的run方法可以快速启动一个SpringBoot应用.可是这里面到底发生了什么?它是处于什么样的机制简化我们程序启动的?接 ...
- Python Selenium 之数据驱动测试
数据驱动模式的测试好处相比普通模式的测试就显而易见了吧!使用数据驱动的模式,可以根据业务分解测试数据,只需定义变量,使用外部或者自定义的数据使其参数化,从而避免了使用之前测试脚本中固定的数据.可以将测 ...
- 使用ajax上传图片,支持图片即时浏览,支持js图片压缩后上传给服务器
使用ajax上传图片,支持图片即时浏览,支持js图片压缩后上传给服务器 ajax上传主要使用了 var reader = new FileReader() 此方法 js图片压缩主要是利用canvas进 ...
- 剑指架构师系列-ftp服务器
1.安装FTP 我们在开发项目时,肯定需要专门的一台ftp服务器来存在上传的静态资源,今天我们就在CentOS下搭建一个ftp服务器. 1.安装vsftpd组件,安装完后,有/etc/vsftpd/v ...
- SimpleDateFormat中parse和format的区别
parse()返回的是一个Date类型数据,format返回的是一个StringBuffer类型的数据 //SimpleDateFormat中的parse方法可以 //把String型的字符串转换成特 ...
- 手势监听GestureDetector 案例
以下只做长按和甩出(用户按下朝某一方向甩动手指)案例 OnGestureListener可以查看到更多的手势事件 案例 package com.qf.mobliesafe.activity; impo ...