xamarin android 5.0以下版本 能使用https的webclient

android 5.0以上可以在工程
[属性->Android选项->高级]
HttpClient实现选择AndroidClientHandler

网上的解决方案大多是ModernHttpClient,
由于ModernHttpClient实际调用的就是AndroidClientHandler所以android 5.0以下版本不行

选择托管(HtppClientHandler)-MONO
标签中添加btls
可以使用boringssl来实现https client
由于是mono环境,安卓低版本也可以使用

开发准备

关于游戏引擎选择。

之前Unity用的比较多,易上手,开发快,但是太臃肿了,很多东西不能自定义,想优化也优化不了。 其他游戏引擎libgdx,oxygen一类的看了一下感觉不错,但是和理想有些差距。

先选一些比较轻量级的引擎

图形: opengl + SDL2 https://libsdl.org/download-2.0.php 比较了下SDL2和glfw,嘛。。毕竟steam支持SDL2呢,先按省事的来 opengl教程推荐:https://learnopengl.com/

音频: 能放声音就行,需要先定音频格式 ogg的话http://www.vorbis.com/

物理: BOX2D http://box2d.org/

网络: websocket,(如果有网络功能的话 https://github.com/uWebSockets/uWebSockets

此外当然还要接入steamapi https://partner.steamgames.com/

UI库: https://github.com/wjakob/nanogui

编辑器UI:https://github.com/ocornut/imgui

SDL其他库: IMAGE: https://www.libsdl.org/projects/SDL_image/

TTF: https://www.libsdl.org/projects/SDL_ttf/

先备份了,用到时候再加

tips:

创建主窗体之前设置属性。 尽量一次向显卡发送最多的顶点数据来提高性能。

这需要把顶点数据先汇总起来,并且使用图集(atlas)或者array texture来打包纹理。

跟上时代的脚步–现代C++

from MSDN:

> 现代 C++ 强调:
> 基于堆栈的范围,而非堆或静态全局范围。
> 自动类型推理,而非显式类型名称。
> 智能指针,而非原始指针。
> std::string 和 std::wstring 类型(请参见 ),而非原始 char[] 数组。
> 标准模板库 (STL) 容器(例如 vector、list 和 map),而非原始数组或自定义容器。 请参见、和< 映射 >。
> STL 算法,而非手动编码的算法。
> 异常,可报告和处理错误条件。
> 使用 STL std::atomic<>(请参见 ),而非其他线程间通信机制的无锁线程间通信。
> 内联 lambda 函数,而非单独实现的小函数。
> 基于范围的 for 循环,编写以 for ( for-range-declaration : expression ) 形式使用数组、STL 容器和 Windows 运行时集合的更可靠循环。 这是核心语言支持的一部分。 有关详细信息,请参阅基于范围的 for 语句 (C++)。

智能指针不用多说,很久以前的东西了,毕竟有利有弊,注意unique和shared的分类。

lambda语法参考:https://msdn.microsoft.com/zh-cn/library/dd293608.aspx
[](args…)->int{return val;}

stl语法参考:https://msdn.microsoft.com/zh-cn/library/yah1y2x8.aspx

基于范围的 for 循环: for(auto &v : arr)

ubuntu 常用命令

ubuntu常用命令:
ps aux 显示所有进程
ps aux –sort -rss 按内存使用排序显示进程

apt list –installed 查看已安装的程序包
apt-get install 安装指定程序包
apt-get purge 移除程序(包含配置文件)
apt-get remove 移除程序(不包含配置)

a2ensite <网站配置文件(除后缀)> apache2允许网站

a2dissite <网站配置文件(除后缀)> apache2禁用网站

a2enmod <模块名> apache2允许模块

a2dismod <模块名> apache2禁用模块

service apache2 reload apache2重新加载配置

service apache2 restart apache2重启

awk -F: ‘{printf “%s:%s\n”,$1,$3}’ /etc/passwd 显示所有用户和他们的UID

id -u <用户名> 显示指定用户的uid

getent group 显示所有组和id

getent group <组名> 显示指定组的id

ubuntu iptables

linux系统自带的网络防火墙。用来指定允许访问的端口。
常用命令
显示当前iptables设定:

iptables -L

输出当前iptables设定到文件:

iptables-save > /etc/iptables.rules

从设定文件读取iptables到系统:

iptables-restore < /etc/iptables.rules

添加一条新记录:

iptables -A INPUT -p tcp --dport <端口号> -j ACCEPT

禁止指定IP访问:

iptables -A INPUT -s  -j DROP

Unity动态Mesh操作

在Unity的世界中,MeshRender在游戏场景里渲染出Mesh,成为我们眼中的游戏模型。通常由Max, Maya, Blender等3d软件导出,再向Unity工程中导入。Mesh由点线面组成,是游戏中不可或缺的部分。

变量

vertices 顶点坐标数组Vector3[]
triangles 三角形顶点序列,以vertices的index为顺序,3个一组,连接成三角形int[]
uv 贴图uv,即贴图切分的坐标Vector2[]
normals 法线Vector3[] 

创建mesh对象

Mesh mesh = new Mesh();
//先创建点
mesh.vertices = new Vector3[]{new Vector3(0,-50,0), new Vector3(100,0,0), newVector3(-100,0,0) };
//再连接三角形
mesh.triangles = new int[]{0,1,2};

在有些游戏引擎中,三角形的顺序是固定的,只需指定vertices,就能自动生成三角形
而unity不同,除了定义顶点以外,还必须定义三角形顺序
tri
如图,2个三角形的一条边(1,2)为共边
triangles = new int[]{0,1,2,1,2,3};

(其实0,1,2,3已提供了足够的信息,所以某些游戏引擎只有第一个三角形会写全,之后的只提供1个额外顶点)

常用方法:

MarkDynamic 标记为动态mesh,更适合经常更新
Optimize   优化
RecalculateBounds
RecalculateNormals

windows sdk 创建dialog

利用rc资源文件,新建dialog对象

 

DialogBox(hInstance, MAKEINTRESOURCE(IDD_MAIN_DIALOG), NULL, DlgProc);

 

BOOL CALLBACK DlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
UNREFERENCED_PARAMETER(lParam);
switch (message)
{
case WM_INITDIALOG:
return (INT_PTR)TRUE;

case WM_COMMAND:
if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
{
EndDialog(hDlg, LOWORD(wParam));
return (INT_PTR)TRUE;
}
break;
}
return (INT_PTR)FALSE;
}