好友社区是哪家公司大连开发区开锁哪家好的游戏?

后使用我的收藏没有帐号?
所属分类: &
查看: 22|回复: 1
国内那些游戏公司是专做VR游戏开发的?
国内那些游戏公司是专做VR游戏开发的?
撩妹日记就是国产厂商开发的,还是小黄油
指尖每日首次回帖可以赚5金币()收起回复展开回复
一起赚积分拿毕业豪礼!查看: 107|回复: 11
最后登录注册时间阅读权限20精华0帖子
QQ野人, 积分 70, 距离下一级还需 80 积分
性别男幸福币0 经验56 帖子
老子今天早晨就发了2次这几个字: 求不T人的公会收留几个大号。只要不T人愿意永久留在公会带公会人员任何副本,就被禁言一个月。 有天理么?老子惹你游戏管理了?尼玛B 平白无故的给老子禁言一个月 尼玛B 的你心情不好弄老子的号干什么。 就说了一句这样的话就禁言一个月。。要是说句艹尼玛B 的 不是要封老子号了??
最后登录注册时间阅读权限20精华0帖子
QQ野人, 积分 70, 距离下一级还需 80 积分
性别男幸福币0 经验56 帖子
你们是不是感觉很拽?有管理权限在手 就可以拿来拽?说句这样的话。就禁言?当真我们这游戏玩家就可以拿来肆意践踏?这样的游戏管理 你们还要干什么?
最后登录注册时间阅读权限20精华0帖子
QQ野人, 积分 70, 距离下一级还需 80 积分
性别男幸福币0 经验56 帖子
给不给说法。。不给说法 老子开骂了。。。尼玛B 的 玩了2年的游戏。就这样对待。。你大爷的。。。感觉很爽么?
最后登录注册时间阅读权限20精华0帖子
QQ野人, 积分 70, 距离下一级还需 80 积分
性别男幸福币0 经验56 帖子
尼玛的个B 老子 真的很不服。。。很不爽。。这游戏管理 在哪个地方上班 。。老子来会会 你。。。。&&现场真的想看看你个游戏管理长成什么样子的。。
最后登录注册时间阅读权限10精华0帖子
QQ小野人, 积分 6, 距离下一级还需 44 积分
性别女幸福币0 经验5 帖子
这年代游戏管理就是拽&&你要学会被他们虐& &
最后登录注册时间阅读权限20精华0帖子
QQ野人, 积分 70, 距离下一级还需 80 积分
性别男幸福币0 经验56 帖子
老子要是知道 游戏管理子在什么地方上班 老子不去问候一下他不然对不起他。老子又没有骂人。又没有说对游戏不利的话。。。就发了求公会的话 就封了老子一个月 。。。尼玛B 的 真心气不过。。。
最后登录注册时间阅读权限20精华0帖子
QQ野人, 积分 70, 距离下一级还需 80 积分
性别男幸福币0 经验56 帖子
游戏 管理 给老子 滚出来。。。就这点本事 窝在游戏里不出来么?有本事 给老子出对质么??
最后登录注册时间阅读权限100精华27帖子
性别男幸福币0 经验40018 帖子
楼主的昵称叫什么?
最后登录注册时间阅读权限20精华0帖子
QQ野人, 积分 70, 距离下一级还需 80 积分
性别男幸福币0 经验56 帖子
COS-琳南潇潇 发表于
楼主的昵称叫什么?
我的游戏昵称是:哥★依然洒脱& &你可以去查一下 。。我早晨就发了4次在频道26发了2次。求公会收留的言语。在新手频道3发了2次求不T人的公会收留。然后是永久留在公会带公会人员任何副本 。直接禁言了。真心搞不懂
最后登录注册时间阅读权限20精华0帖子
QQ野人, 积分 70, 距离下一级还需 80 积分
性别男幸福币0 经验56 帖子
COS-琳南潇潇 发表于
楼主的昵称叫什么?
你好版主&&我的游戏是在华东区风息林谷 游戏名字叫:哥★依然洒脱& & 请问一下我的号到底是怎么个情况啊。。感谢了
最后登录注册时间阅读权限20精华0帖子
QQ野人, 积分 70, 距离下一级还需 80 积分
性别男幸福币0 经验56 帖子
好久给个说法& && && &痛快给句话& &我也不是傻子& & 确定让我亲自上你们公司吗?
最后登录注册时间阅读权限20精华0帖子
QQ野人, 积分 117, 距离下一级还需 33 积分
性别男幸福币0 经验107 帖子
你去吧没事反正到时候我想看一下新闻....你懂???
Powered by查看: 2681|回复: 29
最后登录QQ注册时间阅读权限90精华0帖子
初级守卫, 积分 11850, 距离下一级还需 3150 积分
性别男幸福币0 经验6805 帖子
& && && && &看了明天的活动,就一套马活动。很异常啊!预感要有大招放出来了。让我们拭目以待。
最后登录注册时间阅读权限100精华0帖子
性别男幸福币0 经验39563 帖子
呵呵 大招 是多大&&希望下次活动能够有惊喜
最后登录QQ注册时间阅读权限70精华0帖子
大咕噜, 积分 1930, 距离下一级还需 570 积分
性别男幸福币0 经验1537 帖子
看了明天的活动,就一套马活动。很异常啊!预感要有大招放出来了。让我们拭目以待。
最后登录注册时间阅读权限90精华0帖子
初级守卫, 积分 14181, 距离下一级还需 819 积分
性别保密幸福币0 经验10131 帖子
看了明天的活动,就一套马活动。很异常啊!预感要有大招放出来了。让我们拭目以待。
最后登录注册时间阅读权限90精华0帖子
咕噜队长, 积分 3041, 距离下一级还需 1959 积分
性别男幸福币0 经验2649 帖子
看了明天的活动,就一套马活动。很异常啊!预感要有大招放出来了。让我们拭目以待。
最后登录注册时间阅读权限30精华0帖子
QQ土人, 积分 496, 距离下一级还需 104 积分
性别女幸福币0 经验416 帖子
看了明天的活动,就一套马活动。很异常啊!预感要有大招放出来了。让我们拭目以待。
最后登录注册时间阅读权限90精华0帖子
初级守卫, 积分 6523, 距离下一级还需 8477 积分
幸福币0 经验5919 帖子
呵呵,玩家的耐心是有限的,要是下周还是这样平淡的什么新功能都没有出现,那么,可以断言这游戏快不行了
最后登录QQ注册时间阅读权限90精华0帖子
初级守卫, 积分 5126, 距离下一级还需 9874 积分
性别男幸福币0 经验3627 帖子
shoke_92 发表于
呵呵,玩家的耐心是有限的,要是下周还是这样平淡的什么新功能都没有出现,那么,可以断言这游戏快不行了 ...
不要把你的推测强加给别人,我是这样想的也不说。
最后登录注册时间阅读权限90精华0帖子
初级守卫, 积分 6523, 距离下一级还需 8477 积分
幸福币0 经验5919 帖子
成精 发表于
不要把你的推测强加给别人,我是这样想的也不说。
后半句出卖了你
最后登录注册时间阅读权限90精华0帖子
初级守卫, 积分 5743, 距离下一级还需 9257 积分
性别女幸福币0 经验4340 帖子
看了明天的活动,就一套马活动。很异常啊!预感要有大招放出来了。让我们拭目以待。
同是塔三沦落人,相逢何必曾相识?多少次来到招募现场,也曾想来个活动将风光风光,谁曾想希望越大失望越大!我爱塔三如初恋,塔三伤我依昔
最后登录注册时间阅读权限90精华0帖子
守卫队长, 积分 19358, 距离下一级还需 5642 积分
性别男幸福币0 经验13410 帖子
看了明天的活动,就一套马活动。很异常啊!预感要有大招放出来了。让我们拭目以待。
只要脊梁不弯,就没有扛不起的山。
最后登录注册时间阅读权限90精华0帖子
初级守卫, 积分 5374, 距离下一级还需 9626 积分
性别男幸福币0 经验4534 帖子
看了明天的活动,就一套马活动。很异常啊!预感要有大招放出来了。让我们拭目以待。
最后登录注册时间阅读权限90精华0帖子
初级守卫, 积分 11765, 距离下一级还需 3235 积分
性别男幸福币0 经验10911 帖子
看了明天的活动,就一套马活动。很异常啊!预感要有大招放出来了。让我们拭目以待
最后登录注册时间阅读权限90精华0帖子
初级守卫, 积分 6184, 距离下一级还需 8816 积分
性别男幸福币0 经验5212 帖子
估计会很吓人
最后登录注册时间阅读权限50精华0帖子
咕噜, 积分 984, 距离下一级还需 216 积分
性别男幸福币0 经验931 帖子
看了明天的活动,就一套马活动。很异常啊!预感要有大招放出来了。让我们拭目以待
最后登录注册时间阅读权限90精华0帖子
咕噜队长, 积分 2594, 距离下一级还需 2406 积分
性别男幸福币0 经验2384 帖子
看了明天的活动,就一套马活动。很异常啊!预感要有大招放出来了。让我们拭目以待。
最后登录注册时间阅读权限90精华0帖子
初级守卫, 积分 6481, 距离下一级还需 8519 积分
性别男幸福币0 经验5257 帖子
看了明天的活动,就一套马活动。很异常啊!预感要有大招放出来了。让我们拭目以待。
招得英雄入帐来,了却平生三国梦。
最后登录注册时间阅读权限90精华0帖子
初级守卫, 积分 6483, 距离下一级还需 8517 积分
性别男幸福币0 经验5660 帖子
看了明天的活动,就一套马活动。很异常啊!预感要有大招放出来了。让我们拭目以待。
最后登录注册时间阅读权限90精华0帖子
咕噜队长, 积分 4562, 距离下一级还需 438 积分
性别男幸福币0 经验3789 帖子
看了明天的活动,就一套马活动。很异常啊!预感要有大招放出来了。让我们拭目以待
最后登录注册时间阅读权限70精华0帖子
大咕噜, 积分 1424, 距离下一级还需 1076 积分
性别男幸福币0 经验1260 帖子
看了明天的活动,就一套马活动。很异常啊!预感要有大招放出来了。让我们拭目以待。
Powered by后使用我的收藏没有帐号?
所属分类: &
查看: 115|回复: 0
天堂2手游是哪家公司开发的?
天堂2手游是哪家公司开发的?
一起赚积分拿毕业豪礼!努力加载中,稍等...
暂无新消息
努力加载中,稍等...
已无更多消息...
这些人最近关注了你
努力加载中,稍等...
已无更多消息
努力加载中,稍等...
已无更多消息
  偶然看到protothread,用另一种方式实现了协程的效果。说是协程库,其实它并不是以任何库的形式存在的。而仅仅是头文件,在使用时仅仅需要包含头文件即可...
