当前位置:  编程技术>移动开发
本页文章导读:
    ▪微信浏览器中掩藏 工具栏 后退前进刷新按钮等        微信浏览器中隐藏 工具栏 后退前进刷新按钮等 在微信公众平台 开发者模式的情况下,自定义的菜单跳转到自己的Web页,通过微信内置的浏览器来解析页面但是通常情况下,浏览器的工具.........
    ▪ opengl 座标测试        opengl 坐标测试 float ratio = 1.0* w / h; // 投影在屏幕上显示的位置,以及宽度,高度(现在即投影到屏幕(0,0)坐标) glViewport(0, 0, w, h); // 看到的是一个1的正方体 // 投影 glMatrixMode(GL_PROJECTIO.........
    ▪ 服务端学习1:Warzone服务端研究       服务端学习一:Warzone服务端研究今天看了一下国外的开源游戏Warzone ,想学习一下别人的服务端,就顺带翻译了一下他的网络方面的文档;如下 战地2100游戏中的网络相关代码使用TCP来实现对.........

[1]微信浏览器中掩藏 工具栏 后退前进刷新按钮等
    来源: 互联网  发布时间: 2014-02-18
微信浏览器中隐藏 工具栏 后退前进刷新按钮等
在微信公众平台 开发者模式的情况下,自定义的菜单跳转到自己的Web页,通过微信内置的浏览器来解析页面

但是通常情况下,浏览器的工具栏 上下占用了屏幕不少的位置


一直想干掉



今天看到如下代码

document.addEventListener('WeixinJSBridgeReady', function onBridgeReady() {
    WeixinJSBridge.call('hideToolbar');
    WeixinJSBridge.call('hideOptionMenu');
});


就可以把微信浏览器访问时候的工具条隐藏掉了

    
[2] opengl 座标测试
    来源: 互联网  发布时间: 2014-02-18
opengl 坐标测试


float ratio = 1.0* w / h;
// 投影在屏幕上显示的位置,以及宽度,高度(现在即投影到屏幕(0,0)坐标)
glViewport(0, 0, w, h);


// 看到的是一个1的正方体


// 投影
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
//正投影(左右下上前后的投影范围)(这个是以摄像机为原点的坐标)
// 看到的是眼前6.1 到 7.1 范围的东西,看不到任何东西
//glOrtho(-2, 2, -2, 2, 6.1, 7.1);
glOrtho(-2, 2, -2, 2, 1, 10);
//透视投影
// 第一个是眼睛睁开大小 第二个是宽高比 第三个是近裁面 第四个是远裁剪面
//gluPerspective(45,ratio,1,566);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
// 自定义观察坐标,不设置,则世界坐标的原点为摄影机,z反方向为观察方向,y正方向为上(右手系坐标,右方为x,上为y,向外为z)
// 前三个是摄影机坐标,观察点(摄影机-观察点为z轴正向)最后三个是y轴正方向(不可与z同向),确定yz,x方向就定了
gluLookAt(0,1, 5, 0,0,0, 0,1,0);


//---------------------正投影


// 投影面是-2 到 2,因为摄像机和观察点都上移了2,所以观察的范围就是世界坐标的0-4,所以只看到窗口下面1/4处有正方体
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-2, 2, -2, 2, 1, 100);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(0,0, 5, 0,0,0, 0,1,0);




// 投影面是-2 到 2,因为摄像机和观察点都上移了2,所以观察的范围就是世界坐标的0-4,所以只看到窗口下面1/4处有正方体
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-2, 2, -2, 2, 1, 100);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(0,2, 5, 0,2,0, 0,1,0);


// 摄像机上移2,观察点不变,上下看到的是斜着穿过正方体的平面,左右还是正方体,所以上下长,左右不变
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-2, 2, -2, 2, 1, 100);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(0,2, 5, 0,0,0, 0,1,0);




// 摄像机上移2,观察点不变,而截取范围缩小,导致中间有部分投影为空
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-2, 2, -2, 2, 4.5, 5);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(0,2, 5, 0,0,0, 0,1,0);


// 看到的是眼前6.1 到 7.1 范围的东西,而正方体位于-1到1,即4到6,所以看不到任何东西
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-2, 2, -2, 2, 6.1, 7.1);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(0,0, 5, 0,0,0, 0,1,0);




//// -----------------透视投影---------------------------
// 观察点为5,y轴为上,眼睛睁开90度,宽高比为1,近裁剪面为眼前1,即世界坐标4,所以看到正方型占屏幕1/5
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(90,1,1,566);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(0, 0, 5, 0,0,0, 0,1,0);


// 眼睛睁开的小,等于正方向放大
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(30,1,1,566);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(0,0, 5, 0,0,0, 0,1,0);




