boxworld开发日记2019-6-8
打算做一个类似RimWorld的游戏,这里记录一下历程。首先,简单回顾一下。
2018年12月23日 场景管理,打算使用四叉树,后来发现四叉树在空间组织和内存占用方面并不占优势,之后计划使用地图分块。


2018年12月23日 那几天主要琢磨AI寻路,网上找了几份代码,总结归纳,写了一个雏形。


2019年05月08日 之前很多东西没有记录,之间一直在造各种轮子。这次是个地图砖块的插值

还有一个带碰撞的爆炸模拟

2019年05月27 走迷宫的小猫娘
实际应用中,发现自己写的A星寻路,性能是个问题,当然现在也没解决,100个单位同时寻路,会卡一秒。

A星寻路应用到场景的例子

测试了一下极限,128x128的图,4万个对象,运行不到10秒崩掉。5万个启动不了,直接内存报错。想当年我用双核u,集成显卡玩星际争霸2,一秒一帧但不崩,佩服暴雪程序的稳定。

2019-05-31 这些天一直在修正A星算法,优化了内存分配,修正了寻路估值算法,下面是两个效果对比图。
修正前,使用曼哈顿算法,特点是快,但只会走直线。

修正后,直接使用开方算法,视觉上路径比较真实一点

2019-6-8 总结一下这几天的作业。首先,更新了一下自己写的基于tile的轻型2D物理引擎,但还是有一些问题未解决,比如刚体卡在角落里面不动。
这里说一下为什么不使用box2D之类的比较出名的物理引擎,因为我要做的目标是上面的那种大规模的场景,而box2D、Chipmunk我都测试过了,两者性能至少目前都差不多,两个字:太慢!这类物理引擎,为了真实性,计算比较精确,每条边都进行计算,至于场景分割,不知道他们用什么算法。box2D刚体在500个左右的时候,已经卡成幻灯片了,像上面那种动辄几百几千单位的,实在没法用。我的游戏还要进行AI计算、寻路、事件处理,不只运行一个物理引擎。这几天一直在完善这个小物理引擎,卡到角落里面的原因,可能是刚体移动的时候,检测砖块发生冲突,导致力抵消,但没有好办法解决。这个引擎只是基于tile地图的简单物理性质模拟,速度非常快,不加刚体互斥运行一两万个没啥问题,加上刚体互斥,4、5000个也没有压力。

这是加了刚体互斥,用GDI渲染的效果图,不足的地方,就是角落里面总是卡着几个刚体,这让人很不爽!

应用到场景中的效果:有没有一点星际争霸2框着一屏幕单位的感觉?

同时,根据物理引擎特性,将单位汇聚一点之后,单位会随着时间自己慢慢散开

