开源中国

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

It appears you’re using an unsupported browser

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

精彩阅读

  • 最新推荐

  • 今日热门

  • 本周热门

  • 每日一博

  • 最新文章

竟然这就是面向对象的游戏设计?!

从程序角度考虑,许多 JavaScript 都基于循环和大量的 if/else 语句。在本文中,我们可了解一种更聪明的做法 — 在 JavaScript 游戏中使用面向对象来设计。本文将概述原型继承和使用 JavaScript 实现基本...
柳猫 发布于 2天前 阅读 261 评论 3

游戏中人工智能的优化

建立一个简单的游戏引擎和人工智能NPC后,我们需要对他们进行优化,如何建立,可以参考我在评论里的链接 语义结点的抽象 不过我们在这篇博客的讨论中是不能仅停留在能解决需求的层面上。目前的方案至少还存在一个比较严重的问题,那就是逻辑复用性太差。组合状态需要 coding 的逻辑太多了,具体的状态内部逻辑需要人肉维护,更可怕的是需要程序员来人肉维护,再多几个组合状态简直不敢想象。程序员真的没这么多时间维护这些东西好么。所以我们应该尝试抽象一下组合状态是否有一些通用的设计 pattern。 为了解决这个问题,我们再对这几个状态的分析一下,可以对结点类型进行一下归纳。 结点基本上是分为两个类型:组合结点、原子结点。 如果把这个状态迁移逻辑体看做一个树结构,那其中组合结点就是非叶子结点,原子结点就是叶子结点。 对于组合结点来说,其行为是可以归纳的。 巡逻结点,不考虑触发进入战斗的逻辑,可以归纳为一种具有这样的行为的组合结点:依次执行每个子结点(移动到某个点、休息一会儿),某个子结点返回 Success 则执行下一个,返回 Failure 则直接向上返回,返回 Continue 就把 Continuation 抛出去。命名具有这样语义的结点为 Sequence。 设想攻击状...
柳猫 发布于 3天前 阅读 203 评论 1

unity游戏开发之ULua框架介绍(一)

1.基础介绍 ①ULua 集成开发环境叫做:SimpleFramework,SimpleFramework 分为NGUI 和UGUI两个版本,区别是NGUI 版本的框架资源中含有NGUI 这个插件。SimpleFramework 本身不是Unitypackage 格式,而是一个Unity3D的项目工程,可以用Unity 直接打开。 ②SimpleFramework 和ULua SimpleFramework > ULua > Lua ULua 是对原生Lua 环境进行了一次“包装”,用于满足Unity 环境下的热更新需求。为了更方便的使用,于是又对ULua 进行“二次包装”,包装成了一个框架:SimpleFramework。 2. SimpleFramework框架资源结构 (1)六个根文件夹    ①Examples:SimpleFramework 热更新案例;    ②Lua:SimpleFramework 框架自带的Lua 源码文件(我们自己写的Lua 脚本也是存放在Lua 文件夹中);    ③NGUI:当你需用更高版本的NGUI 时,替换即可,否则不需要碰;    ④Plugins:uLua 运行所依赖的底层库文件,不需要碰;    ⑤Scripts:SimpleFramework 自带的C#脚本文件;    ⑥uLua:uLua 全部代码。 备注:uLua:④ ⑥       SimpleFramework:① ② ⑤       ngui:③ (2)框架自带菜单命令       Lua 菜单:uLua 环境相关处理命令;       Game 菜单:...
coding_ 发布于 4天前 阅读 263

基于unity开发了解C#语言中的委托与事件(一)

这部分文章基于unity开发主要介绍的内容包含C#语言中的泛型类,泛型方法,委托,多播委托,事件,匿名方法,Lambda 表达式等知识点。 在正式开始之前,我们先来简单了解些前置知识。 1.什么是.Net平台? ①.Net 平台是“微软开发者全家桶”,是一个优化过的“开发解决方案”。 ②.Net 平台不单单包含C#,还包含ASP.Net,VB.Net,F#等语言,另外使用.Net 平台能开发的方向涵盖手机应用,桌面应用,Web 应用等方向。 ③使用.Net 平台开发出来的产品,都不是直接运行在电脑的CPU 和内存里的,而是运行在.Net 虚拟机(.Net Framework)里面的。 2.是C# 语言,C#语言是.Net 平台下主推的一门编程语言。 ①我们使用C#写的代码,并不是真正的代码; ②C 语言编写的的代码,编译后直接是二进制格式,双击就可以运行; ③所有.Net 平台下的语言写的代码,编译后不是二进制,而是“IL 中间语言”,双击运行,需要经过.Net 虚拟机环境进行二次解析才能运行; ④所以说.Net 平台开发的程序相对于C,C++开发的程序,效率较低。 3.Mono 虚拟机 Mono 是第三方公司开发的一个开源项目,目的就是让.Net 开发出来的产品可以跨平台运行,使用C#脚本开发的Unity 项目,之所以能在Android,IOS等其...
coding_ 发布于 1个月前 阅读 148 评论 1

结合unity项目开发浅谈设计模式的六大原则(二)

接着上一篇我们接着往下讲:   三、依赖倒置原则 定义:针对抽象编程,不要针对实现编程;高层模块不应该依赖于底层模块,两个模块都应该依赖于抽象(抽象类/接口)。高层和底层不应该直接沟通,高层底层之间,应该有一个中间层,负责两方沟通。 比如说一个中国人和一个外国人(日本人,德国人,俄罗斯人...)沟通: 中国人和外国人不直接沟通,中间需要一个翻译,中国人和外国人都依赖于翻译。 Unity 引擎是把“依赖倒置原则”玩的很溜的一款产品。 高层依赖于底层:开发游戏需要依赖于该平台的底层API。 因为编写这些游戏时,使用C#开发一个版本,稍作调整就能发布到N 个平台。 在我们发布成不同平台的游戏的时候,Unity 本身就做了一个“对接”的任务,把我们的代码里面的API,对接到该平台上相应的API。 高层和底层都依赖于抽象:我们的游戏是依赖Unity 的,各个平台的API 也是Unity 完成对接任务的。   四、里氏转换原则 定义:①一个软件实体如果使用的是一个父类的话,那么一定适用于其子类。而且它察觉不出父类对象和子类对象的区别。 ②在软件里面,把父类都替换成它的子类,软件的行为没有变化;通俗点说,子类型必须能够替换掉它们的父类型。 从生活层面中理解里...
coding_ 发布于 1个月前 阅读 234 评论 4

Unity 大面积花草风吹动效果以及编辑