// 宽高比为2,因为视口没变,所以感觉左右压缩,上下边长(正常显示应该 glViewport(0, 0, w, h/2);即视口的宽高于此一致)
//glViewport(0, 0, w, h/2);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(90,2,1,566);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(0,0, 5, 0,0,0, 0,1,0);




// 裁剪改变,参考正投影
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(90,1,6.1,566);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(0,0, 5, 0,0,0, 0,1,0);




// 摄像机与观察点同时下移2,等于正方体在头顶,被眼睛看到(不是直视),参考正投影
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(90,1,1,566);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(0,-2, 5, 0,-2,0, 0,1,0);




// 摄像机下移2,等于正方体正方体翻转了,参考正投影(注意与上一个的区别
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(90,1,1,566);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(0,-2, 5, 0,0,0, 0,1,0);


// 上方向为0 -1 0 等于上下颠倒,若是正方向有箭头指向就可以看清
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(90,1,1,566);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

gluLookAt(0,0, 5, 0,0,0, 0,-1,0);




    
[3] 服务端学习1:Warzone服务端研究
    来源: 互联网  发布时间: 2014-02-18
服务端学习一:Warzone服务端研究

今天看了一下国外的开源游戏Warzone ,想学习一下别人的服务端,就顺带翻译了一下他的网络方面的文档;如下


战地2100游戏中的网络相关代码使用TCP来实现对战网络,它可以由一个中转枢纽或者服务器来重新分配来自其他主机的消息数据(代码见:[source:lib/netplay/netplay.cpp@master lib/netplay/netplay.cpp])。每个主机都会对传到自己机器人和结构的指令负有责任,并且将自己的指令队列里面的消息转发转发给其他主机(指令队列:一个NET_SHARE_GAME_QUEUE message);


在所有客户端上,所有指令都会以相同的顺序执行相同的游戏逻辑时间,所以所有客户端的状态是相同的。状态信息通过syncDebug()函数打印出来,每个游戏时间片打印出来的状态的循环冗余校验码都会在网络中互相传递([source:lib/gamelib/gtime.cpp@master lib/gamelib/gtime.cpp] 中的 GAME_GAME_TIME )。如果某个时间片的消息没有按时送达,则游戏必须暂停(可能会增大指令发送和指令处理之间的公共延时来填补之后网络的滞后)。每个客户端的CRC冗余码都会进行比较来确认所有的客户端都有相同的游戏状态。


如果客户端没有相同的游戏状态,所有玩家已发出的打印的状态会被保存(在通过网络自动转发给你之后。)。项目里还有一些老的同步代码打算再次同步游戏状态如果客户端没有回复同意([source:src/multisync.cpp@master src/multisync.ppc]中),(在2.3以及之前的版本,游戏状态从未同步,所以这段代码曾经需要), 但是再次同步的代码实际上没有太大的用途,在未来可能会移除。


如果游戏客户端不知何故变得不同步,游戏状态的打印数据保存在~/.warzone2100-master/logs/desync[TIME]_p[CLIENT].txt中([TIME]是游戏逻辑时间,[CLIENT]是玩家数量)。为了查明为什么会不同步,会对之前的文件和不同的客户端进行对比(要确保对比的不是上一次游戏的数据),通过对数据逐一对比来找出哪个打印数据是错乱的源头。希望能通过它来猜测出导致这个不同数据的原因,并且解决它。


诸如炮弹之类的东西的数据不会通过网络进行转发。相反,每个玩家处理每个游戏物件并且计算出诸如物件哪里会着火,并在那个方向发生炮弹。由于每个客户端都有相同的代码和相同的数据,他们将在同一个目标上着火(在2.3版本及之前版本,这些话不完全正确,没有人会再谁向射击上达成共识)。每个对象有针对性的检查打击和毁灭,如果毁灭了,所有客户端都知道并且不需要发送任何网络消息。


战地2100这款游戏曾经被设计的让游戏开始时获得东西非常轻松,在发送决定给其他主机时也没有任何的数据封锁或者权限要求。预测错误并且尝试在检查阶段改正。正如你猜测的那样,这倒是了很多怪异事情的发生,没有人确认坦克在哪里,随机坦克随机爆炸,每个人都以为大家在作弊。


有很多东西需要在网络代码中进行改进:

1、TCP 连接枢纽模型不是特别的稳定有效,也就是说如果主机崩溃了,其他客户端也会随之崩溃。但是常理来讲应该每个客户端都要尝试连接其他客户端并且在另一个枢纽崩溃的情况下继续尝试连接。

2、用TCP取代UDP使得实现变得简单了许多,但是大多数的游戏使用P2P分布式决策系统或者使用UDP以达到快速传输和低开销的目的。

3、应该有一个玩家掉线重新连接的逻辑。




    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3