当前位置: 首页 > news >正文

(NO.00004)iOS实现打砖块游戏(八):游戏中小球与砖块的碰撞

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处.
如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;)


现在回到GameScene.m中,我们所有的碰撞处理就放在该类中.我们首先要搞清楚什么会和什么碰撞.就目前来说,我们先来实现2中碰撞:小球和砖块的碰撞,以及小球和反弹棒的碰撞.

小球和砖块的碰撞:碰撞开始

我们知道一般物理引擎对于碰撞的处理不是一蹴而就的,它分为多个阶段.在Chipmunk中将碰撞按照时间的前后分为开始和后续两个部分;不是在所有的碰撞处理中都要关注这2个方法,一般只要关注开始碰撞的部分就可以了.但是在小球和砖块碰撞的处理中,我们还要关注后续的部分,因为有些代码不可以放在碰撞的开始部分.下面我们先来看看碰撞开始回调代码是如何写的:

-(BOOL)ccPhysicsCollisionBegin:(CCPhysicsCollisionPair *)pair ball:(CCNode *)ball brick:(CCNode *)brick{[_userInterface updateHitsLabel:[NSString stringWithFormat:@"Hits:%d",++_hits]];_score += ((Brick*)brick).value * _scoreRatio;if (_scoreRatio > 1) {[self updateMsgLabel:[NSString stringWithFormat:@"Score X %d",_scoreRatio]];}//小球没连续碰撞一次砖块,得分比率都会翻倍_scoreRatio *= 2;[_userInterface updateScoreLabel:[NSString stringWithFormat:@"得分:%d",_score]];[brick removeFromParent];@synchronized(self){[_level removeFromBricks:brick];}return YES;
}

代码不长,首先更新了游戏场景中的撞击计数,然后按不同砖块的分值更新玩家的得分,然后将砖块从场景中删除.注意,最后调用了我们之前在Level类中实现的removeFromBricks方法,因为我们必须要更新关卡的数组.

小球和砖块的碰撞:碰撞结束

我们希望在小球与砖块碰撞时增加它的反弹力,所以我们要调整小球的力矩,而调整物理对象的力矩不能再CollisionBegin中完成,否则物理引擎会抱怨了 ;[ ,我们自然将其放到碰撞结束部分中:

-(BOOL)ccPhysicsCollisionPreSolve:(CCPhysicsCollisionPair *)pair ball:(CCNode *)ballbrick:(CCNode *)brick{CGPoint velocity = ball.physicsBody.velocity;//略微增加小球的力矩[ball.physicsBody applyImpulse:ccpMult(velocity, 1.00005)];return YES;
}

注意我增加了一个特别微小的力矩值,因为力矩会在多次碰撞后快速累积,很快就会变得非常大,毕竟你也不想看到小球经过几次反弹后超过光速吧 ;)


http://www.taodudu.cc/news/show-854184.html

相关文章:

  • 【强训笔记】day18
  • 互联网搞钱大变天,这有几条活路
  • 【八大排序算法】插入排序、希尔排序、选择排序、堆排序、冒泡排序、快速排序、归并排序、计数排序
  • 使用Docker创建verdaccio私服
  • 5.12学习总结
  • 软件测试的分类
  • Swift 数组、字典
  • NavigationBar 渐隐效果
  • [数据结构]合并有序数组
  • spring BeanFactory加载xml配置文件示例
  • nginx location配置详解
  • 三星1TB硬盘MM804RS不识别加电磁头打盘敲盘异响不识别开盘恢复数据
  • Zookeeper Learning
  • 浑浑噩噩工作已多年
  • log4j+logback+slf4j+commons-logging的关系与调试
  • 使用 rem 实现 适配各种屏幕布局
  • 设计模式Adapter模式的五分钟
  • oracle的SCN和Checkpoint_Change#的关系
  • A problem while linking c++ to python
  • 几大基础算法
  • POPTEST学员就业面试题目!!!!!
  • 【自定义控件】自定义属性
  • 我的Git使用-资料查询,名博笔记
  • firefox-Developer开发者站点——关于Object.create()新方法的介绍
  • SharePoint 使用脚本为表单绑定事件
  • 解决Cannot change version of project facet Dynamic Web M
  • Github博客地址
  • c language compile process.
  • 阅读总结:如何在生产中成功运用Docker
  • [搜索]Trie树的实现
  • 老李分享:接口测试之jmeter
  • maven远程发布jar
  • GPRS模块AT呼叫控制命令
  • hadoop datanode启动失败
  • CentOS6.5下用yum安装 git .
  • 读博文学Android