项目场景需求一个遍布鲜花的小岛,由于运行在手机上,所以对效率有一定的要求。 环境unity2017.3.f1,使用simpleLOD这个插件,方便做mesh合并,以及LOD处理 先放1张最终的效果图。 1.shader编写     先找来一个花的模型,贴图模型大致如下: shaderVS阶段做一个顶点运动。大致思路是花越靠近地面的,摇晃幅度越小,反之幅度越大。这个高度可以用顶点坐标来做,不过要兼容静态烘焙,或者地面不平等情况,无法获取准确高度。我这里采用UV的思路(美术保证草的根在贴图底部)。 代码如下 Shader "custom/2-sided_grass" {     Properties      {         _Color ("Main Color", Color) = (1,1,1,1)         _SpecColor ("Specular Color", Color) = (0.5, 0.5, 0.5, 0)         _Shininess ("Shininess", Range (0.01, 10)) = 0.078125         _MainTex ("Base (RGB) TransGloss (A)", 2D) = "white" {}         _BumpMap ("Normalmap", 2D) = "bump" {}         _Cutoff ("Alpha cutoff", Range(0,1)) = 0.5         _Direction("Direction",Vector) =(0,0,0,0) //运动的方向         _TimeScale("TimeScale",fl...
浮屠酱 发布于 2个月前 阅读 422 点赞 4

使用 pixi.js 开发微信小游戏

闲来无事就又折腾起微信小游戏来,其实国内几大游戏引擎都支持一键发布到微信小游戏。但是对`pixi.js`情有独钟,所以开始进入正题。 目标:把`pixi-filters`的在线`demo`放到微信小游戏上。 首先通过微信开发工具建立一个空项目,同时引入`pixi.js`和官方提供的`weapp-adapter.js`。 在`game.js`里写入: ``` import './libs/weapp-adapter' import * as PIXI from './libs/pixi.min' const {pixelRatio, windowWidth, windowHeight} = wx.getSystemInfoSync() new PIXI.Application({ width: windowWidth * pixelRatio, height: windowHeight * pixelRatio, view: canvas }) ``` 一切正常的话,结果应该如下图。 ![image.png](https://upload-images.jianshu.io/upload_images/56079-ca6031ec1b48f4e5.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 在把`pixi-filters`的`demo`搬过来之前,先把之前遇到的坑填一下。 我们先在场景中添加一张图片,然后让他点击隐藏。 ![image.png](https://upload-images.jianshu.io/upload_images/56079-9ea1cb6119c53cf5.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 问题是,我们点击非但不消失,还报错了。 ...
雨里有条鱼 发布于 2个月前 阅读 575 评论 4 点赞 1

golang plugin热更新尝试

当我们在使用php开发的时候,基本不需要关心热更新这件事的,因为PHP本身已经帮我处理好了,只需要提交代码,PHP重新解释一遍即可。而go则是静态语言,编译后得到的是直接被机器执行的,所有代码已经翻译成相对应的机器指令并且在运行时已经加载到内存,不能动态更新。那么如果想热更新就成了件麻烦的事,但是作为后端开发人员,很渴望支持这种功能,毕竟在线上能新增功能、修复bug客户端完全无感知是多么完美的事。   本文暂不讨论http这种无状态服务更新,网上能搜索到很多文章关于如何利用fd继承实现优雅重启。这里主要讨论使用golang 1.8新增的plugin来实现业务的更新,并且业务是类似游戏的有状态服务。官方文档中对plugin的描述比较简单,他可以动态的加载so和执行导出的方法,并且仅仅提供了两个方法:打开模块和提取符号,甚至连关闭都没有(-_-)。 一个程序包含两部分:数据和算法,那么既然是有状态服务,数据部分肯定不能动,那么热更就只能动算法部分了。这时我们需要一个容器,将这两部分隔离开,一方面是存储数据,另一方面要动态加载so。隔离了数据和算法,只要数据存在,我们就可以随意更新算法了。在开始编码之前,要先解决几个问题: 1、同一个so文件只会...
呵大官人 发布于 2个月前 阅读 456 点赞 1

Unity3D加密 外壳加密保护代码及资源

很多VR企业开发的软件有很多文件资源需要保护,而目前行业鲜有好的加密方案可供开发者使用。基于深思云授权平台,有一套代码及资源加密保护方案,可通过Virbox Protector加壳工具对代码及资源进行加壳,再配合精锐5加密锁或者云锁及软锁,可达到极高的安全性,可防止代码被反编译及资源被拷贝。 Unity3D主要使用C#语法和开源mono运行开发商的代码逻辑,所有代码都不是编译到EXE,而是位于{APP}\build\game_Data\Managed\Assembly-CSharp.dll(注意Unity-2017位置略有不同)。而且mono执行原理跟微软.NET Framework兼容但是执行原理完全不一样。传统的.NET Framework加壳全部失效,因为Assembly-CSharp.dll不是PE格式的动态库也不是.NET的动态库,无法从.NET Framework加载,而是由mono.dll读取 Assembly-CSharp.dll的里面C#脚本解释执行。 基于此背景,深思研发的加壳工具Virbox Protector可对Unity3D开发的软件进行一键加壳,保护软件的安全。 Virbox Protector (Unity3D 加密外壳) 国内首家Unity3D的保护外壳,解决代码反编译和内存反dump代码,从而解决软件盗版与算法抄袭。 Virbox Protector核心优点: 1.一键加密你的代码逻辑,无法反编译,无法dump内存。 2.不降低游...
不会写书 发布于 2个月前 阅读 344 评论 2

结合unity项目开发浅谈设计模式的六大原则(一)

  面向对象,六大原则,设计模式,数据结构与算法,这些知识点都是脱离编程语言存在的。也就意味着它们“比较抽象”,抽象的东西也就意味着从学习、理解到运用所需要花费的时间会比较长。     今天我们就主要谈谈设计模式的六大原则:     首先,六大原则是谁?     它们分别是单一职责、开闭原则原则、依赖倒置原则、里氏替换原则、接口隔离原则、迪米特原则。     其次,为什么需要学习这六大原则?     六大原则是我们提高面向对象编程代码质量的必备原则,另外还是我们理解设计模式的必备前提。    弄清楚了学习对象和学习目的,下面就可以进入正题了,这六大设计原则本质上是什么,又分别是用来做什么的,实际中的运用又有哪些? 一、单一职责 定义:就一个类而言,应该仅有一个引起它变化的原因。简单点理解就是,就是一个类只负责一项职责(功能)。 从生活中的具体示例理解单一职责, 饿了么:单一职责是点餐 2306:单一职责是定火车票 生活中的事物的单一性是为了集中(精力/财力/物力),然后把这一点做到最好,只有这样才能更有竞争力。 而编程中的单一性也是为了集中,一个类它的功能,作用,用途集中到一点。这样可以避免代码冗余,方便管理,方便...
coding_ 发布于 2个月前 阅读 182

收集微信跳一跳的辅助

微信发布小游戏后,跳一跳作为第一款开屏小游戏,火爆朋友圈,然而火爆的夜幕下,在发布当天就出现了辅助软件,这里收集了数个GitHub上的开源项目,简单总结下,以作分享。
dingdayu 发布于 6个月前 阅读 3135 评论 4

2017——关于坚持了一年的事情

2017,你对自己成长负责了么
wier 发布于 6个月前 阅读 2333 评论 15 点赞 11

如何预估索引性能?

掌握快速预估索引耗时的能力
wier 发布于 6个月前 阅读 2232 评论 10 点赞 9

什么是DB的三星索引

如果你从网上或者教程中,查询索引设计相关规范,常常会看到一些不知所云的规则和注意事项,这些规则看似很有道理,但应用时,仍然一头雾水,那么究竟如何来做?
wier 发布于 6个月前 阅读 708 评论 3 点赞 1

Sql优化器究竟帮你做了哪些工作?

关系型数据库的一大优势之一,用户无需关心数据的访问方式,那么优化器是如何做到的,我们要如何优化?
wier 发布于 7个月前 阅读 3276 评论 22 点赞 8

DB——数据的读取和存储方式

数据库是我们常用的一些存储数据的方式,我们从读写来了解RDBMS的存取结构
wier 发布于 7个月前 阅读 2428 评论 5 点赞 6

Unity太空大战游戏-Socket网络通信教学示例

U3D游戏与WeaveSocket网络通信教学示例
dreamsfly 发布于 7个月前 阅读 1238 点赞 2

一致性hash在DynamoDB上的应用

Dynamo是Amazon提供的一个分布式存储NoSQL 数据库,它采用去中心化、松散耦合的方式,组成一个支持高度扩展的Key/Value 数据库,本篇我们着重分析一下,它是如何采用采用一致性hash而达到可高度扩展的。
wier 发布于 7个月前 阅读 1224 评论 1 点赞 1

娱乐开发两不误,10 大开源游戏框架推荐

游戏技术的不断发展和游戏模式的不断创新,给技术专家带来了许多新的挑战。
编辑部的故事 发布于 8个月前 阅读 7107 评论 19 点赞 6

如何合理的规划一次jvm性能调优

JVM性能调优涉及到方方面面的取舍,往往是牵一发而动全身,需要全盘考虑各方面的影响,那么如何进行一次优雅的调优,提升应用的性能?
wier 发布于 8个月前 阅读 3085 评论 9 点赞 11

Opengl红宝书第一个例子_VS2017_glew2.1_x64_记录成功的代码段

忙了一下午, 终于能运行: Opengl编程指南里, 书里代码不全, 好不容量才在网上找到原代码 https://blog.csdn.net/candycat1992/article/details/39676669 不知为何,之前下载glew2.1压缩包会出错, 不能解压, 今天下下来倒是好的. 使用 [管理 NuGet 程序包] 下载下来一个glut的包. 这个包里也带有glew32.lib x64环境下能用. 之前曾出现过LNK2001错误, 不知为何. 书上有用到 glutInitContextVersion 这个函数, 我这里是用不了的. 还好不是必要的.   2018-05-05_研究新版本glew2.1.cpp:  // 2018-05-05_开发环境再试验.cpp: 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <GL/glew.h> #include <GL/glut.h> #include "LoadShaders.h" enum VAO_IDs { Triangles, NumVAOs }; enum Buffer_IDs { ArrayBuffer, NumBuffers }; enum Attrib_IDs { vPosition = 0 }; #define BUFFER_OFFSET(offset) ((void*)(offset)) GLuint VAOs[NumVAOs]; GLuint Buffers[NumBuffers]; const GLuint NumVertices = 6; // 书p21 void display() { glClear(GL_COLOR_BUFFER_BIT); glBindVertexArray(VAOs[Triangles]); glDrawArrays(GL_TRIANGLES, 0, ...
洛克人杰洛 发布于 2个月前 阅读 21

python海龟作图20秒完成小猪佩奇,附源码!

Python(发音:英[?pa?θ?n],美[?pa?θɑ:n]),是一种面向对象、直译式电脑编程语言,也是一种功能强大的通用型语言,已经具有近二十年的发展历史,成熟且稳定。它包含了一组完善而且容易理解的标准库,能够轻松完成很多常见的任务。它的语法非常简捷和清晰,与其它大多数程序设计语言不一样,它使用缩进来定义语句。 Python支持命令式程序设计、面向对象程序设计、函数式编程、面向切面编程、泛型编程多种编程范式。与Scheme、Ruby、Perl、Tcl等动态语言一样,Python具备垃圾回收功能,能够自动管理存储器使用。它经常被当作脚本语言用于处理系统管理任务和网络程序编写,然而它也非常适合完成各种高级任务。Python虚拟机本身几乎可以在所有的作业系统中运行。使用一些诸如py2exe、PyPy、PyInstaller之类的工具可以将Python源代码转换成可以脱离Python解释器运行的程序。     今年社交平台上最火的带货女王是谁?范冰冰?杨幂?Angelababy?不,是猪猪女孩小猪佩奇。 如果你经常用抖音、快手、B站、知乎、微博……或者类似的任何一个内容或社交平台,那你很大概率能答出这道题:     答案是:掌声送给社会人。 随着口号喊响,社会人小猪佩奇似乎一夜之间就在短视频平...
猫咪编程 发布于 3周前 阅读 20 评论 1

竟然这就是面向对象的游戏设计?!

从程序角度考虑,许多 JavaScript 都基于循环和大量的 if/else 语句。在本文中,我们可了解一种更聪明的做法 — 在 JavaScript 游戏中使用面向对象来设计。本文将概述原型继承和使用 JavaScript 实现基本...
柳猫 发布于 2天前 阅读 261 评论 3

使用 pixi.js 开发微信小游戏

闲来无事就又折腾起微信小游戏来,其实国内几大游戏引擎都支持一键发布到微信小游戏。但是对`pixi.js`情有独钟,所以开始进入正题。 目标:把`pixi-filters`的在线`demo`放到微信小游戏上。 首先通过微信开发工具建立一个空项目,同时引入`pixi.js`和官方提供的`weapp-adapter.js`。 在`game.js`里写入: ``` import './libs/weapp-adapter' import * as PIXI from './libs/pixi.min' const {pixelRatio, windowWidth, windowHeight} = wx.getSystemInfoSync() new PIXI.Application({ width: windowWidth * pixelRatio, height: windowHeight * pixelRatio, view: canvas }) ``` 一切正常的话,结果应该如下图。 ![image.png](https://upload-images.jianshu.io/upload_images/56079-ca6031ec1b48f4e5.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 在把`pixi-filters`的`demo`搬过来之前,先把之前遇到的坑填一下。 我们先在场景中添加一张图片,然后让他点击隐藏。 ![image.png](https://upload-images.jianshu.io/upload_images/56079-9ea1cb6119c53cf5.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 问题是,我们点击非但不消失,还报错了。 ...
雨里有条鱼 发布于 2个月前 阅读 575 评论 4 点赞 1

记一次 skynet 中使用 skynet.queue 给消息加锁时的问题

应该大多数 skynet 项目都是以 Lua 作为主开发语言。在使用 Lua 编写 skynet 服务时,基本的执行单元是 coroutine 。当有消息到达使用 Lua 编写的服务时,skynet 都会起一个 coroutine 来处理消息,当某个 coroutine 涉及到异步让出执行时,skynet 便继续执行下一条消息,等到该 coroutine 的唤醒消息到达时便会继续执行。 比如客户端先发送 a 消息,再发送 b 消息,而 a 中有异步操作,b 中无异步操作,则 b 会先比 a 处理完返回到客户端。若 a 中需要扣除金币,在异步前检查了金币满足,在异步返回后还需要再次检查金币数量,因为这个时候金币可能被修改而不满足条件了。在游戏开发中,有时我们想保持处理客户端发送消息的顺序性。比如某玩法,客户端依次发送消息 a 和 b ,而我们确实想 b 一定要在 a 之后返回,这个时候就需要用到 `skynet.queue` 。具体的代码在 skynet 中 lualib/skynet/queue.lua 文件中。`skynet.queue` 函数执行后会返回一个 closure 而这个 closure 的参数是函数以及这个函数的参数。若对这个 closure 传入参数 f1 f2 f3 f4 等函数及参数,那么这 4 个函数将会按照顺序依次执行,假设顺序是 f1 -> f2 -> f3 -> f4 ,若其中有函数比如 f2 中间会让...
ylme 发布于 3个月前 阅读 47

游戏中人工智能的优化

建立一个简单的游戏引擎和人工智能NPC后,我们需要对他们进行优化,如何建立,可以参考我在评论里的链接 语义结点的抽象 不过我们在这篇博客的讨论中是不能仅停留在能解决需求的层面上。目前的方案至少还存在一个比较严重的问题,那就是逻辑复用性太差。组合状态需要 coding 的逻辑太多了,具体的状态内部逻辑需要人肉维护,更可怕的是需要程序员来人肉维护,再多几个组合状态简直不敢想象。程序员真的没这么多时间维护这些东西好么。所以我们应该尝试抽象一下组合状态是否有一些通用的设计 pattern。 为了解决这个问题,我们再对这几个状态的分析一下,可以对结点类型进行一下归纳。 结点基本上是分为两个类型:组合结点、原子结点。 如果把这个状态迁移逻辑体看做一个树结构,那其中组合结点就是非叶子结点,原子结点就是叶子结点。 对于组合结点来说,其行为是可以归纳的。 巡逻结点,不考虑触发进入战斗的逻辑,可以归纳为一种具有这样的行为的组合结点:依次执行每个子结点(移动到某个点、休息一会儿),某个子结点返回 Success 则执行下一个,返回 Failure 则直接向上返回,返回 Continue 就把 Continuation 抛出去。命名具有这样语义的结点为 Sequence。 设想攻击状...
柳猫 发布于 3天前 阅读 203 评论 1

cocos creator 文字描边效果

公司做的微信小游戏,里面涉及文字描边的效果,找了一下,发现官方自带了一个LabelOutline脚本,只要在Label的节点上,挂上LabelOutline脚本,设置下文字和描边的颜色,描边的宽度,就OK了
乐_然 发布于 1个月前 阅读 77

Unity3d中的Tcp socket通信(开源)

开源地址:https://github.com/hiramtan/HiSocket_unity # HiSocket_unity ---------------------- ### 如何使用 可以从此链接下载最新的unity package: [![Github Releases](https://img.shields.io/github/downloads/atom/atom/total.svg)](https://github.com/hiramtan/HiSocket_unity/releases) --------- ### 功能 - Tcp socket - Udp socket - 可伸缩字节表 - 高性能字节块缓冲区 - 消息注册和回调 - 二进制字节消息封装 - Protobuf消息封装 - AES消息加密 ### 详情 - Tcp和Udp都是采用主线程异步连接的方式(避免主线程阻塞). - 启动发送线程和接收线程处理数据传输(提高性能). - 供用户调用发送或接受数据的API在主线程中(方便直接操作unity的组件) - 监听连接事件获得当前的连接状态. - 监听接收事件获得接收的数据. - 存在字节数组队列,方便用来测试和数据重发. - 高性能字节缓冲区避免内存空间重复申请,减少GC. - 如果使用Tcp协议需要实现IPackage接口处理粘包拆包. - Ping接口因为mono底层的bug会在.net2.0平台报错(.net 4.6 没有问题,或者也可以使用unity的接口获得Ping,工程中有示例代码) --------- ### 细节 - Tcp [Transmission Control Protocol](https://...
小海oschina 发布于 3个月前 阅读 75

游戏引擎开发中需要注意的循环结构

我们在游戏设计和开发中,尤其是引擎开发中,逻辑循环是一个重要组成部分,循环决定了游戏的基础逻辑和运行方式,在不同的开发环境和语言下,对于循环的释义甚至相差甚远,那么我想和大家分享的是在Silverlight游...
柳猫 发布于 23小时前 评论 1

欧拉角

![输入图片说明](https://static.oschina.net/uploads/img/201806/05133744_RMIC.png "在这里输入图片标题") ![输入图片说明](https://static.oschina.net/uploads/img/201806/05133804_csrT.png "在这里输入图片标题") ![输入图片说明](https://static.oschina.net/uploads/img/201806/05133818_CqQg.png "在这里输入图片标题") ![输入图片说明](https://static.oschina.net/uploads/img/201806/05133830_D2Zb.png "在这里输入图片标题")
丽丽鲲 发布于 3周前 阅读 24

Egret 2D(1)之项目配置和资源加载

项目配置 比如你创建了一个EUI项目,我想加入game类。 在项目egretProperties.json中modules中添加{ "name": "egret" }后保存。 保存后Wing左上角点编译,编译成功后。当然也可以使用命令行egret build -e  。编译后按F5编译运行 资源加载  //继承eui.UILayer class Main extends eui.UILayer { /** * 加载进度界面 * Process interface loading */ private loadingView: LoadingUI; public constructor() { super(); this.addEventListener(egret.Event.ADDED_TO_STAGE, this.onAddToStage, this); } private onAddToStage(event: egret.Event) { egret.lifecycle.addLifecycleListener((context) => { // custom lifecycle plugin context.onUpdate = () => { console.log('hello,world') } }) egret.lifecycle.onPause = () => { egret.ticker.pause(); } egret.lifecycle.onResume = () => { egret.ticker.resume(); } //设置加载进度界...
Chason-洪 发布于 3个月前 阅读 56

Egret 2D(10)Tween缓动动画

确保项目支持 Tween 在 Egret 项目中,修改egretProperties.json中的modules,添加 tween 模块: { "name": "tween" } 在项目所在目录内执行一次引擎编译: egret build -e Tween缓动基本用法 Tween中封装了最常用的缓动动画功能,包括动画时间设定,缓动动画控制, 缓动效果控制等等。下面是一个缓动动画示例。 var shp:egret.Shape = new egret.Shape(); shp.graphics.beginFill( 0x00ff00 ); shp.graphics.drawRect( 0, 0, 100, 100 ); shp.graphics.endFill(); this.addChild( shp ); //获得需要缓动的显示对象 var tw=egret.Tween.get(shp); //to方法开始缓动 tw.to({x:150},1000) 缓动对象是用 egret.Tween.get() 获得的,该方法需要传入用于缓动的目标对象,即例中的 shp。,然后通过 to() 方法给出需要设置缓动的具体参数。to() 的第一个参数用于设置缓动属性以及目标值:例中的属性为 x ,目标值为 150,即会将 shp 从当前 x 坐标位置缓动到 x 坐标为 150;to() 的第二个参数为缓动时间长度,单位为毫秒,例中的缓动长度为 1000毫秒,即 1 秒 。 缓动对象的基本控制参数 在定义缓动时,还...
Chason-洪 发布于 3个月前 阅读 49

矩阵的初等变换

原文地址 : https://www.jianshu.com/p/51bc27890e13 对于如下矩阵: 矩阵 我们可以对它做这么几种操作:     交换任意两行:比如交换前两行得到 交换前两行     用非0常数乘某一行全部元素:比如第三行乘以2得 末行乘2     某一行加上另一行的k倍:我们使用上面2倍的结果,将其加到第一行得 第一行加第三行 以上三种操作统称矩阵的“初等行变换”:     对调两行(第i行和第j行),记作   2.以非零常数 k 乘某一行(第i行)的所有元素,记作 3.某一行加上另一行的 k 倍,记作 其逆变换如下: 继续对调这两行 这一行的元素除回去 这一行减去那一行的k倍   如果这些操作针对的对象是矩阵的列,就称为“初等列变换”。 进行了有限次初等变换的矩阵,和原来的矩阵等价。如果指进行了行变换,则称为“行等价”;只进行了列变换,称为“列等价”。 由单位矩阵 E 经过一次初等变换得到的矩阵称为初等矩阵。 “左行右列”定则 对一个一般矩阵执行一次初等变换,等价于用一个被执行过同样初等变换的初等矩阵同这个矩阵相乘。 设A是一个 m×n 矩阵, 对 A 施行一次初等行变换,相当于在 A 的左边乘以相应的 m 阶初等矩阵; 对 A 施行一次初等列变换,相当于在 A 的右边乘...
WeiXiaodong 发布于 1周前 阅读 23

Egret 中eui的应用

default.thm.json 如果项目中没有 default.thm.json,手动新建,然后里面输入{ "autoGenerateExmlsList": true,},然后编译就会自动生成一些路径到exmls中 { "autoGenerateExmlsList": true, "exmls": [ "resource/exml/classicBtn.exml", "resource/exml/headerDiamondsSkin.exml", "resource/exml/headerGlodSkin.exml" ], "skins": {} } 所需要的文件 可到eui的demo中拷贝AssetAdapter.ts和ThemeAdapter解析材料和解析主题两个文件到项目中。然后在Math.ts中解析素材。下文有。 Main.ts 首先是Matin.ts继承eui.UILayer class Main extends eui.UILayer { /** * 加载进度界面 * Process interface loading */ private loadingView: LoadingUI; public constructor() { super(); } protected childrenCreated() { //注入自定义的素材解析器 let assetAdapter = new AssetAdapter(); egret.registerImplementation("eui.IAssetAdapter", assetAdapter); egret.registerImplementation("eui.IThemeAdapter", new ThemeAdapter()); egret.lifecycle.addLif...
Chason-洪 发布于 2个月前 阅读 74

Unity 利用射线实现弹孔效果

1、利用 Camera.main.ScreenPointToRay 从屏幕到鼠标点击位置生成一条射线。 2、利用 Physics.Raycast 发射射线,同时判断是否碰撞到目标物体。 3、通过 RaycastHit 获取射线所碰撞到的位置。 4、在目标位置生成一个弹孔预设体。  具体代码: using UnityEngine; public class ShootDemo : MonoBehaviour {     public GameObject holePrefab;     void Update()     {         //按下鼠标左键         if (Input.GetMouseButtonDown(0))         {             //返回一条从摄像机到鼠标位置的射线             Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);             //Debug.DrawRay(ray.origin, ray.direction, Color.red); //便于调试,可以在 Scene 试图中看到一条虚拟射线。             RaycastHit hitInfo;             //射线投射,如果碰撞到碰撞器则将碰撞信息存储在 RaycastHit 对象中,并且返回 true。             if (Physics.Raycast(ray, out hitInfo, 100F)) ...
大轩 发布于 2天前 阅读 1

以太坊游戏 日进斗金

历史刚刚被改写了! 在过去的 24 小时内,一位游戏开发者从以太坊游戏中获得了超过 50 万美元的收入! 我熟悉这些数据是因为我运行了一个名为 DappRadar 的网站。 它跟踪以太坊的大部分游戏,并根据 24 小时 的表现进行排名。 什么是以太坊游戏? 我们称这些游戏为以太坊游戏,因为它们的代码运行在以太坊区块链中。 通常不是所有的代码, 而是负责游戏主要逻辑的代码。 这对我来说有什么价值? 几乎所有的以太坊游戏都有一个共同点 - 它们都是开源的。 这意味着每个人都可以阅读游戏的代码, 并确保它没有任何不可告人的意图。 想象一下之前那些私有的 MMORPG 游戏服务器,管理员和所有者拥有严格的权限,用户无法出售所持有的 武器换取法币。 这是区块链的力量,没有腐败。 在区块链游戏中,开发者可以编写并开放这些权限,每个人都 可以阅读代码以确保其中没有作弊行为。 CryptoCountries是这些透明的以太坊游戏之一。 什么是 CryptoCountries? CryptoCountries 是一个以太坊游戏,你可以在虚拟地图上购买土地。 一旦你以特定的价格购买土地, 价格就会上涨,任何人都可以从你那里购买。 这时,你的钱包就会收到这笔钱。 基本上,如果有人 从你那里购买土地,你就会赚到...
智能合约 发布于 2个月前 阅读 42

电脑浏览器怎样模拟使用手机浏览器

这里以360极速浏览器为例,打开浏览器,进入百度首页为例,其它基于chromium的浏览器也一样 2 点击浏览器左上角位的设置菜单,选择“工具----开发者工具” 3 也可以通过在在网中空白位,右键“查看审查元素”来进入开发者工具,通用快捷键为"F12" 4 在开发者工具中,选择toggle device mode按钮,译文为“模式切换装置”,如图所示 5 可以看到浏览器的视窗变为手机视窗,还可以选择不同手机来进行模拟,如果列表中没有,可以选择edit进行 6 我们来访问一下手机端的网站,如百度视频,完全和手机上显示的一致 7 通过设置这些参数,可以设置分辨率、显示比例、还可以实现横屏、竖屏方式的显示!
乐_然 发布于 3周前 阅读 28

pygame常用函数及方法

# ----------窗口相关操作----------- # 创建窗口 scene = pygame.display.set_mode([屏幕宽,屏幕高]) # 设置窗口标题 pygame.display.set_caption("标题") # 设置窗口图标 pygame.display.set_icon(image) # 将图片绘制到窗口 scene.blit(image, (0, 0)) # ----------图像相关操作----------- # 加载图片 image = pygame.image.load("图片路径") # 获得图片矩形 -> Rect(x, y, width, height) rect = image.get_rect() # 移动矩形坐标 rect.move_ip(x, y) # 判断两个矩形是否相交 -> bool flag = pygame.Rect.colliderect(rect1,rect2) # ----------事件相关操作----------- # 获得所有事件列表 event_list = pygame.event.get() # 常见事件类型 # QUIT 关闭窗口 # MOUSEMOTION 鼠标拖动 # KEYDOWN 键盘按键 # 获得当前所有持续按键 bools_tuple bool_list = pygame.key.get_pressed() # ----------音效相关操作----------- # 加载背景音乐 pygame.mixer.music.load("./res/bg2.ogg") # 播放背景音乐,-1表示循环播放 pygame.mixer.music.play(-1) # 加载音效 self.bomb = pygame.mix...
十年磨一剑3344 发布于 3周前 阅读 33

Unity Mono DLL加密

基本思想是把C#代码生成的dll 加密一下 无法直接破解dll,但是由于二进制加密代码是写在mono 里面的,拿到一样很容易破解, 1.层次1:     加密C#生成的dll  2.层次2     加密修改mono了时候的so dll什么的   先实现第一层次的windows 版本:     1.下载mono源代码  https://github.com/Unity-Technologies/mono/tree/unity-5.6     2.用vs2010 sp1(一定要用这个版本) 编译msvc/mono.sln 输出后的文件在下的           mono-unity-5.6\builds\embedruntimes\win32\mono.dll     3.二次处理 dll buffer 的函数是 image.c 的mono_image_open_from_data_with_name 可在这里面实现解密         然后替换即可     小提示: 如果编译期间出现glib-2.0.lib 找不到 那么把生成的eglib.lib 重命名为 glib-2.0.lib  一些其他的gtk lib 网上下载2.0 版本即可      ...
梦想游戏人 发布于 2周前 阅读 9

Egret 2D(2)--基本概念

  显示对象的属性 alpha:透明度 width:宽度 height:高度 rotation:旋转角度 scaleX:横向缩放 scaleY:纵向缩放 skewX:横向斜切 skewY:纵向斜切 visible:是否可见 x:X轴坐标值 y:Y轴坐标值 anchorOffsetX:对象绝对锚点X anchorOffsetY:对象绝对锚点Y name:类似标识 核心显示类 类 描述 DisplayObject 显示对象基类,所有显示对象均继承自此类 Bitmap 位图,用来显示图片 Shape 用来显示矢量图,可以使用其中的方法绘制矢量图形 TextField 文本类 BitmapText 位图文本类 DisplayObjectContainer 显示对象容器接口,所有显示对象容器均实现此接口 Sprite 带有矢量绘制功能的显示容器 Stage 舞台类 自定义显示对象类 自定义显示对象类需要继承自 DisplayObject的具体子类,例如Shape或者TextField。 class MyGrid extends egret.Shape{ public constructor(){ super(); this.drawGrid(); } private drawGrid(){ this.graphics.beginFill( 0x0000ff ); this.graphics.drawRect( 0, 0, 50,50 ); this.graphics.endFill(); this.graphics.beginFill( 0x0000ff ); this.graphics.drawRect( 50, ...
Chason-洪 发布于 3个月前 阅读 10

游戏中人工智能的优化

建立一个简单的游戏引擎和人工智能NPC后,我们需要对他们进行优化,如何建立,可以参考我在评论里的链接 语义结点的抽象 不过我们在这篇博客的讨论中是不能仅停留在能解决需求的层面上。目前的方案至少还存在一个比较严重的问题,那就是逻辑复用性太差。组合状态需要 coding 的逻辑太多了,具体的状态内部逻辑需要人肉维护,更可怕的是需要程序员来人肉维护,再多几个组合状态简直不敢想象。程序员真的没这么多时间维护这些东西好么。所以我们应该尝试抽象一下组合状态是否有一些通用的设计 pattern。 为了解决这个问题,我们再对这几个状态的分析一下,可以对结点类型进行一下归纳。 结点基本上是分为两个类型:组合结点、原子结点。 如果把这个状态迁移逻辑体看做一个树结构,那其中组合结点就是非叶子结点,原子结点就是叶子结点。 对于组合结点来说,其行为是可以归纳的。 巡逻结点,不考虑触发进入战斗的逻辑,可以归纳为一种具有这样的行为的组合结点:依次执行每个子结点(移动到某个点、休息一会儿),某个子结点返回 Success 则执行下一个,返回 Failure 则直接向上返回,返回 Continue 就把 Continuation 抛出去。命名具有这样语义的结点为 Sequence。 设想攻击状...
柳猫 发布于 3天前 阅读 203 评论 1

竟然这就是面向对象的游戏设计?!

从程序角度考虑,许多 JavaScript 都基于循环和大量的 if/else 语句。在本文中,我们可了解一种更聪明的做法 — 在 JavaScript 游戏中使用面向对象来设计。本文将概述原型继承和使用 JavaScript 实现基本...
柳猫 发布于 2天前 阅读 261 评论 3

骰子游戏代码开源地址

因为阿里云现在服务器已经停用了,所以上面的配置已经失效。 服务端开源地址:https://gitee.com/goalya/chat4.git 客户端开源地址:https://gitee.com/goalya/client4.git 具体运行界面请参考之前的博客,谢谢!
算法之名 发布于 4天前 阅读 33

使用 pixi.js 开发微信小游戏

闲来无事就又折腾起微信小游戏来,其实国内几大游戏引擎都支持一键发布到微信小游戏。但是对`pixi.js`情有独钟,所以开始进入正题。 目标:把`pixi-filters`的在线`demo`放到微信小游戏上。 首先通过微信开发工具建立一个空项目,同时引入`pixi.js`和官方提供的`weapp-adapter.js`。 在`game.js`里写入: ``` import './libs/weapp-adapter' import * as PIXI from './libs/pixi.min' const {pixelRatio, windowWidth, windowHeight} = wx.getSystemInfoSync() new PIXI.Application({ width: windowWidth * pixelRatio, height: windowHeight * pixelRatio, view: canvas }) ``` 一切正常的话,结果应该如下图。 ![image.png](https://upload-images.jianshu.io/upload_images/56079-ca6031ec1b48f4e5.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 在把`pixi-filters`的`demo`搬过来之前,先把之前遇到的坑填一下。 我们先在场景中添加一张图片,然后让他点击隐藏。 ![image.png](https://upload-images.jianshu.io/upload_images/56079-9ea1cb6119c53cf5.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 问题是,我们点击非但不消失,还报错了。 ...
雨里有条鱼 发布于 2个月前 阅读 575 评论 4 点赞 1

「华为云」云中优选惠,全场低至2折,6.19-6.30开抢,签到抽P20

广告
华为云年中钜惠,注册抽免费高配(2核4G)云服务器,单人成团2折起抢购热销云产品;云服务器、数据库、安全防护、大数据等150+云产品,更有精彩好礼送不停!
华为云

cocos creator 文字描边效果

公司做的微信小游戏,里面涉及文字描边的效果,找了一下,发现官方自带了一个LabelOutline脚本,只要在Label的节点上,挂上LabelOutline脚本,设置下文字和描边的颜色,描边的宽度,就OK了
乐_然 发布于 1个月前 阅读 77

矩阵的初等变换

原文地址 : https://www.jianshu.com/p/51bc27890e13 对于如下矩阵: 矩阵 我们可以对它做这么几种操作:     交换任意两行:比如交换前两行得到 交换前两行     用非0常数乘某一行全部元素:比如第三行乘以2得 末行乘2     某一行加上另一行的k倍:我们使用上面2倍的结果,将其加到第一行得 第一行加第三行 以上三种操作统称矩阵的“初等行变换”:     对调两行(第i行和第j行),记作   2.以非零常数 k 乘某一行(第i行)的所有元素,记作 3.某一行加上另一行的 k 倍,记作 其逆变换如下: 继续对调这两行 这一行的元素除回去 这一行减去那一行的k倍   如果这些操作针对的对象是矩阵的列,就称为“初等列变换”。 进行了有限次初等变换的矩阵,和原来的矩阵等价。如果指进行了行变换,则称为“行等价”;只进行了列变换,称为“列等价”。 由单位矩阵 E 经过一次初等变换得到的矩阵称为初等矩阵。 “左行右列”定则 对一个一般矩阵执行一次初等变换,等价于用一个被执行过同样初等变换的初等矩阵同这个矩阵相乘。 设A是一个 m×n 矩阵, 对 A 施行一次初等行变换,相当于在 A 的左边乘以相应的 m 阶初等矩阵; 对 A 施行一次初等列变换,相当于在 A 的右边乘...
WeiXiaodong 发布于 1周前 阅读 23

pygame常用函数及方法

# ----------窗口相关操作----------- # 创建窗口 scene = pygame.display.set_mode([屏幕宽,屏幕高]) # 设置窗口标题 pygame.display.set_caption("标题") # 设置窗口图标 pygame.display.set_icon(image) # 将图片绘制到窗口 scene.blit(image, (0, 0)) # ----------图像相关操作----------- # 加载图片 image = pygame.image.load("图片路径") # 获得图片矩形 -> Rect(x, y, width, height) rect = image.get_rect() # 移动矩形坐标 rect.move_ip(x, y) # 判断两个矩形是否相交 -> bool flag = pygame.Rect.colliderect(rect1,rect2) # ----------事件相关操作----------- # 获得所有事件列表 event_list = pygame.event.get() # 常见事件类型 # QUIT 关闭窗口 # MOUSEMOTION 鼠标拖动 # KEYDOWN 键盘按键 # 获得当前所有持续按键 bools_tuple bool_list = pygame.key.get_pressed() # ----------音效相关操作----------- # 加载背景音乐 pygame.mixer.music.load("./res/bg2.ogg") # 播放背景音乐,-1表示循环播放 pygame.mixer.music.play(-1) # 加载音效 self.bomb = pygame.mix...
十年磨一剑3344 发布于 3周前 阅读 33

一个支持多人在线联网的骰子游戏,个人开发

本人开发了一个玩骰子的游戏,基于Netty4技术。客户端写的比较简单,界面如下 安卓界面 Windows界面如下 现在想寻求有兴趣一起开发的伙伴。 客户端下载地址 安卓http://47.106.151.202/app-release.apk Windows版本http://47.106.151.202/chatclient.rar,注:windows版本需要安装jdk1.7或以上才可以使用。 之后我可能会把源代码放到github或者码云上,希望大家能够给一点建议。  
算法之名 发布于 2周前 阅读 33 评论 1

欧拉角

![输入图片说明](https://static.oschina.net/uploads/img/201806/05133744_RMIC.png "在这里输入图片标题") ![输入图片说明](https://static.oschina.net/uploads/img/201806/05133804_csrT.png "在这里输入图片标题") ![输入图片说明](https://static.oschina.net/uploads/img/201806/05133818_CqQg.png "在这里输入图片标题") ![输入图片说明](https://static.oschina.net/uploads/img/201806/05133830_D2Zb.png "在这里输入图片标题")
丽丽鲲 发布于 3周前 阅读 24

Egret 中eui的应用

default.thm.json 如果项目中没有 default.thm.json,手动新建,然后里面输入{ "autoGenerateExmlsList": true,},然后编译就会自动生成一些路径到exmls中 { "autoGenerateExmlsList": true, "exmls": [ "resource/exml/classicBtn.exml", "resource/exml/headerDiamondsSkin.exml", "resource/exml/headerGlodSkin.exml" ], "skins": {} } 所需要的文件 可到eui的demo中拷贝AssetAdapter.ts和ThemeAdapter解析材料和解析主题两个文件到项目中。然后在Math.ts中解析素材。下文有。 Main.ts 首先是Matin.ts继承eui.UILayer class Main extends eui.UILayer { /** * 加载进度界面 * Process interface loading */ private loadingView: LoadingUI; public constructor() { super(); } protected childrenCreated() { //注入自定义的素材解析器 let assetAdapter = new AssetAdapter(); egret.registerImplementation("eui.IAssetAdapter", assetAdapter); egret.registerImplementation("eui.IThemeAdapter", new ThemeAdapter()); egret.lifecycle.addLif...
Chason-洪 发布于 2个月前 阅读 74

Cocos Creator屏幕适配

本文主要讨论如果在Cocos Creator上实现不同的屏幕适配方案,补充官方文档的说明。 Cocos2d-JS屏幕适配 在Cocos2d-JS中,设计分辨率到设备分辨率的适配方案有5种,分别是: cc.ResolutionPolicy.EXACT_FIT cc.ResolutionPolicy.SHOW_ALL cc.ResolutionPolicy.NO_BORDER cc.ResolutionPolicy.FIXED_HEIGHT cc.ResolutionPolicy.FIXED_WIDTH 关于这五种设计模式的具体效果网络上已经有非常多的博客介绍了,甚至自己写个代码测试下就知道了,这里就不再赘述。 在Cocos2d-JS中设置适配方案的API是: // 设置适配模式 cc.view.setResolutionPolicy(cc.ResolutionPolicy.FIXED_HEIGHT); // 设置设计分辨率尺寸和适配模式 cc.view,setSesignReolutionSize(960, 540, cc.ResolutionPolicy.FIXED_HEIGHT); // 设置资源分辨率到设计分辨率的缩放比例 cc.director.setContentScaleFactor(1); Cocos Creator屏幕适配 实现方式 Creator的屏幕适配主要是放在Canvas组件上实现的,所以每当创建一个新的场景时,默认都会有个一个Canvas对象在层级管理器上,游戏内其它的节点都应该放在Canvas节点下,这样才能有效的在web浏览器上进行适配。 Canvas节点 Canvas组件 鼠标点选层级管理器上的...
乐_然 发布于 1个月前 阅读 8

cocos官网例子

玩一玩撒,就只抄了一半,会移动的小紫
无极之岚 发布于 3个月前 阅读 42

区块链项目应用白皮书大全

2018年各行业区块链应用、区块链项目、区块链白皮书的最新汇总清单:游戏与虚拟现实、社交与沟通、金融、物流与供应链、交通旅游、投资、保险、信息技术、商业与零售等。 ## 游戏与虚拟现实 - [VRT World](https://icorating.com/upload/whitepaper/cySPXygeN1c7hqaYC0ka5CKi7GQJE2DWkKXQjW7r.pdf) - [The Abyss ](https://icorating.com/upload/whitepaper/ju3sQibqPaHlxyrJ1T8ec7k3h06cPxtAPXHoGgfb.pdf) - [DreamTeam](https://icorating.com/upload/whitepaper/S3sGgC5U1pMFqcSKbiaqxcrQ9tsc31GlfRL58pIB.pdf) - [Sapphire Coin](https://icorating.com/upload/whitepaper/9HscTL3HZEbrA3lr2nBHuMa06X9SZqVIZFtXsKff.pdf) - [Virtual Universe](https://icorating.com/upload/whitepaper/tnrs6Qu1jJaRXcKx1zgwoF90lgLSQmRfqPVAZJBb.pdf) - [ConcertVR ](https://icorating.com/upload/whitepaper/sa8wQxMWT7nkXgE6g3mLH3rW8TfCVvVnv31wYlqd.pdf) - [Viarium](https://icorating.com/upload/whitepaper/MRigxmHUA0uG2TIZqaIusdAK5Pw5utECV8tCJ7Rt.pdf) - [VICoin](https://icorating.com/upload/whitepaper/wyFK83mYEEPZYFWyYB5kuSSpRr8SsxH9Q0ixdfFV.pdf) - [Escape](h...
智能合约 发布于 2个月前 阅读 126

以太坊游戏 日进斗金

历史刚刚被改写了! 在过去的 24 小时内,一位游戏开发者从以太坊游戏中获得了超过 50 万美元的收入! 我熟悉这些数据是因为我运行了一个名为 DappRadar 的网站。 它跟踪以太坊的大部分游戏,并根据 24 小时 的表现进行排名。 什么是以太坊游戏? 我们称这些游戏为以太坊游戏,因为它们的代码运行在以太坊区块链中。 通常不是所有的代码, 而是负责游戏主要逻辑的代码。 这对我来说有什么价值? 几乎所有的以太坊游戏都有一个共同点 - 它们都是开源的。 这意味着每个人都可以阅读游戏的代码, 并确保它没有任何不可告人的意图。 想象一下之前那些私有的 MMORPG 游戏服务器,管理员和所有者拥有严格的权限,用户无法出售所持有的 武器换取法币。 这是区块链的力量,没有腐败。 在区块链游戏中,开发者可以编写并开放这些权限,每个人都 可以阅读代码以确保其中没有作弊行为。 CryptoCountries是这些透明的以太坊游戏之一。 什么是 CryptoCountries? CryptoCountries 是一个以太坊游戏,你可以在虚拟地图上购买土地。 一旦你以特定的价格购买土地, 价格就会上涨,任何人都可以从你那里购买。 这时,你的钱包就会收到这笔钱。 基本上,如果有人 从你那里购买土地,你就会赚到...
智能合约 发布于 2个月前 阅读 42

记一次 skynet 中使用 skynet.queue 给消息加锁时的问题

应该大多数 skynet 项目都是以 Lua 作为主开发语言。在使用 Lua 编写 skynet 服务时,基本的执行单元是 coroutine 。当有消息到达使用 Lua 编写的服务时,skynet 都会起一个 coroutine 来处理消息,当某个 coroutine 涉及到异步让出执行时,skynet 便继续执行下一条消息,等到该 coroutine 的唤醒消息到达时便会继续执行。 比如客户端先发送 a 消息,再发送 b 消息,而 a 中有异步操作,b 中无异步操作,则 b 会先比 a 处理完返回到客户端。若 a 中需要扣除金币,在异步前检查了金币满足,在异步返回后还需要再次检查金币数量,因为这个时候金币可能被修改而不满足条件了。在游戏开发中,有时我们想保持处理客户端发送消息的顺序性。比如某玩法,客户端依次发送消息 a 和 b ,而我们确实想 b 一定要在 a 之后返回,这个时候就需要用到 `skynet.queue` 。具体的代码在 skynet 中 lualib/skynet/queue.lua 文件中。`skynet.queue` 函数执行后会返回一个 closure 而这个 closure 的参数是函数以及这个函数的参数。若对这个 closure 传入参数 f1 f2 f3 f4 等函数及参数,那么这 4 个函数将会按照顺序依次执行,假设顺序是 f1 -> f2 -> f3 -> f4 ,若其中有函数比如 f2 中间会让...
ylme 发布于 3个月前 阅读 47

简单的麻将ai算法

# 简单的麻将ai算法 写一个麻将的小游戏,需要自动出牌的ai算法,自己动手写了一个,虽然不是很聪明,但惊讶于它的简单,就记录一下。用python来实现的。 1. 先归纳麻将的规则。看似很复杂的麻将规则,可以用一个公式来表示。胡牌 = AA and (AAA or AAAA or ABC) AA:是麻将 AAA:是碰牌 AAAA:是杠牌 ABC:是连牌 2. 牌的表示。用数字来表示麻将牌,如11-19表示一万到九万,31-39表示一条到九条,51-59表示一筒到九筒。为什么条子和筒子之间要隔着10个数字呢,是为了算法的实现。 3. 判断胡牌。用一个递归函数来判断胡牌。牌cardList要求按牌面的数字大小,从小到大排列。 ```python # cardList: 是手上的牌,需要从小到大排列 def match(cardList, majiang=False): if len(cardList) == 0 and majiang: return True rst = False # AA if not majiang and len(cardList) >= 2 and cardList[0] == cardList[1]: list1 = [] + cardList list1.pop(0) list1.pop(0) rst = match(list1, True) # AAA if not rst and len(cardList) >= 3 and cardList[0] == cardList[1] == cardList[2]: list1 = [] + cardList list1.pop(0) list1.pop(0) list1.pop(0) rst = match(list1, ma...
kyle960 发布于 2个月前 阅读 40

电脑浏览器怎样模拟使用手机浏览器

这里以360极速浏览器为例,打开浏览器,进入百度首页为例,其它基于chromium的浏览器也一样 2 点击浏览器左上角位的设置菜单,选择“工具----开发者工具” 3 也可以通过在在网中空白位,右键“查看审查元素”来进入开发者工具,通用快捷键为"F12" 4 在开发者工具中,选择toggle device mode按钮,译文为“模式切换装置”,如图所示 5 可以看到浏览器的视窗变为手机视窗,还可以选择不同手机来进行模拟,如果列表中没有,可以选择edit进行 6 我们来访问一下手机端的网站,如百度视频,完全和手机上显示的一致 7 通过设置这些参数,可以设置分辨率、显示比例、还可以实现横屏、竖屏方式的显示!
乐_然 发布于 3周前 阅读 28

Egret 2D(6)--碰撞检测和文本

矩形碰撞检测 碰撞检测,判断显示对象是否与一点相交。 ar isHit:boolean = shp.hitTestPoint( x: number, y:number ); shp 是待检测的显示对象,(x, y)是待检测的点的位置。如果发生碰撞,则方法返回 true,如果没有发生碰撞,则返回 false。 像素碰撞检测 像素碰撞检测,是判断显示对象的图案(非透明区域)是否与一点相交。同样使用 hitTestPoint() 方法。 相比于矩形碰撞检测,增加了第三个参数 true ,表示要使用像素碰撞检测。 var isHit:boolean = shp.hitTestPoint( x: number, y:number, true:boolean ); 注意:大量使用像素碰撞检测,会消耗更多的性能. 矩形碰撞检测,是判断显示对象的包围盒是否与一点相交;而像素碰撞检测,是判断显示对象的图案(非透明区域)是否与一点相交。 普通文本 var label:egret.TextField = new egret.TextField(); label.text = "This is a text!"; this.addChild( label ); 输入文本 var txInput:egret.TextField = new egret.TextField; //设置文本类型为输入文本 txInput.type = egret.TextFieldType.INPUT; txInput.width = 282; txInput.height = 43; txInput.text="hello world"; txInput.textColor = 0x000000; this.addCh...
Chason-洪 发布于 3个月前 阅读 88

少儿编程Scratch

https://scratch.mit.edu/
swingcoder 发布于 2个月前 阅读 22

求助:TiledMap如何旋转对象呢?

比如我要旋转一个梯子的角度,单纯在TiledMap旋转角度好像没有效果。那是要用代码来控制角度,还是说只能通过导入相对应的斜的图片才可以呢?
花谢自相惜 发布于 4天前 阅读 2 点赞 1

Unity 利用射线实现弹孔效果

1、利用 Camera.main.ScreenPointToRay 从屏幕到鼠标点击位置生成一条射线。 2、利用 Physics.Raycast 发射射线,同时判断是否碰撞到目标物体。 3、通过 RaycastHit 获取射线所碰撞到的位置。 4、在目标位置生成一个弹孔预设体。  具体代码: using UnityEngine; public class ShootDemo : MonoBehaviour {     public GameObject holePrefab;     void Update()     {         //按下鼠标左键         if (Input.GetMouseButtonDown(0))         {             //返回一条从摄像机到鼠标位置的射线             Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);             //Debug.DrawRay(ray.origin, ray.direction, Color.red); //便于调试,可以在 Scene 试图中看到一条虚拟射线。             RaycastHit hitInfo;             //射线投射,如果碰撞到碰撞器则将碰撞信息存储在 RaycastHit 对象中,并且返回 true。             if (Physics.Raycast(ray, out hitInfo, 100F)) ...
大轩 发布于 2天前 阅读 1

竟然这就是面向对象的游戏设计?!

从程序角度考虑,许多 JavaScript 都基于循环和大量的 if/else 语句。在本文中,我们可了解一种更聪明的做法 — 在 JavaScript 游戏中使用面向对象来设计。本文将概述原型继承和使用 JavaScript 实现基本...
柳猫 发布于 2天前 阅读 261 评论 3

游戏中人工智能的优化

建立一个简单的游戏引擎和人工智能NPC后,我们需要对他们进行优化,如何建立,可以参考我在评论里的链接 语义结点的抽象 不过我们在这篇博客的讨论中是不能仅停留在能解决需求的层面上。目前的方案至少还存在一个比较严重的问题,那就是逻辑复用性太差。组合状态需要 coding 的逻辑太多了,具体的状态内部逻辑需要人肉维护,更可怕的是需要程序员来人肉维护,再多几个组合状态简直不敢想象。程序员真的没这么多时间维护这些东西好么。所以我们应该尝试抽象一下组合状态是否有一些通用的设计 pattern。 为了解决这个问题,我们再对这几个状态的分析一下,可以对结点类型进行一下归纳。 结点基本上是分为两个类型:组合结点、原子结点。 如果把这个状态迁移逻辑体看做一个树结构,那其中组合结点就是非叶子结点,原子结点就是叶子结点。 对于组合结点来说,其行为是可以归纳的。 巡逻结点,不考虑触发进入战斗的逻辑,可以归纳为一种具有这样的行为的组合结点:依次执行每个子结点(移动到某个点、休息一会儿),某个子结点返回 Success 则执行下一个,返回 Failure 则直接向上返回,返回 Continue 就把 Continuation 抛出去。命名具有这样语义的结点为 Sequence。 设想攻击状...
柳猫 发布于 3天前 阅读 203 评论 1

求助:TiledMap如何旋转对象呢?

比如我要旋转一个梯子的角度,单纯在TiledMap旋转角度好像没有效果。那是要用代码来控制角度,还是说只能通过导入相对应的斜的图片才可以呢?
花谢自相惜 发布于 4天前 阅读 2 点赞 1

骰子游戏代码开源地址

因为阿里云现在服务器已经停用了,所以上面的配置已经失效。 服务端开源地址:https://gitee.com/goalya/chat4.git 客户端开源地址:https://gitee.com/goalya/client4.git 具体运行界面请参考之前的博客,谢谢!
算法之名 发布于 4天前 阅读 33

JS小型游戏框架coquette学习(持续更新)

coquette游戏框架学习 框架地址:https://github.com/maryrosecook/coquette 框架的使用 1. 补充知识 canvas2D上下文坐标 开始于左上角,原点坐标(0,0);x越大表示越靠右,y越大表示越靠下 fillRect()绘制矩形 接受四个参数,分别是:矩形的x坐标,矩形的y坐标,矩形的宽,矩形的高。 2. 创建游戏区 c现在代表新建的coquette实例,是一个全局变量,下文会用到 var game = function () { this.c = new Coquette(this, "canvas", 500, 150, "#000"); }; window.addEventListener('load',function (ev) { new game(); }); Coquette的第三和第四个参数分别指定游戏区的宽和高,第五个参数指定背景颜色。 3. 实体 a.定义实体(创建一个定义实体的构造函数) 这个构造函数可以有以下两个参数 window?暂时无法确定,需要之后的学习 配置对象,可以在c.entities.create()的第二个参数中指定关于实体的配置对象。类似于: var Person = function(game, settings) { this.c = game.c }; 属性 实体有以下几个属性: center:实体所处的2D上下文的位置坐标eg:{x:10,y:20} size:实体的尺寸 eg:{x:50,y:30} angle:实体旋转的角度 eg:30 指定了center和size后,可以...
静默行 发布于 1周前 阅读 5

矩阵的初等变换

原文地址 : https://www.jianshu.com/p/51bc27890e13 对于如下矩阵: 矩阵 我们可以对它做这么几种操作:     交换任意两行:比如交换前两行得到 交换前两行     用非0常数乘某一行全部元素:比如第三行乘以2得 末行乘2     某一行加上另一行的k倍:我们使用上面2倍的结果,将其加到第一行得 第一行加第三行 以上三种操作统称矩阵的“初等行变换”:     对调两行(第i行和第j行),记作   2.以非零常数 k 乘某一行(第i行)的所有元素,记作 3.某一行加上另一行的 k 倍,记作 其逆变换如下: 继续对调这两行 这一行的元素除回去 这一行减去那一行的k倍   如果这些操作针对的对象是矩阵的列,就称为“初等列变换”。 进行了有限次初等变换的矩阵,和原来的矩阵等价。如果指进行了行变换,则称为“行等价”;只进行了列变换,称为“列等价”。 由单位矩阵 E 经过一次初等变换得到的矩阵称为初等矩阵。 “左行右列”定则 对一个一般矩阵执行一次初等变换,等价于用一个被执行过同样初等变换的初等矩阵同这个矩阵相乘。 设A是一个 m×n 矩阵, 对 A 施行一次初等行变换,相当于在 A 的左边乘以相应的 m 阶初等矩阵; 对 A 施行一次初等列变换,相当于在 A 的右边乘...
WeiXiaodong 发布于 1周前 阅读 23

一个支持多人在线联网的骰子游戏,个人开发

本人开发了一个玩骰子的游戏,基于Netty4技术。客户端写的比较简单,界面如下 安卓界面 Windows界面如下 现在想寻求有兴趣一起开发的伙伴。 客户端下载地址 安卓http://47.106.151.202/app-release.apk Windows版本http://47.106.151.202/chatclient.rar,注:windows版本需要安装jdk1.7或以上才可以使用。 之后我可能会把源代码放到github或者码云上,希望大家能够给一点建议。  
算法之名 发布于 2周前 阅读 33 评论 1

unity小技巧

一、动作文件 把包含动作的资源文件导出为.fbx,可以用2种方式去管理这些动作 1.每个动作做成单独文件 (1)选中fbx里的动作文件,快捷键Ctrl+D,会在同一目录下复制出来一份动作文件,然后把不需要的Fbx文件删了 (2)先选中要查看的动作,让后拖动一个模型fbx文件到右边查看窗口里就可以查看动画的播放 2.所有动作合在同一个fbx文件里 (1)选择fbx中的Animation标签,在Clips中点击+号添加动作 (2)选择动作在下方面板修改名字,并设置开始帧和结束帧
chenzhigang 发布于 2周前 阅读 1

真是搞不懂这投影矩阵

不像想象中的那么简单, 红宝书上也没讲得更细. 要么物体看不见, 要么Z坐标在屏幕上看起来是拉伸的
洛克人杰洛 发布于 2周前 阅读 7

Unity Mono DLL加密

基本思想是把C#代码生成的dll 加密一下 无法直接破解dll,但是由于二进制加密代码是写在mono 里面的,拿到一样很容易破解, 1.层次1:     加密C#生成的dll  2.层次2     加密修改mono了时候的so dll什么的   先实现第一层次的windows 版本:     1.下载mono源代码  https://github.com/Unity-Technologies/mono/tree/unity-5.6     2.用vs2010 sp1(一定要用这个版本) 编译msvc/mono.sln 输出后的文件在下的           mono-unity-5.6\builds\embedruntimes\win32\mono.dll     3.二次处理 dll buffer 的函数是 image.c 的mono_image_open_from_data_with_name 可在这里面实现解密         然后替换即可     小提示: 如果编译期间出现glib-2.0.lib 找不到 那么把生成的eglib.lib 重命名为 glib-2.0.lib  一些其他的gtk lib 网上下载2.0 版本即可      ...
梦想游戏人 发布于 2周前 阅读 9

欧拉角

![输入图片说明](https://static.oschina.net/uploads/img/201806/05133744_RMIC.png "在这里输入图片标题") ![输入图片说明](https://static.oschina.net/uploads/img/201806/05133804_csrT.png "在这里输入图片标题") ![输入图片说明](https://static.oschina.net/uploads/img/201806/05133818_CqQg.png "在这里输入图片标题") ![输入图片说明](https://static.oschina.net/uploads/img/201806/05133830_D2Zb.png "在这里输入图片标题")
丽丽鲲 发布于 3周前 阅读 24

python海龟作图20秒完成小猪佩奇,附源码!

Python(发音:英[?pa?θ?n],美[?pa?θɑ:n]),是一种面向对象、直译式电脑编程语言,也是一种功能强大的通用型语言,已经具有近二十年的发展历史,成熟且稳定。它包含了一组完善而且容易理解的标准库,能够轻松完成很多常见的任务。它的语法非常简捷和清晰,与其它大多数程序设计语言不一样,它使用缩进来定义语句。 Python支持命令式程序设计、面向对象程序设计、函数式编程、面向切面编程、泛型编程多种编程范式。与Scheme、Ruby、Perl、Tcl等动态语言一样,Python具备垃圾回收功能,能够自动管理存储器使用。它经常被当作脚本语言用于处理系统管理任务和网络程序编写,然而它也非常适合完成各种高级任务。Python虚拟机本身几乎可以在所有的作业系统中运行。使用一些诸如py2exe、PyPy、PyInstaller之类的工具可以将Python源代码转换成可以脱离Python解释器运行的程序。     今年社交平台上最火的带货女王是谁?范冰冰?杨幂?Angelababy?不,是猪猪女孩小猪佩奇。 如果你经常用抖音、快手、B站、知乎、微博……或者类似的任何一个内容或社交平台,那你很大概率能答出这道题:     答案是:掌声送给社会人。 随着口号喊响,社会人小猪佩奇似乎一夜之间就在短视频平...
猫咪编程 发布于 3周前 阅读 20 评论 1

pygame常用函数及方法

# ----------窗口相关操作----------- # 创建窗口 scene = pygame.display.set_mode([屏幕宽,屏幕高]) # 设置窗口标题 pygame.display.set_caption("标题") # 设置窗口图标 pygame.display.set_icon(image) # 将图片绘制到窗口 scene.blit(image, (0, 0)) # ----------图像相关操作----------- # 加载图片 image = pygame.image.load("图片路径") # 获得图片矩形 -> Rect(x, y, width, height) rect = image.get_rect() # 移动矩形坐标 rect.move_ip(x, y) # 判断两个矩形是否相交 -> bool flag = pygame.Rect.colliderect(rect1,rect2) # ----------事件相关操作----------- # 获得所有事件列表 event_list = pygame.event.get() # 常见事件类型 # QUIT 关闭窗口 # MOUSEMOTION 鼠标拖动 # KEYDOWN 键盘按键 # 获得当前所有持续按键 bools_tuple bool_list = pygame.key.get_pressed() # ----------音效相关操作----------- # 加载背景音乐 pygame.mixer.music.load("./res/bg2.ogg") # 播放背景音乐,-1表示循环播放 pygame.mixer.music.play(-1) # 加载音效 self.bomb = pygame.mix...
十年磨一剑3344 发布于 3周前 阅读 33

Tomcat两个端口

server.xml ``` ``` [链接1](https://blog.csdn.net/Mint6/article/details/77800119?locationNum=7&fps=1) [链接2](https://www.jianshu.com/p/e394280181f3)
海贼爱音乐 发布于 3周前 阅读 5

电脑浏览器怎样模拟使用手机浏览器

这里以360极速浏览器为例,打开浏览器,进入百度首页为例,其它基于chromium的浏览器也一样 2 点击浏览器左上角位的设置菜单,选择“工具----开发者工具” 3 也可以通过在在网中空白位,右键“查看审查元素”来进入开发者工具,通用快捷键为"F12" 4 在开发者工具中,选择toggle device mode按钮,译文为“模式切换装置”,如图所示 5 可以看到浏览器的视窗变为手机视窗,还可以选择不同手机来进行模拟,如果列表中没有,可以选择edit进行 6 我们来访问一下手机端的网站,如百度视频,完全和手机上显示的一致 7 通过设置这些参数,可以设置分辨率、显示比例、还可以实现横屏、竖屏方式的显示!
乐_然 发布于 3周前 阅读 28

谈传奇世界3D版

无新意,鉴定完毕
会炒饭的美工 发布于 3周前 阅读 10

cocos2d 使用TexturePacker制作plist文件

一、下载TexturePacker 推荐使用TexturePacker,使用免费功能创建我们的需要的已经足够了,收费功能暂时不需要,下载地址:http://www.codeandweb.com/texturepacker/ 下载安装即可。 二、免费使用 使用第三个选项:”Use free“即可,我们用不到收费功能 三、放入小图 将该小图拖入到右边的Sprites窗口里就可以了,再依次拖入其它图片 依次拖入图片后,软件会自动选择空位置将图片安排进去,同时记录图片在图中的位置,细心的读者可能发现有一张图片旋转了,这都是软件为了节省空间自动旋转的,我们不需要管它,同时在代码中引用时也不需要管,plist文件会记录,我们还是只需要引用图片名称就行了。最后将图片导出。 四、导出图片和plist文件 点击Publish,选择文件导出位置就可以了 最后,图片和对应的plist文件就生成好了,我们可以用于Cocos2d开发游戏了…… 我制作的:                          对于plist文件是如何保存图片位置的? plist文件数一个xml文件我们可以用Eclipse或者记事本打开   [html] view plain copy <?xml version="1.0" encoding="UTF-8"?>   <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http:/...
AndyZhouX 发布于 4周前 阅读 10

unity lua 远程调试

1.mobdebug mobdebug 实现的核心: debug.sethook coroutine 通过一个协程用于网络监听和命令获取 通过debug.sethook 在每次执行函数的时候,回调到debugHook函数, 在hook函数中,执行loop协程,获取网络命令 mobdebug存在三个问题: - 没有办法attach,可以通过在lua虚拟机中动态加载执行lua代码的方式,来动态启动mobdebug - 没有办法pause,这个可以终止debug执行,接着重新attach的方案来处理 -主线程卡主,则loop无法执行,可以外部执行代码来终止loop的执行 因此需要额外实现一个其它层语言的线程监控,可以简单的在csharp实现即可
李勇2 发布于 4周前 阅读 10

Cocos2dx 常见动作

1.MoveTo/MoveBy MoveTo(duration,pos):在duration这么一段时间内直线移动到position为pos的地方 MoveBy(duration,pos):在duration这么一段时间内直线移动position距离的地方 2.ScaleTo/ScaleBy ScaleTo(duration,xBei,yBei):在duration这么一段时间内放大到多少倍 ScaleBy(duration,xBei,yBei):在duration这么一段时间内放大多少倍 3.FadeIn/FadeOut FadeIn(time):渐变出现,整个过程时间为time FadeOut(time):渐变消失,整个过程时间为time 4.Spawn/Sequence Spawn:动作一起执行 Sequence:动作顺序执行 5.RotateBy/RotateTo RotateBy:在时间time内旋转rotation角度 RotateTo(time,rotatation):在时间time内旋转到rotation角度 6.Repeat/RepeatForever Repeat(action,times):动作重复times次 RepeatForever:动作永远重复执行 7.JumpBy/JumpTo JumpBy(time,pos,height,times):在时间time内跳times次每次跳height这么高跳目标位置pos这么高 JumpTo(time,pos,height,times):在时间time内跳times次每次跳height这么高跳到目标位置pos 8.DelayTime DelayTime(time):创建一个延时动画,延时多少秒执行动画。 9.Blink Blink(time,t...
AndyZhouX 发布于 1个月前 阅读 9

如何预估索引性能?

掌握快速预估索引耗时的能力
wier 发布于 6个月前 阅读 2232 评论 10 点赞 9

Sql优化器究竟帮你做了哪些工作?

关系型数据库的一大优势之一,用户无需关心数据的访问方式,那么优化器是如何做到的,我们要如何优化?
wier 发布于 7个月前 阅读 3276 评论 22 点赞 8

DB——数据的读取和存储方式

数据库是我们常用的一些存储数据的方式,我们从读写来了解RDBMS的存取结构
wier 发布于 7个月前 阅读 2428 评论 5 点赞 6

一致性hash在DynamoDB上的应用

Dynamo是Amazon提供的一个分布式存储NoSQL 数据库,它采用去中心化、松散耦合的方式,组成一个支持高度扩展的Key/Value 数据库,本篇我们着重分析一下,它是如何采用采用一致性hash而达到可高度扩展的。
wier 发布于 7个月前 阅读 1224 评论 1 点赞 1

如何合理的规划一次jvm性能调优

JVM性能调优涉及到方方面面的取舍,往往是牵一发而动全身,需要全盘考虑各方面的影响,那么如何进行一次优雅的调优,提升应用的性能?
wier 发布于 8个月前 阅读 3085 评论 9 点赞 11

jvm优化必知系列——监控工具

项目部署线上之后,我们该如何基于监控工具来快速定位问题....
wier 发布于 8个月前 阅读 4632 评论 14 点赞 18

jvm优化—— 图解垃圾回收

jvm必知系列,总结一些常见jvm回收机制,方便查阅
wier 发布于 8个月前 阅读 5842 评论 21 点赞 20

java多线程——锁

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

java多线程——volatile

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

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

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

图解LZ77压缩算法

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

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

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

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

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

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

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

有趣的二进制

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

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

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

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

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

Xgame 合服工具技术设计文档

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

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

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

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

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