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

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

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


前一篇博文介绍了物理对象中小球与砖块的碰撞处理,在这一篇中我们再来看一下小球与反弹棒碰撞发生的那点事 ;)

小球与反弹棒开始碰撞

同样我们在碰撞中也要调整小球的力矩,所以也要分开处理,首先是碰撞开始时的处理:

-(BOOL)ccPhysicsCollisionBegin:(CCPhysicsCollisionPair *)pair ball:(CCNode *)ball
                                                                stick:(CCNode *)stick{
    //一旦小球碰到反弹棒恢复得分比率
    _scoreRatio = 1;
    return YES;
}

前面我们实现了当小球多次连续碰撞砖块时会增加得分比率,所以这里我们在小球碰撞到反弹棒时,要将得分比率重新复位.这就是他要干的全部工作.其实可以将其放到结束碰撞中去,然后完全去掉开始碰撞的处理.

小球与反弹棒结束碰撞

接下来是碰撞结束的处理:

-(BOOL)ccPhysicsCollisionPreSolve:(CCPhysicsCollisionPair *)pair ball:(CCNode *)ball stick:(CCNode *)stick{
    CCPhysicsBody *phyBall = ball.physicsBody;

    CGPoint velocity = phyBall.velocity;

    NSInteger neg = arc4random_uniform(2);
    NSInteger rnd = arc4random_uniform(500);

    //当小球碰到反弹棒时,给小球一个随机冲力
    if (neg == 0) {
        velocity.x += rnd;
    }else
        velocity.x -= rnd;

    [phyBall applyImpulse:ccpMult(velocity, 1.3)];
    return YES;
}

方法代码不长,但涉及到一些物理对象的操作,有必要详细说一下:

首先取得小球的物理对象,然后随机生成小球的一个冲力,然后将冲力应用到小球上.That’s all!

反弹棒的移动

我们现在要实现反弹棒的移动功能,在GameScene.m中,添加移动触摸方法:

-(void)touchBegan:(CCTouch *)touch withEvent:(CCTouchEvent *)event{
    //CCLOG(@"touch began from GameScene");
}


-(void)touchMoved:(CCTouch *)touch withEvent:(CCTouchEvent *)event{
    CGPoint location = [[CCDirector sharedDirector] convertTouchToGL:touch];

    @synchronized(self){
        [self.stickInGameScene moveStickTo:location];
    }
}

编译运行app,现在游戏效果如下:

这里写图片描述

好了游戏初步有了一定可玩性,下一篇中我们回到关卡中让它不断生成更多的砖块. 下篇见 ;)

相关文章:

  • Swift 设置navigation左右两侧按钮
  • JavaEE异常
  • jQuery根据元素值删除数组元素的方法
  • 简单的原生ajax
  • restful命名
  • android Lifecycle源码分析--源码阅读100天(1)
  • Java-TreeSet的用法-入门
  • (四)鸿鹄云架构一服务注册中心
  • 占位子,考完试写
  • golang学习笔记 ---命令行参数
  • 森林病虫防治系统 (结束)
  • Linux内核中进程上下文、中断上下文、原子上下文、用户上下文的理解【转】...
  • 计算机
  • lucene4.7学习总结
  • python头部 #!/usr/bin/env python
  • Babel配置的不完全指南
  • ES6核心特性
  • Fabric架构演变之路
  • IE报vuex requires a Promise polyfill in this browser问题解决
  • Javascript Math对象和Date对象常用方法详解
  • REST架构的思考
  • Spring-boot 启动时碰到的错误
  • Spring声明式事务管理之一:五大属性分析
  • 初识 beanstalkd
  • 基于组件的设计工作流与界面抽象
  • 理清楚Vue的结构
  • 让你的分享飞起来——极光推出社会化分享组件
  • 三分钟教你同步 Visual Studio Code 设置
  • 使用API自动生成工具优化前端工作流
  • 世界上最简单的无等待算法(getAndIncrement)
  • 数据结构java版之冒泡排序及优化
  • 通过npm或yarn自动生成vue组件
  • 小试R空间处理新库sf
  • 用jQuery怎么做到前后端分离
  • 在 Chrome DevTools 中调试 JavaScript 入门
  • ​一文看懂数据清洗:缺失值、异常值和重复值的处理
  • $.type 怎么精确判断对象类型的 --(源码学习2)
  • (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (android 地图实战开发)3 在地图上显示当前位置和自定义银行位置
  • (C#)Windows Shell 外壳编程系列4 - 上下文菜单(iContextMenu)(二)嵌入菜单和执行命令...
  • (C语言)输入自定义个数的整数,打印出最大值和最小值
  • (pojstep1.3.1)1017(构造法模拟)
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (二)hibernate配置管理
  • (二)PySpark3:SparkSQL编程
  • (附源码)springboot码头作业管理系统 毕业设计 341654
  • (更新)A股上市公司华证ESG评级得分稳健性校验ESG得分年均值中位数(2009-2023年.12)
  • (七)c52学习之旅-中断
  • (一)使用IDEA创建Maven项目和Maven使用入门(配图详解)
  • (译)2019年前端性能优化清单 — 下篇
  • (转)socket Aio demo
  • (转)母版页和相对路径
  • ./indexer: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object fil
  • .360、.halo勒索病毒的最新威胁:如何恢复您的数据?
  • .bat批处理(四):路径相关%cd%和%~dp0的区别