技术前沿网

我们不支持 IE 10 及以下版本浏览器

It appears you’re using an unsupported browser

为了获得更好的浏览体验,我们强烈建议您使用较新版本的 Chrome、 Firefox、 Safari 等,或者升级到最新版本的IE浏览器。 如果您使用的是 IE 11 或以上版本,请关闭“兼容性视图”。
博客专区 - 技术前沿网社区

精彩阅读

  • 最新推荐

  • 今日热门

  • 本周热门

  • 每日一博

  • 最新文章

java多线程——并发测试

并发程序存在不确定性,出现的方式也没有固定规则。这对程序的应用会造成一些困难,如何在测试中,尽可能的暴露出这些问题,并且了解其性能瓶颈,这也是对开发者带来新的挑战。
wier 发布于 3天前 阅读 754 点赞 4

java多线程——CAS

CAS是什么,有那些特性,如何使用...
wier 发布于 1周前 阅读 435 评论 5 点赞 4

java多线程——锁

这是多线程系列第四篇,偏重于线程的实践,对锁的几种应用做个简要介绍
wier 发布于 2周前 阅读 2910 评论 15 点赞 3

java多线程——volatile

java多线程系列第三篇,深入理解volatile的原理以及应用
wier 发布于 4周前 阅读 3030 评论 11 点赞 6

在Unity游戏中使用Live2D

Unity中使用Live2D
Lohanry 发布于 4周前 阅读 268

java多线程-内存模型

了解一些jvm在内存操作中如何保证一致性问题
wier 发布于 1个月前 阅读 1811 评论 8 点赞 3

java 多线程—线程怎么来的?

并发处理的广泛应用是使得amdah1定律代替摩尔定律成为计算机性能发展源动力的根本原因,是人类压榨计算机运算能力的最有力武器。
wier 发布于 1个月前 阅读 4220 评论 5 点赞 9

游戏中有哪些作弊方法?

了解一些游戏中的作弊方式,方便你氪金。
wier 发布于 1个月前 阅读 1651 评论 9 点赞 3

游戏中的加密算法

游戏的中常见的加密方式介绍,以及优缺点详解
wier 发布于 2个月前 阅读 1011 评论 14 点赞 2

图解LZ77压缩算法

数据压缩是一个减小数据存储空间的过程,目前被应用在软件工程的各个地方,了解其一些原理,方便我们更好的甄选压缩方案。
wier 发布于 2个月前 阅读 3518 评论 7 点赞 15

深入理解游戏中寻路算法

看似寻常的路径行走,在程序看来就需要一定的寻路算法来解决,如何在最短时间内找到一条路径最短的路线,这是我们首要考虑的问题。
wier 发布于 2个月前 阅读 2023 评论 10 点赞 8

游戏服务器架构演进(完整版)

王者荣耀技术分析第三篇,服务器架构模型分析...
wier 发布于 2个月前 阅读 7051 评论 37 点赞 20

从王者荣耀聊聊游戏的帧同步

通过王者荣耀,我们来聊一聊帧MOBA游戏的技术实现以及同步方式
wier 发布于 3个月前 阅读 8835 评论 58 点赞 36

我是这样翻译 CraftyJS 的