先记录到这吧,希望大家支持!
boxworld开发日记2019-6-8的更多相关文章
- 微信小程序开发日记——高仿知乎日报(中)
本人对知乎日报是情有独钟,看我的博客和github就知道了,写了几个不同技术类型的知乎日报APP要做微信小程序首先要对html,css,js有一定的基础,还有对微信小程序的API也要非常熟悉 我将该教 ...
- 微信小程序开发日记——高仿知乎日报(上)
本人对知乎日报是情有独钟,看我的博客和github就知道了,写了几个不同技术类型的知乎日报APP 要做微信小程序首先要对html,css,js有一定的基础,还有对微信小程序的API也要非常熟悉 我将该 ...
- 嵌入式Linux驱动开发日记
嵌入式Linux驱动开发日记 主机硬件环境 开发机:虚拟机Ubuntu12.04 内存: 1G 硬盘:80GB 目标板硬件环境 CPU: SP5V210 (开发板:QT210) SDRAM: 512M ...
- 【原创】shadowebdict开发日记:基于linux的简明英汉字典(四)
全系列目录: [原创]shadowebdict开发日记:基于linux的简明英汉字典(一) [原创]shadowebdict开发日记:基于linux的简明英汉字典(二) [原创]shadowebdic ...
- 【原创】shadowebdict开发日记:基于linux的简明英汉字典(三)
全系列目录: [原创]shadowebdict开发日记:基于linux的简明英汉字典(一) [原创]shadowebdict开发日记:基于linux的简明英汉字典(二) [原创]shadowebdic ...
- 【原创】shadowebdict开发日记:基于linux的简明英汉字典(二)
全系列目录: [原创]shadowebdict开发日记:基于linux的简明英汉字典(一) [原创]shadowebdict开发日记:基于linux的简明英汉字典(二) [原创]shadowebdic ...
- 【原创】shadowebdict开发日记:基于linux的简明英汉字典(一)
全系列目录: [原创]shadowebdict开发日记:基于linux的简明英汉字典(一) [原创]shadowebdict开发日记:基于linux的简明英汉字典(二) [原创]shadowebdic ...
- LayIM.AspNetCore Middleware 开发日记(一)闲言碎语
前言 前几天写博客的时候突然看见了历史上的今天.不禁感慨时光如梭,这系列博客后来被我标注了已经过时,但是还有很多小伙伴咨询我.既然过时就要更新,正好 .NET Core 也出来很久了,于是乎想到把La ...
- 【Android开发日记】之入门篇(七)——Android数据存储(上)
在讲解Android的数据源组件——ContentProvider之前我觉得很有必要先弄清楚Android的数据结构. 数据和程序是应用构成的两个核心要素,数据存储永远是应用开发中最重要的主题之一,也 ...
随机推荐
- bzoj1007 [HNOI2008]水平可见直线 - 几何 - hzwer.com
Description Input 第一行为N(0 < N < 50000),接下来的N行输入Ai,Bi Output 从小到大输出可见直线的编号,两两中间用空格隔开,最后一个数字后面也必 ...
- SpringBoot Data JPA 关联表查询的方法
SpringBoot Data JPA实现 一对多.多对一关联表查询 开发环境 IDEA 2017.1 Java1.8 SpringBoot 2.0 MySQL 5.X 功能需求 通过关联关系查询商店 ...
- Balance POJ - 1837 地推
Gigel has a strange "balance" and he wants to poise it. Actually, the device is different ...
- 应用CLR的线程池
大家都知道这个线程的建立和销毁都需要很大的性能开销,当有比较多且不同的任务需要完成时,可以考虑使用线程池来管理这些线程.在以windows NT为内核的操作系统上每个进程都包含一个线程池,在线程池中存 ...
- Ubuntu 16.04创建Swap分区或增加Swap分区容量(转)
要在Ubuntu中要创建Swap分区主要有如下2种方式: 一.传统创建方式 一般情况下,我们都会使用dd命令来预先创建交换分区文件,然后再用/dev/zero将该文件的内容全部置零,创建时还将用到bs ...
- JAVA WEB接口开发简述
目录 1. JAVA WEB接口开发简述 1.1. 基本了解 1.2. 提供接口 1.3. 调用接口 1. JAVA WEB接口开发简述 1.1. 基本了解 当我们想去访问其他网站的接口时候,而又不想 ...
- intellij使用tomcat搭建servlet运行时环境
http://suiyu.online/2017/08/01/intellij%E4%BD%BF%E7%94%A8tomcat%E6%90%AD%E5%BB%BAservlet%E8%BF%90%E8 ...
- linux 下 打包 和解压缩
01-.tar格式解包:[*******]$ tar xvf FileName.tar打包:[*******]$ tar cvf FileName.tar DirName(注:tar是打包,不是压缩! ...
- How to enable Google Play App Signing
how to enable google play app signing ------------------------------------------------------------- ...
- [TypeScript] Collect Related Strings in a String Enum in TypeScript
As of TypeScript 2.4, it is now possible to define string enums, or more precisely, enums with strin ...