原文:西川善司
翻译:Traceyang
SIGGRAPH并不只是非实时的CG的学术会议。从2010年的SIGGRAPH2010开...
大家好,我是帅气小伙,今天为大家带来一个非常励志,让我反思的故事。今天为大家讲的是我父亲是如何用行动教会我成为程序员的。岁月的锤炼圆口接口的键盘,2003年的有人问这个键盘难道没有擦过吗?不是的,是擦不掉的岁月痕迹。如果有注意到细节的朋友会发现,程序员什么键位用得最多。除了(ASDW,YUHJ,那是我小时候玩拳王留下的)。这个键盘虽然老旧,但是我爸一直不舍得扔。03年的时候,他从二手市场买会来了这台486Cpu主频的二手电脑,开始自学汇编。我爸是只有初中文化。但是有超强的动手能力。零编程基础入门嵌入式开发因为当时03年的时候,他刚从一家电子厂辞职,他在电子厂里看到了单片机这种玩意,他看到了他们工程师的工资和待遇,而当时的他只是一名流水线上的焊锡工,虽然是个组长,但是也感觉到了职业的局限性。(这也带给我们一个启示,作为男人,如果觉得职业看不到头,趁早换工作吧,如果不趁早,你会在以后的家庭压力中选择妥协,再也看不到头了。),辞职的第二天,他就买回了这台486奔腾系列的二手电脑,和一台仿真的烧写机器(把程序写到芯片的机器),一本汇编语言入门的书,开始了他12年的嵌入式开发之路。(这里给我的启示是,说学就学,不要想着看看怎么入门,最好的入门技巧就是动手。)图书馆抄书的怪蜀黍这是他当时学C语言的时候在新华书店偷偷抄的我记得初中的时候每周六我爸都会带我去新华书店去看书,然后去到那里,每次都是他叫我看着图书馆里员有没有来,然后他就在那里专心地去抄写这些代码片段(这种学习方法在我看来,现在就是个笑话,随便打开一个网站,代码都是一堆堆的,但是话又说回来,你们在这些源代码中学到了什么,记住了吗?会灵活运用吗?从前辈的学习方法来看,记录一些常用的代码片段还是很用必要的,你的github有一套自己的代码片段吗?如果没有那就赶紧收集!)但是我爸的笔记,我每次问他,这是什么项目的,他都能记得很清楚,当然他当时入门的时候是非常痛苦的,一个英文单词都不懂,可想而知。可是大家的基础应该比我爸高很多吧,所以不要怀疑自己是否能够学会编程,是一定能够学会的。程序员特技—专注我的亲人总是对我说:“你啊,坐久了要多起来走走,看看远处,这样子才好”。可是我觉得大部分程序员都做不到,因为编程是根本停不下来的,一旦你入门之后,你就会有种时刻想创造的感觉。这是写程序写出来的专注。说到这,我就想问问大家:“你能够专注多少个小时?”,我把这个问题抛给了我爸,我爸笑着跟我说:“用煤气,把一个装满水的平底锅烧穿需要多少时间?”。这是他的一次真实的经历,那是他在用汇编语言编写一个MP3播放器,在调试的过程中,忘记了自己在烧开水,幸亏煤气烧完了!说这个故事只想告诉大家一个道理:“写程序你必要保持高度的专注,但是不能够疲劳过度地专注。”编程需要的是流程再造软件工程跟建筑学很像,它们都是基于现实的技术,搭建最好的解决方案。“钢筋,混凝土”这些都是做好的,都可以直接拿来用,编程也是如此,嵌入式开发也是如此。这是一块移植了UCOSII系统的STM32实验板这块板嵌入了UCOSII系统,可同时执行多个任务,并可指定任务优先级。通俗地说,你可以边听音乐边打字。虽然看起来很低级,但是嵌入式就是这样。很高端吧,但是我一问我爸,你是怎么做出来这块板的,你真的这么厉害用C语言写了一个操作系统?板子是自己画的,其他的芯片都是买的,CPU程序是自己写进去的。原来嵌入式开发所做的事就是负责把各个功能模块合理设计,用程序去调度。现在成熟的芯片都是厂商写好了程序,提供外部调用接口,开发人员并不需要了解他里面的内容就可以开发了。这对我以后学编程启发很大。我的老师曾经说过:“软件工程师之所以能够写出解决实际问题的程序,是因为他们懂得流程再造,用现实的轮子(技术)去实现这个流程”。想成为一名软件工程师首要的不是编程语言能力的把握有多么厉害,而是懂得把现实生活中繁琐的流程通过计算机科学来简化,我觉得这才是真正的软件工程师。我爸的编程基础虽然没我强,但是流程再造的能力比我强太多了。也许这就是经验吧。这是它给我提供的串口应答式发送的流程(可能有错)我把我爸逼成了伪全栈大二时候的我,学了C#,会做一下简单的winform程序,然后就开始飘飘然了,跟我爸吹牛了,当时我爸高兴坏了,直接就给我接了一个真实的项目,真金白银啊,我当时还傻傻地答应了。由于是真实的项目,程序的容错必须很高,你不能够点几下就throwexception吧,但是我做的项目都是校园里面的实验,过家家玩的而已,虽然老师给了好评,这都是大学里面的花拳绣腿。真正派上用场的时候,确显得苍白无力。理所当然,我的程序终将不能按时完成。我爸意识到了,他笑着跟我说:“你教我学C#吧,我们一起探讨这个程序。”,没办法啊,只能让我爸去学吧,一个星期后,他开始于我并行开发,这是我跟我爸同台工作最好的回忆;为什么我爸能够在一个星期学会C#(只有C语音基础)?语言都是通的,变的只是表达方式,思维和流程是不会变的我们的老师从一开始就教我们画一些简单的流程图,但是我们很多人都觉得他太简单了,没什么意思,于是就开始去追求那些表面华丽的界面,去满足自己好奇而又虚荣的心,但是他们错过的是真正的编程技术,这就是当时的我。有很多人都觉得大学的课程很基础,实际用到项目的很少,是根本不能拿来做项目,书本上学的都过时了。而实际上,书本教会的是我们写字(编程)的姿势(方法),教会我们如何拿笔(写程序),如何写好字(好程序),一旦你学会了就能够写出一手好字(好程序)。所以有很多人写不好字(程序),那就是在小时候练字(初学编程)急于求成,想着去玩(炫耀)。这是我最深刻的反省,也是对各大初学者最好的忠告,编程必须耐得住寂寞!程序员要时刻认识自己当时,我是膨胀了,有点自以为是了,就觉得自己行,然后就答应项目了,结果幸亏我爸厉害,不然可是要赔钱的。作为程序员,必须了解自己的水平上限。知己知彼(我能做,你不能做),百战不殆(我就是要这么多钱)。对的,时刻了解自己水平上限是有助于自身价值的评估的,例如你跳槽了,你对比同行,你的水平在哪里。决定市场价格的并不是企业本身,而是社会必要劳动时间(别的程序员要多久才能够做出来)。而最好的认识就是看最新的技术,了解行业的趋势。这次才能够让自己立足于高薪阶层。做一名守信用的程序员我爸当时给我说:”既然你答应了人家,无论你有千百个理由都要给人家完成,完成不了就是你的错,因为你对人家承诺过“。这不是在讲道理规范,而是一个程序员的职业操守,因为这样,我爸能够接手到很多外包的项目,因为他在别人眼里只有两个字:”可靠“。也许这就是程序员的个人品牌吧,如果你在企业中能够有这样的品牌,能不升职吗?总有人质问:“我现在学编程晚吗?”,“我30岁之后还能继续写程序吗?”,“学编程难吗?”看完这篇文章后,我相信你不会再问了,因为如果你真的是热爱编程,你就应该像我父亲那样,无论现实如何逼迫,初心永远不忘。虽然,我跟我的父亲没有太多的语言交流,但是这么多年的耳濡目染,足以让我发出:“谨遵父训,不忘初心”。
List(列表)是比较常用的功能。本篇结合LayaAir引擎与IDE针对List显示、增加、删除等相关操作进行逐步讲解,供开发者学习引擎与IDE的实战参考。(创建项目等基础操作,请查看其它文档,本篇跳过)一、用LayaAirIDE制作UI
1.1 创建一个View类型的UI页面
(图1)创建一个名为ListPage的View类型UI页面
首先,我们在LayaAirIDE的项目管理器内,创建一个View类型的UI页面,宽高为640*1136。页面命名为ListPage。1.2 导入UI资源
将美术制作好的UI页面资源导入到资源管理器中。(具体导入方式参考LayaAirIDE资源导入的文档。)(图2)1.3 用九宫格制作List背景1.3.1 拖拽List背景到舞台(图3)将图片背景bg_list.png拖拽到舞台1.3.2
Image属性中通过sizeGrid属性设置九宫格。
(图4)点击sizeGrid属性右侧按钮打开九宫格设置面板1.3.3 在属性里设置width为640(全屏宽度)(图5)1.4 制作List容器1.4.1 拖拽checkbox.png到舞台,并设置属性name为check。(图6)1.4.2 拖拽label.png到舞台,设置属性name为listNumber,其它属性参照图7。(图7)1.4.3 拖拽label.png到舞台,修改文本内容为“List示例文本”,属性设置参照图8所示:(图8)1.4.4 选中list背景图、序号图、文本、checkbox,Ctrl+B创建一个Box容器。然后选中Box容器,设置Box属性renderType为render。如图9,图10。(图9)
(图10)1.4.5 点击box容器再次通过Ctrl+B创建一个List容器,如图11。注意,所有的List容器,必须是基于Box容器的,我们看一下图12的层级关系,会更加清晰一些,list基于box循环产生。(图11)(图12) 1.5 设置List属性选取List容器,设置Lis属性 var为_list(通过此变量可以调用该组件下的所有属性),然后根据实际需要设置其它属性,repeatX是X轴的列表数量,repeatY是Y轴的列表数量,spaceX是X轴列表间距,spaceY是Y轴列表间距。如图13所示:
1.6 添加操作按钮
这里,我们直接使用了模板的ButtonTab,拖拽到舞台中,然后点击进入子节点,设置name、label属性以及九宫格等。如图14,图15:(图14)
(图15)1.7 调整好UI位置细节后,如图16。F12发布UI,就可以进入代码阶段(图16)二、用TypeScript语言实现List代码逻辑
2.1 显示制作的UI页面2.1.1 创建一个ListDemo.ts程序文件,并把对应的js在index.html入口设置为启动类。(图17)2.1.2
编辑代码,显示UI,主要三个环节,引入加载以及UI类,加载显示UI用到的图集资源,实例UI界面并添加到舞台。module demo{
import WebGL = Laya.WebGL;
import Loader = laya.net.L
import Handler = laya.utils.H
//引入制作的List UI页面类,此处要结合自己项目,注意引入名称是否正确
import listPageUI = ui.test.ListPageUI;
export class list
listP:listPageUI;
constructor()
//初始化舞台宽高
Laya.init(640, 1136,WebGL);
Laya.stage.bgColor = &#ffffff&;
//UI页面中涉及的图集路径
var atlas1:Object = {url: &res/atlas/ListPage.json&, type: Loader.ATLAS};
var atlas2:Object = {url: &res/atlas/template/ButtonTab.json&, type: Loader.ATLAS};
//预加载资源文件后执行回调
Laya.loader.load([atlas1,atlas2], Handler.create(this, this.onLoaded));
onLoaded():void
//实例UI界面
this.listP = new listPageUI();
//添加UI界面到舞台
Laya.stage.addChild(this.listP);
}}new demo.list();Tips:代码中的图集路径要根据自己的项目实际情况,灵活调整
2.1.3 编码完成后,按F5运行,如图18所示,页面显示和IDE制作的效果一致后,开始编辑逻辑代码。
2.2 编写代码逻辑
2.2.1 实现List序号逻辑要实现List序号的数据添加,需要用到“laya.ui.List” API中的list数据源赋值array,单元格渲染处理器renderHandler,以及“laya.display.Node ”API下通过子节点名字获取子节点对象的方法getChildByName。我们先看下API说明:如图19、图20、图21。(图19)
(图21)List序号添加代码如下:module demo{
import WebGL = Laya.WebGL;
import Loader = laya.net.L
import Handler = laya.utils.H
import Box = laya.ui.B
import Label = laya.ui.L
//引入制作的List UI页面类,此处要结合自己项目,注意引入名称是否正确
import listPageUI = ui.test.ListPageUI;
export class list{
private listP:listPageUI;
private arr:A
constructor()
//初始化舞台宽高
Laya.init(640, 1136,WebGL);
Laya.stage.bgColor = &#ffffff&;
//UI页面中涉及的图集路径
var atlas1:Object = {url: &res/atlas/ListPage.json&, type: Loader.ATLAS};
var atlas2:Object = {url: &res/atlas/template/ButtonTab.json&, type: Loader.ATLAS};
//预加载资源文件后执行回调
Laya.loader.load([atlas1,atlas2], Handler.create(this, this.onLoaded));
//资源加载后回调
onLoaded():void
//实例UI界面
this.listP = new listPageUI();
//添加UI界面到舞台
Laya.stage.addChild(this.listP);
//获得List模拟数据,并渲染
this.getListData();
//List数据模拟,渲染
getListData():void
//添加list数据
this.arr = [];
for (var i:number = 1; i
Unity 的行为可以通过配置来指定,使用 XML 文件来配置 Unity,也可以从任何格式的文件或者其他数据源中加载配置信息,在做配置表文件配置时因为太大遇到了问题,下面就给大家介绍下基于unity的高效配置表读取方案。基本设计内存对齐·
[StructLayoutAttribute(LayoutKind.Sequential, Pack = 1)]·
[MarshalAs(UnmanagedType.ByValArray,SizeConst=ResMacros.C_PRE_QUEST_SIZE)]·
string使用int做key,使用时,去查找,而不是在ResSturct里保存一个string指针?123[MarshalAs(UnmanagedType.ByValArray, SizeConst=ResMacros.C_QUEST_REQUEST_MAX_COUNT)]private ResQuestRequest[] _private int _commitTraceText_直接读取,而不是使用反射?11213byte[] bytes = new byte[rowSize];Type type = typeof(T);IntPtr structPtr = Marshal.AllocHGlobal(rowSize); for (int i = 0; i & rowC i++){
ms.Read(bytes, 0, rowSize);
Marshal.Copy(bytes, 0, structPtr, rowSize);
object _obj = Marshal.PtrToStructure(structPtr, type);
objs[i] = (T)_} Marshal.FreeHGlobal(structPtr);顶层数据,使用class而不是struct引用,避免copy好处:·
本身就是常量,不必引入copy的开销·
配置表数据结构很多都比较大,copy开销并不能忽视·
Box/UnBox保持常量,避免被修改访问控制,只有getter,没有setter?9303132[StructLayoutAttribute(LayoutKind.Sequential, Pack = 1)] public struct ResMonsterGs : IResStruct {
#region Fields
private int _
private int _
private int _
#endregion
#region Getter Setter
public int Tid
return this._
public int Level
return this._
public int Gs
return this._
#endregionArray的const控制使用lambda而不是反射?1LoadConfig(&Table/res_monster_type&, &Id&);?1LoadGenericKeyConfig(&Table/res_monster_type&, (row)=&{return row.Id;});?private void LoadConfig(/*string type, */string filePath, string keyName = &&)
Type t = typeof(ResClass);//System.Type.GetType(&Config.&+type);
object instance = Activator.CreateInstance(t);
System.Reflection.MethodInfo method = t.GetMethod(&Load&);
if (method != null)
ResStruct[] objs = BinaryLoader.Load(filePath);
if (objs == null)
Console.WriteLine(BinaryLoader.GetErrorInfo());
Debug.Log(BinaryLoader.GetErrorInfo());
if (pareTo(&&) == 0)
method.Invoke(instance, new object[] { objs });
method.Invoke(instance, new object[] { objs, keyName });
if (this.table.ContainsKey(typeof(ResClass)))
this.table[typeof(ResClass)] = (ResClass)
this.table.Add(typeof(ResClass), (ResClass)instance);
System.Reflection.MethodInfo callback_method = t.GetMethod(&OnLoad&);
if (callback_method != null)
callback_method.Invoke(instance, new object[] { });
}?7181920private void LoadGenericKeyConfig(string filePath, GenericGetKeyDelegate func)
where ResClass : GenericKeyTable
where ResStruct : IResStruct, new()
Type t = typeof(ResClass);
ResClass instance = (ResClass)Activator.CreateInstance(t);
ResStruct[] objs = BinaryLoader.Load(filePath);
if (objs == null)
Debug.LogError(BinaryLoader.GetErrorInfo());
instance.Load(objs, func);
this.tables[typeof(ResClass)] =
instance.OnLoad();
}查询接口添加配置表里是否存在某项的查询接口?public virtual bool HasRowByIndex(int index)
if (index & table.Count)
public virtual bool HasRowByKey(KeyType key)
if (table.ContainsKey(key))
}原来判断是否存在的方法:?123ResCbeSpell pRes = pCbeTable.GetRowByKey(pSpell.CbeId);if (pRes.Id != 0){代码整理HasRowByIndex, HasRowByKey添加了查询表项是否存在的接口,要使用这个接口确认是否存在default(struct) =& null由于改成了class,表中没有的话,会返回null性能对比内存GC旧版:新版:对比结果:
Unity热更新就会需要使用LUA,但是有些开发者在项目开发中对LUA框架的使用不是很清楚,为此,下面就给大家介绍下LUA框架的说明和使用。基本设计理念·
类和实例,面向对象·
组件(Component)化·
类似MonoBehaviour,减少学习成本实现详见Framework/LuaBehaviour.luaClasslocal classic = require 'classic'local UIUtil = require 'Framework.UIUtil' local LuaBehaviour = classic.class(&LuaBehaviour&) function LuaBehaviour:_init(target, setting)
self._target = target
self._targetID = target:GetInstanceID()
self._luaOperation = target:GetComponent(&LuaOperation&)
self._setting = setting
self._visibleScope = GScope.Scope.Create(&globe.ui.& .. self._targetID .. &.visible&)
UIUtil.BindElements(self)end return LuaBehaviour注意点:classicA class system for Lua.实现了Lua端的类,继承, 虚函数的概念require使用LuaBehaviour的代码,不要添加在GamePath.luareturn必须要return,要把脚本中定义的class的原型return出来,以供BehaviourManager来进行实例化BehaviourManager中的相关代码:12345function BehaviourManager:CreateBehaviour(typename, go)
local path = typename
local Class = require(path)
local lb = Class(go)self, super12this -& self
base -& super根C#/C++中的概念是一致的实例化脚本中定义的是类,而我们实际使用时,使用的实例。这个是和老的Lua代码的本质的区别由于我们在使用时,使用的是实例,就可以实现组件的概念,可以在一个Prefab上挂一个脚本,而这个Prefab可以实例化(GameObject.Instantiate)出很多个示例:每一个ExampleListItem(Clone)都有一个Lua那边定义ExampleListItem类的一个实例,是完全独立的,和MonoBehaviour的概念是一致的有了组件化的支持后,我们就可以把一个复杂的界面,拆解成多个组件,以方便管理和重用事件·
OnEnable·
OnVisible·
OnDisable·
OnDestroy这些事件的调用时机和MonoBehaviour一致OnVisible是一个特殊的自己加的一个函数,用于规避Unity无法控制Awake的顺序的问题在Prefab第一次实例化的时候,OnVisible会在MonoBehaviour的Start调用时调用,当一个实例被SetActive时,OnVisible会在MonoBehaviour的OnEnable时调用这种调用次序,可以保证Setting中所有的Elements和Behaviours都被绑定上了如果你使用了FrameMediator的UsePool参数,或者自己的类似的Pool的实现,你应该在OnVisible中做UI的Refresh操作如果没有使用池/Pool,直接在OnStart中Refresh就好了SettingElements绑定指定的C#端定义的MonoBehaviour以及GameObject自身-- Element支持的参数:
GameObject的Path
便利访问的名字
一次绑定多个控件,从1开始
需要的MonoBehaviour类型, 不指定则绑定GameObject
-- Necessary 是否必须找到,Necessary = false时可以不报错
-- Handles
是否默认隐藏掉示例:1121314Elements =
-- 一次注册多个控件,自动通过数字下标去查找
-- Item1, Item2, Item3
Name = &Item&,
Count = 3,
Type = CS.UIButton,
onClick = &OnCloseButtonClick&,
},提供了一个编辑器扩展,可以自动获取到GameObject的Path,获取到的Path保存在剪切板中,粘贴到Lua脚本中即可Behaviours绑定Lua端定义的LuaBehaviour123-- Behaviour支持的参数:
GameObject的Path
便利访问的名字示例:123456Behaviours =
Name = &PlayerInfo&,
},Events预定义,直接绑定的事件,通过FireEvent来触发LuaBehaviour中的成员函数1234Events =
[&Event1&] = &OnEvent1&
},Timers预定的Timer绑定,回调也是成员函数Timers =
Name = &SceneLoadedTimer&,
Timer = Timer:Always(1),
Handler = &CheckSceneLoaded&
},StaticActions提供便利地绑定方式,可以自动绑定C#端的static的event1public static event Action TeammateNumC示例1234StaticActions =
RefreshEvent = &OnInfoRefreshEvent&
}也是成员函数CoroutineC#中,我们可以使用Unity提供的Coroutine来方便的执行异步逻辑,Lua中也提供了一个Coroutine的机制,但是,要和Unity配合起来方便使用,还需要做些工作示例:local co = self:StartCoroutine(function()
local s = os.time()
print('start to wait')
yield_return(CS.UnityEngine.WaitForSeconds(3))
print('wait interval:', os.time() - s)
local www = CS.UnityEngine.WWW('')
yield_return(www)
print(www.bytes)
end)接口:function LuaBehaviour:StartCoroutine(func)end function LuaBehaviour:StopCoroutine(co)end function LuaBehaviour:StopAllCoroutine()end实现:自动封装掉Lua的coroutine.yield和coroutine.resume两个函数调用,IEnumerator的实际等待行为,在LuaOperation上执行在Lua端和LuaOperation中,要维护一个完整的正在等待的东西的列表,这样才可以追踪执行状态,并顺利地执行Stop行为使用LuaOperation在Prefab中,AddComponent, 添加LuaOperation这个组件即可Class Path需要填写Lua脚本的具体路径,从LuaScripts目录开始,不需要填写LuaScripts示例:BehaviourManagerBehaviourManager是Lua端管理LuaBehaviour的管理器,所有的LuaBehaviour都是由它创建和销毁的1__BehaviourManager:GetBehaviour(behaviour_go:GetInstanceID())通过这个接口,可以获取到LuaBehaviour的实例,并直接调用它的接口等__BehaviourManager是一个全局变量behaviour_go是一个GameObject通过这个接口,可以查找到挂在指定的GameObject上的LuaBehaviour的实例
WeTest导读  “315”保护下的消费者,可以选择更好的商品;手游玩家,可以自由选择喜欢玩的游戏;然而手游开发者的利益却只能通过做出赚钱的游戏。而这一点,在“手游精品化”的大潮下,面临着激烈的竞争。正文  手游市场从2015年开始渐渐趋于平稳,“精品化”概念已经成为手游重要的发展方向。国内手游行业存在着增速放缓、流量获取成本增高的情况。这种现状意味着,一旦手游质量发生闪失,同质产品会迅速涌入抢占市场(比如当前某爆款手游)。等手游开发者意识到质量问题并把问题解决后,市场已经落入竞品之手。因此,在如此市场格局之下,把控手游品质,似乎成为了手游突出重围,稳定增长的突破口。哪些现象正在侵害手游开发者的利益  腾讯WeTest在参与制定腾讯游戏测试标准的十年过程中,看到太多手游开发者,因为游戏一两个质量问题在上升期跌了跟头,甚至因此出局的情况。每一个手游的问题都影响着手游开发者的利益,我们罗列了最常出现的几种情况:游戏会崩溃——兼容问题  兼容问题是手游上线前最常见的问题根据腾讯WeTest2016年全年测试数据得出,兼容问题出现最多的类型包括:安装失败、UI异常、Exception、崩溃等四类。  毫无疑问,这四个问题中的每一样,都足以让玩家直接放弃游戏。游戏有外挂——安全问题  成功的手游很赚钱,如此火热的市场吸引了大量外挂、辅助、工作室等非法盈利团队,严重影响了游戏的收益、平衡,缩短游戏的生命周期。外挂对手游的危害包括以下几点:                           手游外挂的八大危害   众多手游开发者从开发阶段就考虑到外挂的防护,像《部落冲突》、《梦幻西游手游》等游戏长期和游戏外挂做着斗争。游戏总延迟——性能问题  对于手游来说,不同的现象代表着不同的性能问题,如下图:  如果说左边是玩家经常会遭遇到的表面现象,那右边则是基于手游性能深挖后的问题本质。  根据腾讯WeTest2016年的测试数据,手游内存问题在在低档机型上最为严重,角色扮演、动作冒险、飞行射击和网络游戏类内存超标现象比较明显。而在unity游戏中,有三成左右的游戏mono内存超标,值得手游开发者的关注。手游全链路质量解决方案  为了避免上述质量问题给手游带来损失,腾讯内部对于手游研发的上线阶段,有着标准严格的流程,腾讯WeTest将其称为“手游全链路质量解决方案”, 通过对游戏类型的评估,设置重要的专项测试节点,重要的专项测试节点如下图所示:     腾讯游戏常用的手游上线标准流程   在这些专项测试中, “适配兼容测试”、“安全测试”以及“性能测试”,是手游上线前最重要的专项测试之一。为了让手游开发者对精品游戏的测试流程、标准及案例有更系统的认识,腾讯WeTest准备从“兼容测试”“安全测试”和“性能测试”开始,渐渐将这个测试流程服务对外开放。手游全链路测试——专家兼容测试  手游上线前,必须对下面6个环节进行全量兼容测试:               全量兼容测试的6个环节  大版本更新阶段,至少也需要做到安装、启动、登录、新手引导4个环节的测试,方能保障版本质量。如果是手游类App,那么对于关键的游戏场景,还必须做深入的测试,以保障玩家体验。像《王者荣耀》这种现象级手游,即使是版本更新阶段,也会进行深入的兼容适配测试,并将关键战斗场景测试数次,以保障游戏品质。这也是《王者荣耀》得以在诸多同类产品竞争下保持市场领先地位的重要因素。  那么做专家兼容测试的好处有哪些呢?  1、解决兼容测试中的人力问题  兼容测试中人工的壁垒是个大问题,针对这个问题,腾讯WeTest也提供了自动化测试和人工测试这两类解决方案。由于自动化测试并不能完全覆盖各个测试环节,腾讯WeTest目前还是坚持以人工测试和自动化测试结合的方式,力求实现最好的测试效果:  一般来说,除了少数大型游戏公司以及部分“不差钱”的互联网企业,很难有企业可以长期不间断地去维护专业的测试团队。即便有这样的测试团队,一般规模也不会很大,这就导致了测试周期被拉长,当发生较高频率版本更迭时(一般手游1个月1次大版本更新),为保证测试速度,测试质量难免会受到影响。  基于此,腾讯将内部游戏打磨近10年的专家测试团队、经验开放出来,供外部移动应用产品测试使用。   2、根据实际需求给提供差异化测试服务  目前WeTest专家兼容测试根据不同的场景深入情况,推出了完整版和精华版两套服务。 针对手游,我们推荐在手游上线前,通过“专家兼容完整版”完成深度的功能场景兼容测试,在上线后,对于不是非大版本,建议使用“专家兼容精华版”,完成基础兼容性的验证。 手游上线前专家兼容完整版上线后(版本更新)专家兼容精华版(部分重度游戏,或者大的坂本功能变更,可以使用完整版)了解更多:/product/expert-compatibility-testing手游全链路测试——手游安全专家测试  在腾讯内部,通常在游戏版本转功能测试的阶段就介入了安全模块的测试。腾讯WeTest的SR手游安全测试团队将审核的内容分为静态安全漏洞和动态安全漏洞。不同类型的问题测试思路和分析手段会有不同,对测试工具和测试方法也会有差别。                       手游安全漏洞分析1、静态漏洞扫描   主要通过静态扫描的方式,对游戏apk中配置档、资源文件、脚本文件、manifest.xml、so文件,通过自动扫描的方式来进行检查项的确认。(目前此块内容已集成到SR手游安全测试方案中,覆盖了120+条安全检查项和信息安全测试项)2、动态风险分析   动态安全测试涉及的内容广泛,主要是根据游戏特定的内容和玩法,针对性地分析安全风险点,通过协议、函数、内存、脚本等技术,多维度检查游戏服务器对相应的风险点是否有完善的校验或反外挂策略。  根据对漏洞类型的提炼,SR手游安全测试团队总结了根据游戏中的获利点而生成的风险点,然后在不同的游戏中,结合具体玩法,又推导出相应的获益方式。通常根据风险点分析的方式,可以完整覆盖到游戏中涉及到安全的部分,结合检查点,就生成了可以在实际操作中执行的用例,形成闭环。  手游安全测试对于技术的要求也是非常高的,需要专业的技术人员进行逆向分析和工具支持,否则上述的测试点很有可能是纸上谈兵,但毫不夸大地说SR手游安全测试已经拥有了这些技术积累。目前SR手游安全测试方案已经支持所有腾讯在研和运营的手游项目,依靠自身的技术积累来提高专业程度,持续保持漏洞的发现率。目前对外提供专家测试服务,希望通过提前发现游戏版本的安全漏洞,预警风险。了解更多:/product/sr 手游全链路测试——客户端性能专家测试  腾讯内部对于手游性能的测试和监控非常重视,在新版本发布之前会再三确认性能是否符合发布标准。腾讯WeTest的手游性能优化团队专门开发了Cube工具来帮助用户发现手游的通用性能、资源以及mono内存等问题。          Cube手游标准性能分析结果部分截图              Cube资源报告分析结果部分截图  Cube团队参与了《王者荣耀》上线前后的几个优化版本的分析,先后遇到过的问题和优化方法主要有下面几个:1、由于实时对战游戏的数据包数量巨大,早期版本的帧同步策略会导致比较明显的卡顿,通过进行数据包的合并与优化逐渐解决了卡顿问题;2、频繁创建和销毁的小兵对象让CPU爆表了,大量的小兵如果采用实时内存的分配和回收,会产生大量的内存碎片和系统开销,解决方法之一就是采用高效的对象池进行优化,对每个内存对象的状态进行操作即可;3、性能分析过程中,发现单人同屏和多人同屏时的开销都很大,通过视野裁剪技术,使得玩家视野外的不必要的特效和渲染可以全部关闭,极大降低了CPU、GPU和内存的开销;4、在高中低三档机型上玩游戏时,分别加载不同层次的特效包,这也有助于降低CPU和内存的开销;5、游戏内界面采用了UGUI的方式实现,但大量的实时UI变化使得副本内每帧会有230以上的drawcall,导致中低端机型感受到明显卡顿,最终采用UGUI+自研究UI的组合拳,重写了一套紧密结合游戏自身特性的UI来实现战斗血条和浮动文字的效果。  在对《王者荣耀》进行性能调优的同时,为了帮助手游开发者更快的了解自身游戏的性能现状以及改进措施,腾讯WeTest的手游性能优化团队除了开发自动化工具之外,也开放出手游性能专家测试服务,由手游性能团队直接分析出手游的性能问题,并协助手游开发者优化解决。了解更多:/product/cube/方案的实施  “专家兼容测试”、“手游安全测试” 以及“客户端性能测试”是目前“手游全链路质量解决方案“中重要的专项测试类目,手游开发者可以参照腾讯内部整个手游上线标准流程,选择最适合自己的测试类目,对手游进行优化。  以上这些功能,腾讯WeTest平台已经完全对外开放:专家兼容测试:/product/expert-compatibility-testing 客户端性能测试:/product/cube/ 手游安全测试:/product/sr 关于“手游全链路质量解决方案“中的更多问题,欢迎联系腾讯WeTest企业qq:
微信扫码关注GAD官方公众号
超维星球孵化器
开源引擎LayaAir

我要回帖

更多关于 棋牌游戏开发商哪家好 的文章

 

随机推荐