最近博主在翻译 CraftyJS 的官方文档,或许你还不知道 CraftyJS 是什么,好吧,先来一张图! 想做网页小游戏不是一两天的事了,但说实话一直没找到满意的游戏框架,JS水平又很烂,平面设计水平还一塌糊涂,这可怎么活啊!默哀三分钟。。。 一个偶然的机会博主发现了 CraftyJS ,深入了解之后,博主觉得就是它了,因为他足够小,足够简单,足够灵活,这就足够了!但随后博主发现网上关于这款游戏引擎的文档简直是少的可怜,幸好官方的文档还算给力,组织的比较清晰,似乎也比较完备。博主英文是相当的差劲(默哀三分钟。。。),还好混了几年IT,简单的单词还算识得,不过看着还是很吃力的,更何况在没有游戏开发背景的情况下,里边有很多专业的术语是很难理解的,想到中国还有千千万万像博主这样满怀一腔热情,但是英文不过关的同志们,于是博主决定将整个官网翻译成中文以方便后来者。(话说官方难道就不打算出了中文网站么,不打算在天朝发展么,天朝人多势众啊!) 下边就来讲讲我翻译 CraftyJS 的经历,各位吃瓜群众准备好瓜子茶水前来围观吧!!! 首先我在官网上发现原来这个网站的页面源码有在github上托管(这真是感谢党感谢人民啊,还好不用我一个页面一个页面的在...
-无名小卒- 发布于 3个月前 阅读 268 评论 4 点赞 1

每个程序员都需要知道一些游戏网络知识

作为一个程序员,你有没有想象过多人游戏是如何实现的?
wier 发布于 4个月前 阅读 3837 评论 4 点赞 9

LuoYing RPG教程-JME3游戏创建、场景编辑、载入完整示例教程

这篇文章主要介绍: 如何创建一个3D游戏项目; 如何整合LuoYing RPG游戏框架到JMonkeyEngine游戏中; 如何使用落樱编辑器创建一个3D游戏场景,并将游戏场景载入到JME3游戏中。 文章会从创建项目、创建场景到导入场景作一个完整的说明过程。
huliqing 发布于 5个月前 阅读 424 评论 2 点赞 2

Pomelo游戏服务器端开发系列(1)-介绍

官方Github上的WiKi的知识点总结到一块,筛选了一些有价值的知识点
nextzeus 发布于 5个月前 阅读 430 评论 1

JMonkeyEngine中是如何使用AppState来管理和实现游戏场景切换的

本文要讲解的是关于JMonkeyEngine游戏引擎中如何使用AppState来实现游戏场景的管理和切换.
huliqing 发布于 5个月前 阅读 334 评论 3

3D游戏中角色的换装原理-落樱之剑实例图文详细剖析(JMonkeyEngine游戏开发)

在整个讲解过程中需要以下一些东西来进行说明,我们将通过各种工具一步一步来完成以下物件,并最终使用这些物件在游戏中演示如何进行换装。 1.一个标准的人物骨骼 - 用于控制角色基本身形、装备以及角色动画 2.一套基本身形 - 用于模拟人物角色的皮肤,即脱光装备后的样子,这里以内衣装示例,后面我称为“身形”或“身体” 3.一套角色装备 - 用于换装示例,后面我统称为“装备” ...
huliqing 发布于 5个月前 阅读 677 点赞 1

有趣的二进制—高效位运算

位运算是一种比较特别的数学运算。一般情况下,位运算的运算效率比加减乘除等常规数学运算要高得多。此外,位运算具备一些常规数学运算所没有的特点和规律,我们可以利用位运算的相关特性来完成一些非常巧妙的程序设计。
wier 发布于 6个月前 阅读 3314 评论 29 点赞 6

idea运行maven报系统资源不足

运行maven的时候提示系统资源不足 系统资源不足。 有关详细信息,请参阅以下堆栈追踪。 java.lang.OutOfMemoryError: Java heap space at com.sun.tools.javac.zip.ZipFileIndex$ZipDirectory.findCENRecord(ZipFileIndex.java:698)
sprouting 发布于 3个月前 阅读 74

AStar寻路2-性能优化

AStar寻路1-实现基本功能  的性能优化篇 优化方法,因为为了查看代码的profiler,因此用Unity来实现图形化,VS的c#有性能测试工具,根据热点函数来寻找瓶颈点和优化策略。 通过VS的性能测试工具,得出了上篇的热点函数是排序相关和估值函数。 A星寻路得到的路径,大部分情况下不会是最短路径,但是肯定是接近最短路径,只有每次的估计值是真实最短路径的值,那么得出的才会是最短路径。 原因是A星选择的贪心策略存在的误差是估值得来的,而该点的f值只会计算一次会一直用到寻路点直到终点,而不会随时调整,然后排序。   因此A星的精度和速度和估值函数的算法很重要,常见的几种估值方法 1.曼哈顿距离法,目标点和垂直距离与纵向距离之和, 2.直线距离法,直接是2点的距离,缺点是开方CPU代价太大。但是得到的路径较为平滑,开销大概是曼哈顿的2倍左右 3.还有一种方法,综合了2和1的特点,基本思想是如下图的A到B点   搜索过程中,从空间来说,因为不确定是否存在路径,因此要保存完整的节点信息,最坏情况是没有路径,空间占用就是节点总数。重复寻路的话Node对象的复用避免new的频繁开销也是一个优化点 open表的排序从时间来说,每次插入操作都要保证open列表中是有序...
梦想游戏人 发布于 3个月前 阅读 50

go环境搭建

1...下载go for Windows msi  https://github.com/golang/go 2.....在vistual studio code 中搭建环境,安装go扩展 3....点击 code 右下角 analysing missing tools,会自动安装环境,GOPATH 的目录一般位于C:\Users\XXXXXX\go 下 , 安装过程中某些包可能安装失败,开VPN在尝试安装成功 4.....添加环境变量 GOPATH 为3的目录  /bin      ....  如C:\Users\XXXX\go\bin ,再把C:\Users\XXX\go\bin   C:\Users\XXX\go 添加到path 里面。 5....用户设置 { "workbench.startupEditor": "newUntitledFile", "extensions.ignoreRecommendations": true, "update.channel": "none", "files.autoSave": "onFocusChange", "go.buildOnSave": true, "go.lintOnSave": true, "go.vetOnSave": true, "go.buildTags": "", "go.buildFlags": [], "go.lintFlags": [], "go.vetFlags": [], "go.coverOnSave": false, "go.useCodeSnippetsOnFunctionSuggest": false, "go.formatOnSave": true, "go.formatTool": "goreturns", "go.goroot": "C:\\Go", "go.gopath": "C:\\Users\\xxxxxx\\go", "go.g...
梦想游戏人 发布于 3周前 阅读 16

Unity截屏

截屏,截图 1......使用Application 提供的api Application.CaptureScreenshot(Application.dataPath + "/11.png");   2.....利用Texture2D提供的函数 ReadPixels,注意要在每帧渲染完成后才能使用, 否则会抛出异常: ReadPixels was called to read pixels from system frame buffer, while not inside drawing frame.,该函数是从 读取的  RenderTexture. active。下面是文档说明 This will copy a rectangular pixel area from the currently active RenderTexture or the view (specified by the source parameter) into the position defined by destX anddestY. Both coordinates use pixel space - (0,0) is lower left. IEnumerator Cap() { yield return new WaitForEndOfFrame(); Texture2D tex = new Texture2D(Screen.width, Screen.height); tex.ReadPixels(new Rect(Vector2.zero, new Vector2(Screen.width, Screen.height)), 0, 0); var raw = tex.EncodeToPNG(); string filename = Application.dataPath + "/111.png"; System.IO.File.WriteAllBytes( filename, raw); }...
梦想游戏人 发布于 2周前 阅读 11

java多线程——并发测试

并发程序存在不确定性,出现的方式也没有固定规则。这对程序的应用会造成一些困难,如何在测试中,尽可能的暴露出这些问题,并且了解其性能瓶颈,这也是对开发者带来新的挑战。
wier 发布于 3天前 阅读 754 点赞 4

Cocos2dx 搓牌效果

先上效果图: ![输入图片说明](https://static.oschina.net/uploads/img/201709/27165000_30Za.png "在这里输入图片标题") ![输入图片说明](https://static.oschina.net/uploads/img/201709/27165022_OXxv.png "在这里输入图片标题") ![输入图片说明](https://static.oschina.net/uploads/img/201709/27165036_kC4x.png "在这里输入图片标题") cocos2dx 3D搓牌效果类如下: ``` -- date:2017/9/26 -- author:looyer -- purpose:3D搓牌效果层, -- 顶点着色器 local strVertSource = [[ attribute vec4 a_position; attribute vec2 a_texCoord; attribute vec4 a_color; uniform float ratio; //牌初始状态到搓牌最终位置的完成度比例 uniform float radius; //搓牌类似于绕圆柱滚起,其圆柱的半径 uniform float width; uniform float offx; uniform float offy; #ifdef GL_ES varying lowp vec4 v_fragmentColor; varying mediump vec2 v_texCoord; #else varying vec4 v_fragmentColor; varying vec2 v_texCoord; #endif void main() { //顺时针旋转90度 a_position = vec4(a_position.y, -a_position.x, a_position.z, a_position.w); //计算卡牌弯曲的位置,类似于卡牌绕...
looyer 发布于 2天前 阅读 74 点赞 2

java多线程——锁

这是多线程系列第四篇,偏重于线程的实践,对锁的几种应用做个简要介绍
wier 发布于 2周前 阅读 2910 评论 15 点赞 3

深入理解游戏中寻路算法

看似寻常的路径行走,在程序看来就需要一定的寻路算法来解决,如何在最短时间内找到一条路径最短的路线,这是我们首要考虑的问题。
wier 发布于 2个月前 阅读 2023 评论 10 点赞 8

从王者荣耀聊聊游戏的帧同步

通过王者荣耀,我们来聊一聊帧MOBA游戏的技术实现以及同步方式
wier 发布于 3个月前 阅读 8835 评论 58 点赞 36

java多线程——volatile

java多线程系列第三篇,深入理解volatile的原理以及应用
wier 发布于 4周前 阅读 3030 评论 11 点赞 6

游戏中有哪些作弊方法?

了解一些游戏中的作弊方式,方便你氪金。
wier 发布于 1个月前 阅读 1651 评论 9 点赞 3

java 多线程—线程怎么来的?

并发处理的广泛应用是使得amdah1定律代替摩尔定律成为计算机性能发展源动力的根本原因,是人类压榨计算机运算能力的最有力武器。
wier 发布于 1个月前 阅读 4220 评论 5 点赞 9

java多线程-内存模型

了解一些jvm在内存操作中如何保证一致性问题
wier 发布于 1个月前 阅读 1811 评论 8 点赞 3

在Unity游戏中使用Live2D

Unity中使用Live2D
Lohanry 发布于 4周前 阅读 268

游戏服务器架构演进(完整版)

王者荣耀技术分析第三篇,服务器架构模型分析...
wier 发布于 2个月前 阅读 7051 评论 37 点赞 20

图解LZ77压缩算法

数据压缩是一个减小数据存储空间的过程,目前被应用在软件工程的各个地方,了解其一些原理,方便我们更好的甄选压缩方案。
wier 发布于 2个月前 阅读 3518 评论 7 点赞 15

java多线程——CAS

CAS是什么,有那些特性,如何使用...
wier 发布于 1周前 阅读 435 评论 5 点赞 4

unity coroutine calldelay定时器原理

unity中 一般都用coroutine(协同程序,协程)实现定时任务,自己写Timer and Invoke 也可以实现,主要分析unity中的coroutine的实现原理, coroutine 比如WaitForSeconds 内部都是迭代后,添加到CallDelay的 中 给DelayedCallManager管理,内部存储结构是一个multiset(讲道理为什么不用map),该定时器的触发条件是CallBack的时间到了,通过长时间线(时间戳)来处理,而不是每一帧Tick一次,排序值就是CallBack的time,这种非顺序容器(物理排列)的一个好处就是在遍历的时候可以动态删除添加,而不影响整体排序值,删除和添加代价都在很小范围内,而不会像vector那样数据前移,基于稳定排序后,在multiset中的排序值始终是按照添加顺序排序(同一个时间戳情况下)。如果排序插入的结果不是稳定 的那么会出BUG,coroutine的调用顺序 一定情况下不会按照StartCoroutine的顺序执行。      即StartCoroutine来做定时任务 并没有性能优势。更多的是写法上的优雅,因此不建议大量使用 TestCode 内部再对WaitForSeconds 添加到定时器任务,达到协同程序的目的   发起添加一个定时器CallBack,coroutine内部IEnumerator后 也是发起calldelayed 如果是0.0f的话,当前Update不...
梦想游戏人 发布于 19小时前 阅读 8

游戏中的加密算法

游戏的中常见的加密方式介绍,以及优缺点详解
wier 发布于 2个月前 阅读 1011 评论 14 点赞 2

Unity垂直排列UI.Text

最终效果。   UI.Text默认排列是横着来 像这样,如果要竖着排列这些字符,看了半天API和成员变量相关信息没看到有相关参数,最后在UI.Effect的实现中发现了  // 摘要:      //     Adds an outline to a graphic using IVertexModifier.     [AddComponentMenu("UI/Effects/Shadow", 14)]     public class Shadow : BaseMeshEffect 可以利用相关Shadow一样的手法去对Text修改 处理后的代码,123456就竖着排列了,,在这里只提供基本方法,因为重定义了UIVertex相关信息,所以字符的排列规则 比如(对其方式)要重写,在这里不继续深究了,抛砖引玉 [AddComponentMenu("Extension/VerticalText")] [RequireComponent(typeof(UnityEngine.UI.Text))] public class VerticalText : BaseMeshEffect { Vector2 SetOneCharPosition(ref VertexHelper vh, int idx, Vector3 pos0) { if (idx % 4 != 0 || vh == null) return Vector2.zero; var tex0 = new UIVertex(); vh.PopulateUIVertex(ref tex0, idx); var tex1 = new UIVertex(); vh.PopulateUIVertex(ref tex1, idx + 1); var tex2 = new UIVerte...
梦想游戏人 发布于 18小时前 阅读 5

java多线程——并发测试

并发程序存在不确定性,出现的方式也没有固定规则。这对程序的应用会造成一些困难,如何在测试中,尽可能的暴露出这些问题,并且了解其性能瓶颈,这也是对开发者带来新的挑战。
wier 发布于 3天前 阅读 754 点赞 4

java多线程——锁

这是多线程系列第四篇,偏重于线程的实践,对锁的几种应用做个简要介绍
wier 发布于 2周前 阅读 2910 评论 15 点赞 3

从王者荣耀聊聊游戏的帧同步

通过王者荣耀,我们来聊一聊帧MOBA游戏的技术实现以及同步方式
wier 发布于 3个月前 阅读 8835 评论 58 点赞 36

java 多线程—线程怎么来的?

并发处理的广泛应用是使得amdah1定律代替摩尔定律成为计算机性能发展源动力的根本原因,是人类压榨计算机运算能力的最有力武器。
wier 发布于 1个月前 阅读 4220 评论 5 点赞 9

73款阿里巴巴开源软件详解!

详细解读阿里巴巴开源技术,包括框架、组件、引擎、数据库/存储、平台/系统、解决方案、工具、中间件、Web Sever、设计等十大类73款!
阿里巴巴

java多线程——CAS

CAS是什么,有那些特性,如何使用...
wier 发布于 1周前 阅读 435 评论 5 点赞 4

java多线程——volatile

java多线程系列第三篇,深入理解volatile的原理以及应用
wier 发布于 4周前 阅读 3030 评论 11 点赞 6

java多线程-内存模型

了解一些jvm在内存操作中如何保证一致性问题
wier 发布于 1个月前 阅读 1811 评论 8 点赞 3

游戏中有哪些作弊方法?

了解一些游戏中的作弊方式,方便你氪金。
wier 发布于 1个月前 阅读 1651 评论 9 点赞 3

游戏服务器架构演进(完整版)

王者荣耀技术分析第三篇,服务器架构模型分析...
wier 发布于 2个月前 阅读 7051 评论 37 点赞 20

深入理解游戏中寻路算法

看似寻常的路径行走,在程序看来就需要一定的寻路算法来解决,如何在最短时间内找到一条路径最短的路线,这是我们首要考虑的问题。
wier 发布于 2个月前 阅读 2023 评论 10 点赞 8

在Unity游戏中使用Live2D

Unity中使用Live2D
Lohanry 发布于 4周前 阅读 268

图解LZ77压缩算法

数据压缩是一个减小数据存储空间的过程,目前被应用在软件工程的各个地方,了解其一些原理,方便我们更好的甄选压缩方案。
wier 发布于 2个月前 阅读 3518 评论 7 点赞 15

游戏中的加密算法

游戏的中常见的加密方式介绍,以及优缺点详解
wier 发布于 2个月前 阅读 1011 评论 14 点赞 2

idea运行maven报系统资源不足

运行maven的时候提示系统资源不足 系统资源不足。 有关详细信息,请参阅以下堆栈追踪。 java.lang.OutOfMemoryError: Java heap space at com.sun.tools.javac.zip.ZipFileIndex$ZipDirectory.findCENRecord(ZipFileIndex.java:698)
sprouting 发布于 3个月前 阅读 74

贪吃蛇游戏Java实现

简介:     周五在天码营看到一个java-snake的学习任务,地址https://course.tianmaying.com/java-snake。看了挺有意思,然后就花了几个小时按照其描述给实现了,因很多地方都是伪码,或者中文描述。所以 写起来也挺有意思,会让你自己去考虑细节代码实现。   项目:     相信大家好多人都玩过这个游戏,在看到怎么实现的逻辑,自己在之前还从未去考虑。写完了小游戏,把几个游戏的小细节给大家描述下。蛇的身体结构是个LinkedList<Node>,其中Node是棋盘Grid上面的点,非像素点;     1,蛇的移动:首先根据移动方向和Snake的head生成一个新的Node,然后把node添加到头部,最后把尾部给删除。就完成了snake的一次移动;     2,吃到食物:上一步生成的新头部节点和当前棋盘上的一个food节点比较,如果是同一个节点。则再把刚才干掉的尾部给添加上去即可;     3,边界检查:碰到边界,也就是Direction方向上的0或者width-1。如果当前head是这个,next时候就失败了。游戏game over;还有一种是碰撞自身,其实拿到新生成的node遍历对比Snake的body即可。也可以维护一个表格覆盖情况,其实觉得还是对比body比较简单些;     4,分层设计:任务的分层还是很好的...
叫我哀木涕 发布于 3周前 阅读 7

pvr.ccz和png等大图切图工具

此类工具搜索过一些,都不要好用,于是决定自己实现一个。 大图集拆开为小图片,由于是工具,于此效率不太重要,直接用Cocos2dx随手写了一个。 基本思想是直接读取,然后把该SpriteFrame输出为文件即可 #include "HelloWorldScene.h" #include "cocostudio/CocoStudio.h" #include "ui/CocosGUI.h" #include <iostream> #include <iostream> #include <vector> #include <string> #include <stdio.h> #include <fstream> #include <stdlib.h> USING_NS_CC; using namespace std; using namespace cocostudio::timeline; Scene* HelloWorld::createScene() { // 'scene' is an autorelease object auto scene = Scene::create(); // 'layer' is an autorelease object auto layer = HelloWorld::create(); // add layer as a child to scene scene->addChild(layer); // return the scene return scene; } // on "init" you need to initialize your instance bool HelloWorld::init() { // 1. super init first if (!Layer::init()) { return false; } vector<string> files; const char *TEM_WORK_FILE_NAME = "filelist.txt"; string path = "r...
梦想游戏人 发布于 2个月前 阅读 12

H5游戏开发框架排名

Three.js:作为老牌的3D库,它已经有众多案例,在PC多网页3D中是目前不错的选择。 Phaser:文档教程,和案例方面都很不错,功能也算的上丰富。非常适合独立游戏开发和小团队使用。 Pixi.js:作为渲染器,其渲染性能绝对是非常优秀的,游戏功能方面支持很差,适合极客程序员把玩。 Egret:性能不错,在工作流方面支持非常优秀,适应中度和重度HTML5游戏开发,有较多商业项目验证,非常适合商业团队使用。 enchant.js:性能偏差,不太推荐。 craftyJS:文档教程等方面不太完善,很难找到对应技术支持,不推荐。 Turbulenz:性能极佳,但捆绑其自身业务,不太适合国内市场。 cocos2d-js:老牌引擎,其性能在排名中居中,工作流支持相对完整,推荐。 PlayCanvas:重度3D游戏开发引擎,本文不对3D做推荐。 melonJS:性能不理想,不推荐。 Quintus:不支持WebGL模式,性能较差,不推荐。 Hilo:阿里前端团队作品,偏向于前端开发工程师,与游戏专业开发距离较大,推荐做HTML5营销小交互的使用。
范火山 发布于 2周前 阅读 22

Unity截屏

截屏,截图 1......使用Application 提供的api Application.CaptureScreenshot(Application.dataPath + "/11.png");   2.....利用Texture2D提供的函数 ReadPixels,注意要在每帧渲染完成后才能使用, 否则会抛出异常: ReadPixels was called to read pixels from system frame buffer, while not inside drawing frame.,该函数是从 读取的  RenderTexture. active。下面是文档说明 This will copy a rectangular pixel area from the currently active RenderTexture or the view (specified by the source parameter) into the position defined by destX anddestY. Both coordinates use pixel space - (0,0) is lower left. IEnumerator Cap() { yield return new WaitForEndOfFrame(); Texture2D tex = new Texture2D(Screen.width, Screen.height); tex.ReadPixels(new Rect(Vector2.zero, new Vector2(Screen.width, Screen.height)), 0, 0); var raw = tex.EncodeToPNG(); string filename = Application.dataPath + "/111.png"; System.IO.File.WriteAllBytes( filename, raw); }...
梦想游戏人 发布于 2周前 阅读 11
温安适

改啥呢?写bug!手写jvm中的各种OOM

 前言     大家好,这篇blog不写什么实际技术,就把我从书上学来的,制造JVM各种OOM的方法告诉大家。下回在遇到有人问你Java会内存溢出吗?你可以快速回答他,会!我还会写各种bug,造成JVM出现OOM异常。 知己知彼,JVM的各个区域的特定 要想写出各种OOM,必须知道JVM各个区域的特点,以便针对性的写bug,造成OOM。下面是我看书后总结的JVM各个区域的特点: 区域名称 作用 是否线程私有 是否会 内存溢出 溢出原因 程序计数器 当前线程所执行的字节码的行号的指示器。 每个线程都有独立的程序计数器 是 否   Java虚拟机栈 与线程同生命周期存储局部变量表,操作数栈 动态链接,方法出口,对象引用等。 局部变量表存储基本数据类型 boolean,int,float,long, double,byte,short. long,double占2其余占1局部空间 是 是 2种异常 1.StackOverflowError, 线程请求的栈深度大于虚拟机所允许的深度。 2.OutOfMemoryError 栈扩展时申请到不足够的内存。 本地方法栈 Java虚拟机栈类似 为Native服务 是 是 2种异常 1.StackOverflowError,线程请求的栈深度大于 虚拟机所允许的深度。 2.OutOfMemoryError 栈扩展时申请到不足够的内存。 java堆 存放对象实例以及数组。 GC堆。 逻辑连...
温安适 发布于 3个月前 阅读 147

Unity笔记(A):FPS帧率计数

Unity小控件
大止刀口 发布于 3个月前 阅读 15

Unity自定义协同程序多线程lambada等

unity coroutine calldelay定时器原理   在此基础上,进一步 继承UserTypeWait 即可使用自定义的协同程序等待事件,自定义实现类似于WaitForSeconds 或者WWW 或者LoadLevelAsync等一样用法的时间,注意这个Loop是同步写法,如果要真正异步,请在内部用多线程包装一下即可,多线程版本版本4已实现(该方案也许是多核优化的一个思路),版本3是lambada版本, 总之想怎么玩就怎么玩 版本1 类写法1 using UnityEngine; using System.Collections; using System; public class UserTypeWait { public IEnumerator Wait() { while (Loop()) { yield return null; } } public virtual bool Loop() { return false; } } public class WaitForTickCount50 : UserTypeWait { public override bool Loop() { ++c; if (c > 50) { return false; } return true; } int c = 0; } public class NewBehaviourScript : MonoBehaviour { void Start() { StartCoroutine(Run1()); } IEnumerator Run1() { ...
梦想游戏人 发布于 17小时前 阅读 6

Unity垂直排列UI.Text

最终效果。   UI.Text默认排列是横着来 像这样,如果要竖着排列这些字符,看了半天API和成员变量相关信息没看到有相关参数,最后在UI.Effect的实现中发现了  // 摘要:      //     Adds an outline to a graphic using IVertexModifier.     [AddComponentMenu("UI/Effects/Shadow", 14)]     public class Shadow : BaseMeshEffect 可以利用相关Shadow一样的手法去对Text修改 处理后的代码,123456就竖着排列了,,在这里只提供基本方法,因为重定义了UIVertex相关信息,所以字符的排列规则 比如(对其方式)要重写,在这里不继续深究了,抛砖引玉 [AddComponentMenu("Extension/VerticalText")] [RequireComponent(typeof(UnityEngine.UI.Text))] public class VerticalText : BaseMeshEffect { Vector2 SetOneCharPosition(ref VertexHelper vh, int idx, Vector3 pos0) { if (idx % 4 != 0 || vh == null) return Vector2.zero; var tex0 = new UIVertex(); vh.PopulateUIVertex(ref tex0, idx); var tex1 = new UIVertex(); vh.PopulateUIVertex(ref tex1, idx + 1); var tex2 = new UIVerte...
梦想游戏人 发布于 18小时前 阅读 5

unity coroutine calldelay定时器原理

unity中 一般都用coroutine(协同程序,协程)实现定时任务,自己写Timer and Invoke 也可以实现,主要分析unity中的coroutine的实现原理, coroutine 比如WaitForSeconds 内部都是迭代后,添加到CallDelay的 中 给DelayedCallManager管理,内部存储结构是一个multiset(讲道理为什么不用map),该定时器的触发条件是CallBack的时间到了,通过长时间线(时间戳)来处理,而不是每一帧Tick一次,排序值就是CallBack的time,这种非顺序容器(物理排列)的一个好处就是在遍历的时候可以动态删除添加,而不影响整体排序值,删除和添加代价都在很小范围内,而不会像vector那样数据前移,基于稳定排序后,在multiset中的排序值始终是按照添加顺序排序(同一个时间戳情况下)。如果排序插入的结果不是稳定 的那么会出BUG,coroutine的调用顺序 一定情况下不会按照StartCoroutine的顺序执行。      即StartCoroutine来做定时任务 并没有性能优势。更多的是写法上的优雅,因此不建议大量使用 TestCode 内部再对WaitForSeconds 添加到定时器任务,达到协同程序的目的   发起添加一个定时器CallBack,coroutine内部IEnumerator后 也是发起calldelayed 如果是0.0f的话,当前Update不...
梦想游戏人 发布于 19小时前 阅读 8

Cocos2dx 搓牌效果

先上效果图: ![输入图片说明](https://static.oschina.net/uploads/img/201709/27165000_30Za.png "在这里输入图片标题") ![输入图片说明](https://static.oschina.net/uploads/img/201709/27165022_OXxv.png "在这里输入图片标题") ![输入图片说明](https://static.oschina.net/uploads/img/201709/27165036_kC4x.png "在这里输入图片标题") cocos2dx 3D搓牌效果类如下: ``` -- date:2017/9/26 -- author:looyer -- purpose:3D搓牌效果层, -- 顶点着色器 local strVertSource = [[ attribute vec4 a_position; attribute vec2 a_texCoord; attribute vec4 a_color; uniform float ratio; //牌初始状态到搓牌最终位置的完成度比例 uniform float radius; //搓牌类似于绕圆柱滚起,其圆柱的半径 uniform float width; uniform float offx; uniform float offy; #ifdef GL_ES varying lowp vec4 v_fragmentColor; varying mediump vec2 v_texCoord; #else varying vec4 v_fragmentColor; varying vec2 v_texCoord; #endif void main() { //顺时针旋转90度 a_position = vec4(a_position.y, -a_position.x, a_position.z, a_position.w); //计算卡牌弯曲的位置,类似于卡牌绕...
looyer 发布于 2天前 阅读 74 点赞 2

java多线程——并发测试

并发程序存在不确定性,出现的方式也没有固定规则。这对程序的应用会造成一些困难,如何在测试中,尽可能的暴露出这些问题,并且了解其性能瓶颈,这也是对开发者带来新的挑战。
wier 发布于 3天前 阅读 754 点赞 4

Google增强现实解决方案---ARCore

介绍
Code工作室 发布于 1周前 阅读 7

PlayMaker GUI跟随布局的使用

PlayMaker GUI跟随布局的使用
大学霸 发布于 1周前 阅读 4

java多线程——CAS

CAS是什么,有那些特性,如何使用...
wier 发布于 1周前 阅读 435 评论 5 点赞 4

unity2D平面摄像机滑动缩放

比如2D游戏 地图很大,像植物大战僵尸关卡选择界面,需要对可见的区域进行滑动,缩放等, 1....滑动:通过正交摄像机的orthographicSize和位置和实际大小(可视范围大小),计算出距离世界坐标原点偏移量 来计算出位置 2....缩放,对正交相机的orthographicSize进行修改,达到放缩目的。同样也要计算摄像机实际大小()可视范围大小) 3.....正交相机大小的算法   摄像机实际视界宽度(米)=size*2*屏幕宽高比   当然该方法不限于正交相机 透视相机也可以利用这种思路来计算,当然还要考虑像素和米的换算关系,以下代码块像素米比例是1,即1像素=1米 using System.Collections; using System.Collections.Generic; using UnityEngine; // for map mouse and touch slide and zoom [RequireComponent(typeof(Camera))] public class MapCameraSlider : MonoBehaviour { Camera camera = null; float SCREEN_WIDTH = 1136f;//屏幕宽度 float SCREEN_HEIGHT = 640f; // 屏幕高度 const float max_allow_width = 1024f * 3f; // 最大允许滑动的宽度 const float max_allow_height = 1024f * 3f; // 最大允许滑动的高度 float distanceScale; ...
梦想游戏人 发布于 2周前 阅读 6
元谷

virutalbox安装macos的一些命令

cd "C:\Program Files\Oracle\VirtualBox" VBoxManage.exe modifyvm "mac"  --cpuidset 00000001 000306a9 04100800 7fbae3ff bfebfbff VBoxManage setextradata "mac"  "VBoxInternal/Devices/efi/0/Config/DmiSystemProduct" "MacBookPro11,3" VBoxManage setextradata "mac"  "VBoxInternal/Devices/efi/0/Config/DmiSystemVersion" "1.0" VBoxManage setextradata "mac"  "VBoxInternal/Devices/efi/0/Config/DmiBoardProduct" "Iloveapple" VBoxManage setextradata "mac"  "VBoxInternal/Devices/smc/0/Config/DeviceKey" "ourhardworkbythesewordsguardedpleasedontsteal(c)AppleComputerInc" VBoxManage setextradata "mac"  "VBoxInternal/Devices/smc/0/Config/GetKeyFromRealSMC" 1 VBoxManage setextradata "mac" CustomVideoMode1 1280x800x32...
元谷 发布于 2周前 阅读 7

PlayMaker布局技巧:预览GUI界面

PlayMaker布局技巧:预览GUI界面
大学霸 发布于 2周前 阅读 5

Unity截屏

截屏,截图 1......使用Application 提供的api Application.CaptureScreenshot(Application.dataPath + "/11.png");   2.....利用Texture2D提供的函数 ReadPixels,注意要在每帧渲染完成后才能使用, 否则会抛出异常: ReadPixels was called to read pixels from system frame buffer, while not inside drawing frame.,该函数是从 读取的  RenderTexture. active。下面是文档说明 This will copy a rectangular pixel area from the currently active RenderTexture or the view (specified by the source parameter) into the position defined by destX anddestY. Both coordinates use pixel space - (0,0) is lower left. IEnumerator Cap() { yield return new WaitForEndOfFrame(); Texture2D tex = new Texture2D(Screen.width, Screen.height); tex.ReadPixels(new Rect(Vector2.zero, new Vector2(Screen.width, Screen.height)), 0, 0); var raw = tex.EncodeToPNG(); string filename = Application.dataPath + "/111.png"; System.IO.File.WriteAllBytes( filename, raw); }...
梦想游戏人 发布于 2周前 阅读 11

linux安装glfw3

因为openGL的教程需要用到glfw3,本来是直接从源里面安装,发现好像运行不了程序,估计是版本问题,就找到glfw的官网 [http://www.glfw.org](http://www.glfw.org) 有一部分是windows和mac安装教程,我不用windows,就只说一下linux的安装方法 其实很简单,安装cmake 然后从github获取glfw3的源码 [https://github.com/glfw/glfw](https://github.com/glfw/glfw) ``` git clone https://github.com/glfw/glfw.git cd glfw cmake . sudo make install make clean ```
geange 发布于 2周前 阅读 8

cannot find -lglfw3

在看linux的openGL的教程时,需要使用到GLFW这个库,编译时使用一个参数去链库 ``` -lglfw3 ``` 发现报错找不到, ``` pkg-config --libs glfw3 ``` 返回值是 ``` -lglfw ``` 所以把-lglfw3改成-lglfw即可。
geange 发布于 2周前 阅读 4

PlayMaker的特殊事件FINISHED

PlayMaker的特殊事件FINISHED
大学霸 发布于 2周前 阅读 12

H5游戏开发框架排名

Three.js:作为老牌的3D库,它已经有众多案例,在PC多网页3D中是目前不错的选择。 Phaser:文档教程,和案例方面都很不错,功能也算的上丰富。非常适合独立游戏开发和小团队使用。 Pixi.js:作为渲染器,其渲染性能绝对是非常优秀的,游戏功能方面支持很差,适合极客程序员把玩。 Egret:性能不错,在工作流方面支持非常优秀,适应中度和重度HTML5游戏开发,有较多商业项目验证,非常适合商业团队使用。 enchant.js:性能偏差,不太推荐。 craftyJS:文档教程等方面不太完善,很难找到对应技术支持,不推荐。 Turbulenz:性能极佳,但捆绑其自身业务,不太适合国内市场。 cocos2d-js:老牌引擎,其性能在排名中居中,工作流支持相对完整,推荐。 PlayCanvas:重度3D游戏开发引擎,本文不对3D做推荐。 melonJS:性能不理想,不推荐。 Quintus:不支持WebGL模式,性能较差,不推荐。 Hilo:阿里前端团队作品,偏向于前端开发工程师,与游戏专业开发距离较大,推荐做HTML5营销小交互的使用。
范火山 发布于 2周前 阅读 22

java多线程——锁

这是多线程系列第四篇,偏重于线程的实践,对锁的几种应用做个简要介绍
wier 发布于 2周前 阅读 2910 评论 15 点赞 3

贪吃蛇游戏Java实现

简介:     周五在天码营看到一个java-snake的学习任务,地址https://course.tianmaying.com/java-snake。看了挺有意思,然后就花了几个小时按照其描述给实现了,因很多地方都是伪码,或者中文描述。所以 写起来也挺有意思,会让你自己去考虑细节代码实现。   项目:     相信大家好多人都玩过这个游戏,在看到怎么实现的逻辑,自己在之前还从未去考虑。写完了小游戏,把几个游戏的小细节给大家描述下。蛇的身体结构是个LinkedList<Node>,其中Node是棋盘Grid上面的点,非像素点;     1,蛇的移动:首先根据移动方向和Snake的head生成一个新的Node,然后把node添加到头部,最后把尾部给删除。就完成了snake的一次移动;     2,吃到食物:上一步生成的新头部节点和当前棋盘上的一个food节点比较,如果是同一个节点。则再把刚才干掉的尾部给添加上去即可;     3,边界检查:碰到边界,也就是Direction方向上的0或者width-1。如果当前head是这个,next时候就失败了。游戏game over;还有一种是碰撞自身,其实拿到新生成的node遍历对比Snake的body即可。也可以维护一个表格覆盖情况,其实觉得还是对比body比较简单些;     4,分层设计:任务的分层还是很好的...
叫我哀木涕 发布于 3周前 阅读 7

PlayMaker GUI的Normalized

PlayMaker GUI的Normalized
大学霸 发布于 3周前 阅读 2

第五课:事件处理

# Lesson 4: 事件处理 在本课中, 我们将学习使用 SDL 读取用户输入的基本知识, 在这个简单的例子中, 我们将解释任何输入作为用户想要退出我们的应用程序。为了读取事件, SDL 提供了 SDL_Event 的结构和函数来从队列中获取事件, 如 SDL_PollEvent。本课的代码是从3课代码中构建的, 如果您需要该代码从 Github 获取, 让我们开始吧! 我们需要做的第一个更改是加载新映像以显示输入提示。然后像以前一样使用我们的 loadTexture 功能加载它。 ![](http://git.oschina.net/geange_code/SDL2_Tutorial/raw/master/lesson4/image.png) ### **基本的主循环** 我们将添加一个主循环来保持程序运行, 直到用户退出, 以便他们想使用就可以使用它, 而不是一些固定的延迟时间。这个循环的结构是非常基本的。 ```C++ while (!quit){ //Read user input & handle it //Render our scene } ``` ### **SDL 事件队列** 要正确使用 sdl 的事件系统, 我们至少需要了解 sdl 如何处理事件。当 SDL 收到一个事件时, 这个事件将被推到所有已接收但尚未被轮询的其他事件的队列后面。如果我们要启动我们的程序, 然后调整窗口的大小, 请单击鼠标并按下一个键, 事件队列将像下图这样。 ![](http://git.osc...
geange 发布于 3周前 阅读 7

java多线程——锁

这是多线程系列第四篇,偏重于线程的实践,对锁的几种应用做个简要介绍
wier 发布于 2周前 阅读 2910 评论 15 点赞 3

java多线程——volatile

java多线程系列第三篇,深入理解volatile的原理以及应用
wier 发布于 4周前 阅读 3030 评论 11 点赞 6

java 多线程—线程怎么来的?

并发处理的广泛应用是使得amdah1定律代替摩尔定律成为计算机性能发展源动力的根本原因,是人类压榨计算机运算能力的最有力武器。
wier 发布于 1个月前 阅读 4220 评论 5 点赞 9

图解LZ77压缩算法

数据压缩是一个减小数据存储空间的过程,目前被应用在软件工程的各个地方,了解其一些原理,方便我们更好的甄选压缩方案。
wier 发布于 2个月前 阅读 3518 评论 7 点赞 15

73款阿里巴巴开源软件详解!

详细解读阿里巴巴开源技术,包括框架、组件、引擎、数据库/存储、平台/系统、解决方案、工具、中间件、Web Sever、设计等十大类73款!
阿里巴巴

游戏服务器架构演进(完整版)

王者荣耀技术分析第三篇,服务器架构模型分析...
wier 发布于 2个月前 阅读 7051 评论 37 点赞 20

从王者荣耀聊聊游戏的帧同步

通过王者荣耀,我们来聊一聊帧MOBA游戏的技术实现以及同步方式
wier 发布于 3个月前 阅读 8835 评论 58 点赞 36

有趣的二进制—高效位运算

位运算是一种比较特别的数学运算。一般情况下,位运算的运算效率比加减乘除等常规数学运算要高得多。此外,位运算具备一些常规数学运算所没有的特点和规律,我们可以利用位运算的相关特性来完成一些非常巧妙的程序设计。
wier 发布于 6个月前 阅读 3314 评论 29 点赞 6

有趣的二进制

优秀应用算法都大量用到位运算,而位运算在工作中很少用到,所以借助其算法,我们看一下位运算的优势以及应用,但是大多数教材只会教大家二进制和十进制如何互换,都是死记硬背式的,并没有去讲解真正含义,换一个进制之后,依然不会,我们回到最根本的一些计数方法上,从10进制来推算,希望用一种更简单的方式介绍其原理
wier 发布于 6个月前 阅读 5182 评论 22 点赞 11

WinformGDI+入门级实例——扫雷游戏(附源码)

本文将作为一个入门级的、结合源码的文章,旨在为刚刚接触GDI+编程或对相关知识感兴趣的读者做一个入门讲解。游戏尚且未完善,但基本功能都有,完整源码在文章结尾中。
穆翔 发布于 1年前 阅读 1477 评论 4 点赞 1

几款 Pokémon Go 开源项目介绍

Pokémon Go是由任天堂发布的增强现实(AR)游戏,一经推出,火遍全球,收获众多玩家。想必很多只猿,也沉浸其中。在这里,介绍几款 Pokémon Go开源项目,感兴趣的猿,可以尝试尝试。
催呀催呀 发布于 1年前 阅读 5662 评论 14 点赞 3

Xgame 合服工具技术设计文档

这是一篇介绍“合服工具”的技术文档;合服工具代码可以参考:https://git.oschina.net/afrxprojs/xgame-php_tool,注意:合服工具使用 PHP 语言开发!为什么使用 PHP,我后面会简要说明;该文档的主要目的是说明开发“合服工具”的思维过程,而不仅仅是使用说明!技术文档的价值在于过程而不是结论;我假定你对游戏行业的技术岗位工作有所了解。如果你亲身参与过游戏合服工作,这篇文档阅读起来可能会比较轻松;这是一篇不合规范的文档,所有符合规范的文档,没有人喜欢读……该文档以“轻松、易读、实用”作为规范;
hjj2017 发布于 2年前 阅读 1065 评论 3 点赞 2

C#程序员整理的Unity 3D笔记(十五):Unity 3D UI控件至尊–NGUI

目前,UGUI问世不过半年(其随着Unity 4.6发布问世),而市面上商用的产品,UI控件的至尊为NGUI:影响力和广度(可搜索公司招聘Unity 3D,常常能看到对NGUI关键词)。 NGUI虽然不是Unity 官方原生的,但以其强大的能力和友好的操作性,成为了事实上的王者—-无他,OnGUI太挫了。
王文刚_AR_VR 发布于 3年前 阅读 15471 评论 4 点赞 7 打赏 1

C#程序员整理的Unity 3D笔记(十三):Unity 3D基于组件的思想

如果你接触过《设计模式》、软件架构的编程思想,就会知道优秀的设计准则:“组合优于继承的”。 这句话很简短,但开始学习OOP的时候,真切的是—-不太好理解(以我个人当初学习为例)。
王文刚_AR_VR 发布于 3年前 阅读 2006 评论 4 点赞 2

网络版五子棋(Nodejs+socket.io)

这是刚学Node的时候写的,很久了,虽然比较简陋,也许还有BUG,但总归也是作品,也提交上来充个数吧,项目地址:http://git.oschina.net/scgywx/five-chess/ 简介 NodeJS + Socket.io开发的网络版五子棋,类似QQ游戏的五子棋,有大厅、用户列表、房间、聊天等功能。 安装 1、下载源代码,安装socket.io 2、运行服务端, 进入server目录,执行node index.js 3、使用http server(nginx或apache)将目录指向client目录(需要访问图片,html等文件) 4、修改服务器IP和端口(分别位于index.html第70,87,88行) 5、访问index.html即可 图片
呵大官人 发布于 3年前 阅读 2970 评论 10 点赞 4

Lua脚本怎么样调用外部脚本?

Lua脚本在游戏中的应用
borey 发布于 3年前 阅读 6848 评论 14 点赞 2

第一个libgdx程序--仿别踩白块

唉,从想到做拖了很久 ==||
贺路的路 发布于 3年前 阅读 4470 评论 6 点赞 2

【深入Cocos2d-x】使用MVC架构搭建游戏Four

基于Cocos2d-x2.2.3框架,并使用MVC架构,搭建了游戏Four。提供了相应的源代码,apk文件等等,希望您在GitHub上Star这个项目。
王选易 发布于 3年前 阅读 10226 评论 12 点赞 15

2048 C++源代码by Reason

2048 C++实现 源代码
ChenReason 发布于 3年前 阅读 9957 评论 27 点赞 23

开源游戏 “Elvish Bird”

这是一个纯javascript语言开发的自虐、冒险、死磕类游戏,它的名字叫“Elvish Bird”,主体开发了5个工作日,内部含有全部的代码。希望大家学习学习。运行这款游戏可以在IE8以上浏览器运行。运行时如果屏幕分辨率不兼容,你可以缩放到最佳显示效果。
BruceWan 发布于 4年前 阅读 3626 评论 15 点赞 11

开源游戏 “打飞机”

这是一个纯javascript语言开发的射击类游戏,它的名字叫“打飞机”,主体开发了4个工作日,内部含有全部的代码。希望大家学习学习。运行这款游戏可以在IE8以上浏览器运行。运行时如果屏幕分辨率不兼容,你可以缩放到最佳显示效果。
BruceWan 发布于 4年前 阅读 9724 评论 62 点赞 58
顶部