打算做一个类似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的更多相关文章

  1. 微信小程序开发日记——高仿知乎日报(中)

    本人对知乎日报是情有独钟,看我的博客和github就知道了,写了几个不同技术类型的知乎日报APP要做微信小程序首先要对html,css,js有一定的基础,还有对微信小程序的API也要非常熟悉 我将该教 ...

  2. 微信小程序开发日记——高仿知乎日报(上)

    本人对知乎日报是情有独钟,看我的博客和github就知道了,写了几个不同技术类型的知乎日报APP 要做微信小程序首先要对html,css,js有一定的基础,还有对微信小程序的API也要非常熟悉 我将该 ...

  3. 嵌入式Linux驱动开发日记

    嵌入式Linux驱动开发日记 主机硬件环境 开发机:虚拟机Ubuntu12.04 内存: 1G 硬盘:80GB 目标板硬件环境 CPU: SP5V210 (开发板:QT210) SDRAM: 512M ...

  4. 【原创】shadowebdict开发日记:基于linux的简明英汉字典(四)

    全系列目录: [原创]shadowebdict开发日记:基于linux的简明英汉字典(一) [原创]shadowebdict开发日记:基于linux的简明英汉字典(二) [原创]shadowebdic ...

  5. 【原创】shadowebdict开发日记:基于linux的简明英汉字典(三)

    全系列目录: [原创]shadowebdict开发日记:基于linux的简明英汉字典(一) [原创]shadowebdict开发日记:基于linux的简明英汉字典(二) [原创]shadowebdic ...

  6. 【原创】shadowebdict开发日记:基于linux的简明英汉字典(二)

    全系列目录: [原创]shadowebdict开发日记:基于linux的简明英汉字典(一) [原创]shadowebdict开发日记:基于linux的简明英汉字典(二) [原创]shadowebdic ...

  7. 【原创】shadowebdict开发日记:基于linux的简明英汉字典(一)

    全系列目录: [原创]shadowebdict开发日记:基于linux的简明英汉字典(一) [原创]shadowebdict开发日记:基于linux的简明英汉字典(二) [原创]shadowebdic ...

  8. LayIM.AspNetCore Middleware 开发日记(一)闲言碎语

    前言 前几天写博客的时候突然看见了历史上的今天.不禁感慨时光如梭,这系列博客后来被我标注了已经过时,但是还有很多小伙伴咨询我.既然过时就要更新,正好 .NET Core 也出来很久了,于是乎想到把La ...

  9. 【Android开发日记】之入门篇(七)——Android数据存储(上)

    在讲解Android的数据源组件——ContentProvider之前我觉得很有必要先弄清楚Android的数据结构. 数据和程序是应用构成的两个核心要素,数据存储永远是应用开发中最重要的主题之一,也 ...

随机推荐

  1. 怎样在WINDOWS下面编译OpenSSL

    编译OPENSSL的步骤: 第一步:下载ActivePerl(http://www.activestate.com/, ),安装ActivePerl,默认安装路径在C:\Perl64.打开命令提示符, ...

  2. Ubuntu 16.04出现Can't open /etc/rc.d/init.d/functions的问题解决

    /etc/rc.d/init.d/functions是CentOS的位置,Ubuntu对应:/lib/lsb/init-functions 参考: https://unix.stackexchange ...

  3. php-fpm回顾和总结

    时间久了很容易忘,这里做个备份 FastCGI协议php语言的实现,可以高效处理来自web端的动态请求 php-fpm维护一个或者多个php-cgi进程池,处理请求时不需要频繁创建进程 所以比传统的C ...

  4. 得到java异常printStackTrace的详细信息

    平时写Java代码时,想看抛出的异常信息,来找出具体的异常点,我们常常会用Exception.toString ()或者 Exception.getMessage()来取得异常信息,再把它print到 ...

  5. Jsp+servlet 验证码案例

    昨晚在csdn看到一位前辈写一个ajax+servlet+jsp验证.顿时心血来潮,在阅读前辈的代码下我亲手体验一下,做了一个验证码生成工具类.以供大家做个參考. 1:加入VeriyCodeUtils ...

  6. CentOS系统下Hadoop、Hbase、Zookeeper安装配置

    近期给一个项目搭建linux下的大数据处理环境,系统是CentOS 6.3.主要是配置JDK.安装Tomcat,Hadoop.HBase和Zookeeper软件.博主在Hadoop这方面也是新手.配置 ...

  7. git remote加入本地库的方法

    方法来自airk: 假设须要将你电脑本地的一个git库(目录)B 加入到另外一个git库(目录) A的 remote里 操作方法例如以下: 先在git仓库B操作: git init --bare 然后 ...

  8. 魔兽 如何屏蔽F1键弹出帮助菜单

    如下图所示,我在任何时候按F1键,都会自动弹出Windows帮助和支持,事实上这个功能很鸡肋,从来没用过,但是玩魔兽的时候确实必须的,F1控制英雄的,呵呵.   方法还是有的,在任务管理器中找到这个应 ...

  9. jQuery整理笔记七----几个经典表单应用

    1.文本框获得(失去)焦点 当文本框获得输入焦点时,将该文本框高亮显示,算不得一个应用,仅仅是一个小技巧,能够提高用户体验. <!DOCTYPE html PUBLIC "-//W3C ...

  10. ATM取款机模拟——数据结构课设

    今天帮人写的第二篇课设 . ;-) 机智的窝 要求:大概说一下吧,就是要创建一个用户(初始化一账户),模拟ATM的业务(取款,100的整数倍,改密               码,查剩余金额.等等,各 ...