本篇是swift版本的弹幕,原理同我的上篇OC版本的弹幕检测

ios 弹幕 网上找了好多弹幕demo,发现很多都会重叠,体验很不好。所以在参考部分网上弹幕源码的基础上,遂有了本篇弹幕碰撞检测。

本弹幕优点如下(这个是最初版本,以后慢慢优化):

一. 可以很好的避免弹幕间的碰撞

其实针对碰撞,主要解决水平运动时,前后两个弹幕不碰撞就可以了。

所以我们主要针对同一个轨道上,前后弹幕是否碰撞展开研究,就可以了。

倘若刚刚生产的弹幕,在同一轨道上会发生碰撞,我们就选择下一个轨道再进行判断,直到找到不发生碰撞的轨道。(此处可能会有极少弹幕丢失,以后再优化)

当前一个弹幕的运行时间变成0时(此处我们默认每一个弹幕的运行时间是5s),也就说明前一个弹幕已经移动到屏幕外面了,后一个弹幕可以发射了。 2.当前一个弹幕的运行时间大于0时,我们判断前一个弹幕是否完全进入屏幕,倘如完全进入屏幕的话,接着判断后一个弹幕是否能追得上前一个弹幕(是否发生碰撞)。

3.当前一个弹幕的运行时间大于0时,我们判断前一个弹幕是否完全进入屏幕,倘如未完全进入屏幕的话,判断下一个轨道(从1开始)。 具体判断代码如下: 我们假定弹幕的运行时间是5s,弹幕向前走一步,时间减少0.2s。

主要逻辑代码如下:

    // MARK: 弹幕碰撞检测 YES:会碰撞  NO:不会碰撞func judgeHitWithPreDanmaku(_ preDanmaku : DanmuView , _ danmaku : DanmuView) -> Bool {if preDanmaku.remainingTime != nil {//1.前一个弹幕是否还在移动?【显示时间每次递减0.2s】if (preDanmaku.remainingTime! <= Float(0.0)) {return false; //说明前一个弹幕已经移出了屏幕,不会碰撞}//屏幕的宽度let width = self.bounds.width;//5s显示时间下的弹幕移动速度let preDanmakuSpeed = (width + (preDanmaku.size?.width)!) / CGFloat(Duration);//2.已经移入屏幕的距离与弹幕要移动的总距离比较if (preDanmakuSpeed * (CGFloat(Duration) -  CGFloat(preDanmaku.remainingTime!)) < (preDanmaku.size?.width)!) {return true; //说明弹幕未完全进入屏幕,只有一部分进入了屏幕,会发生碰撞}//3.当前弹幕能否追得上前一个弹幕?let currentDanmakuSpeed = (width + (danmaku.size?.width)!) / CGFloat(Duration);if (currentDanmakuSpeed * CGFloat(preDanmaku.remainingTime!) > width) {return true; //可以追得上,会发生碰撞}return false;}return false;}

swiftdemo截图:

swift 弹幕碰撞检测相关推荐

  1. Swift游戏开发实战教程(大学霸内部资料)

    Swift游戏开发实战教程(大学霸内部资料) 试读下载地址:http://pan.baidu.com/s/1sj7DvQH 介绍:本教程是国内第一本Swift游戏开发专向资料. 本教程详细讲解记忆配对 ...

  2. java游戏+弹幕_JAVA 弹幕小游戏 1.0版本

    java 弹幕小游戏 最初版本 最近在学习javaSE,根据b站视频老师的讲解,也参考了他的代码,做了一个弹幕小游戏,也增添了一些自己的代码进去,因为只是最简单的游戏体,以后会慢慢做完整,所以如果有错 ...

  3. 谁能给我讲讲原理——视频弹幕游戏!!

    舍友在一个叫BliBli的视频网站上找到这样一个视频弹幕游戏,说实话我当时一看真的惊呆了. 从来没有见过这种能够互动的.充满游戏性的视频,用户WASD可以控制飞机移动躲避字幕,撞到字幕左上角死亡次数还 ...

  4. java 弹幕游戏_JAVA 弹幕小游戏 1.0版本

    java 弹幕小游戏 最初版本 最近在学习javaSE,根据b站视频老师的讲解,也参考了他的代码,做了一个弹幕小游戏,也增添了一些自己的代码进去,因为只是最简单的游戏体,以后会慢慢做完整,所以如果有错 ...

  5. Muti-Barrage 一个多功能的Android弹幕库

    前言 过去几个星期每天下班后除了看视频学习就是写弹幕库了,想法来源于去年看到QQ空间里面的支持弹幕的图片预览,心血来潮就想实现一个,最终完成了Muti-Barrage, 先看效果: 1. 单视图弹幕 ...

  6. 新书推荐:iOS Swift 游戏开发指南

    章节目录如下: 第 1 章 游戏的设计 - 9 1.1 设计游戏引擎 -9 1.2 创建基于继承的设计-10 1.3 创建基于组件的设计-12 1.4 用 GameplayKit 创建基于组件的游戏设 ...

  7. 游戏中的三角学——Sprite Kit 和 Swift 教程(1)

    原文链接 : Trigonometry for Games – Sprite Kit and Swift Tutorial: Part 1/2 原文作者 : Nick Lockwood 译文出自 : ...

  8. OC swift 一些常用第三方收集整理 (第三方集合)

    整理了Xcode好用的插件,包括OC和Swift,信息更详细和完整 下拉刷新 EGOTableViewPullRefresh– 最早的下拉刷新控件. SVPullToRefresh– 下拉刷新控件. ...

  9. Android弹幕实现现状与原理浅析

    弹幕实现对比 目前的弹幕实现方案,主要有以下几种实现方式. Android View实现 通过Android已有的控件实现布局.绘制,高效的话需要自定义缓存逻辑,复用弹幕itemView,主要是tex ...

最新文章

  1. centos6安装mysql并远程连接_Ubantu下MySQL安装、部署和远程连接
  2. 常用技巧 —— 离散化
  3. java 管理后台前台分离_系统前台后台是否应该分离(包括部署)
  4. 算法: 1和0子集合的个数 474. Ones and Zeroes
  5. SPC统计及控制图系列标准
  6. python 读取并裁剪nc文件
  7. 基于BERT实现简单的情感分类任务
  8. MySQL远程连接失败(错误码:2003)
  9. Python爬虫:抓取js生成的数据
  10. 网站关键词优化技巧都有哪些?如何进行优化?
  11. 2021-03-22 unI-app 前端直播推流实现
  12. R 数据四舍五入函数教程
  13. matlab按点绘制网格
  14. windows mysql 配置最大连接数_MYSQL 最大连接数设置
  15. C语言中的float(单精度浮点数)
  16. html隐藏visibility,CSS Visibility(可见性)
  17. git rebase 的几种用法
  18. JavaScript 经典代码大全
  19. 不做你咖啡杯里的半块糖
  20. 泡在网上的日子 ---*****----开源项目*******--新功能

热门文章

  1. 【计算流体力学CFD】Fluent软件模拟:方腔热对流圆柱绕流(卡门涡街)|Matlab
  2. Linux系统启动初始化
  3. HR怎么通过简历判断程序员是否优秀?
  4. Oracle OJVM安全补丁
  5. 双非保研北理工计算机夏令营,经验分享 | 你的坚持,终将美好——双非保研北大直博...
  6. GPON技术--ODN网络组成
  7. 最长上升子序列模型之拦截导弹
  8. 哈哈日语入门:日语中浊音变的3条规律
  9. sql修改日期不改变时间
  10. 卡尔曼滤波与目标追踪 MATLAB实现