技♂巧备忘录
想到哪里写哪里,不要联系上下文
写在最前:
win10自带的输入法简繁切换快!捷!键!Ctrl+Shift+F卧槽
找到ThunderBrowser.exe删掉再放个假的文件在同目录搞死迅雷9的浏览器
-
用一个2位16进制数的byte存储一张牌的数据:
- 主要方便网络传输,byte不能再小了
- 用十六进制对应到字节的高低位刚好一个数4位,0F可以表示16种*16张牌数据,反正UNO是够用了~
- 一个字节低4位是数值,高4位是牌型,
或者反过来也没差,取低位&0x0f,取高位(&0xf0)>>4
-
一个10进制快速转2进制的方法
转自这里
比如 9999=8192+1024+512+256+8+4+2+1
8192 4096 2048 1024 512 256 128 64 32 16 8 4 2 1
1 0 0 1 1 1 0 0 0 0 1 1 1 1
结果就是 0010 0111 0000 1111,8个1妥妥的
-
x&x-1将x最小的(最右边)为1的位数置0
- 奇数减一直接最末位置0,在按位与
- 偶数从最右侧第一个为1的位置借位下来,该位变成0,后面位数取反,再与原数按位与只有该位之前的没有变,后面包括该位全变成0
-
http协议是建立在Tcp协议之上的????
- 卧槽这是真的
- http是在请求完成(或一段时间后)主动关闭了自己的Tcp连接,也就是释放掉了所有状态,所以http是短连接,无状态
-
鉴于大部分“程序实现的动画"都是基于时间的
- 对于一组需要有时间差的动画(比如'一次'给一个人发几张牌),不需要定时器一个一个完成,利用循环变量改变time就可以,比如1+i*0.5,最后一个完成的最慢,而不是开始的晚
-
拼界面时没用的UI控件怎么办?
- 不要直接删除!保不齐哪天又有用了!而且UI删了东西脚本里也要删除
- 像cocos studio这种奇葩即使可见性为false也能点到
-
直接拖到场景窗口外面去,需要的时候再拖回来咯
-
寻找判断值是否在数组中,数组长度很短可以试试一条if语句下标展开- 本身有短路规则,某一个表达式符合后面的就直接忽略了,等同一个break
- for语句每一部分都可以写多个表达式,可以同时设置两个变量,一个用于遍历,一个用于统计,其实和写在语句体里是一样的,看起来比较简洁而已(毕竟省了一个break)
- 一般来说偏向空间换时间的算法,辅助空间开起来不要方
-
关于居中对齐
- 寻找中点:mid=(count/2.0f-0.5f),奇偶数通用,每一个元素的位置为下标(i-mid)*offset
- 奇数的话mid对应正中间元素的下标,偶数是中间两个元素的中间值(没有下标)
-
循环切换按钮
static int times=0;++times;times%=count;
-
输出log信息封装到一个函数里
-
注释掉函数的语句体就可以屏蔽所有的log信息
-
还可以设定log等级来决定屏蔽哪些log
-
当然,确定没用的log最终还是要删除的
-
关于编号
- 统一编号位数,某些编辑器会将11排在2的前面
-
能用图片尽量用图片代替text
- 比如公告板/更新说明之类的一大段话,用一张做好的长图,虽然自动换行不方便
- 位图字体这种黑科技本质上渲染的是图片,虽然缺少很多灵活性,但是美观高效,极适合用在计时器或是血量伤害上
- 所谓程序效率,特别是游戏,大量的算法执行不会有什么性能影响,但是大量的渲染有,一次性大批量渲染文字(比如排行榜之类的)很有可能会造成卡顿
-
一些看到了别方的错误
- LinkError在@xxx::xxx中
函数只有定义,没有实现,偏偏这个函数还被调用了 - 内存0xXXXX不能访问
对象没有初始化或是对NULL对象进行操作 - fatal error致命的错误
- 一般并没那么致命,但确实没有具体的error捕获,不好定位
- 可能是数组下标越界了,C不对下标越界进行检查,然后强制操作就炸了
- 等等!C竟然不对下标越界进行检查????
- 也有可能是内存泄漏,new完没有delete,特别是文件、网络、数据库操作之类的
- 还有可能是释放早了
- 界面卡死
- 除了网络问题,绝壁是死循环了
- 所以说网络事件特别是接收不要放在主线程里
- 看看是不是把==写成了=
- 或者是switch里忘了break了
- 或者for循环里改变了循环变量的值
- LinkError在@xxx::xxx中
-
一句话
- 一句话判断两个数符号是否相等:return (x^y)>>31,符号位0为正1为负,与相同为1,不同为0,右移31位只保留最高符号位,为0表示符号不等,为1表示相等
- /n表示每隔n个数,%n表示从0到n
- 尽量用乘法代替除法(*0.25 *0.75之类的)
- 乘/除2的次方可以选择左/右移运算符
-
关于调试
Update之类的频繁调用的方法,确定问题的大概位置时应该在if语句中下断点,断点比log有用的多【废话
当然,统计一个循环次数之类的还是用log
或者是神一样的条件断点
dll使用附加调试,先启动附加到的程序,再执行附加
RemoteDebugger可以附加到远程进程进行调试(VS中) -
旁油,你知道ffmpeg吗(笑
- 还用什么格式工厂哦
- 录屏:
ffmpeg -f gdigrab -i desktop -vcodec libx264 -pix_fmt yuv420p -r 15 out.avi
这句使用gdigrab 库录制全屏(desktop),之后是通用配置:h264编码,色彩空间y420p(保证画面色彩质量的关键,也就是减少花屏),-r 是帧率
-i title="窗口名"会捕获一个窗口,窗口名是指在任务栏缩略图看到的那个,中文应该是有问题 - 使用dshow滤镜录屏和录音
ffmpeg -f dshow -i audio="xxx" -i video=xxx {通用配置} out.avi
录屏需要安装一个虚拟direct device(摄像头不需要),ffmpeg -list_devices true -f dshow -i dummy 列出所有的direct device - 同时录屏和声音
ffmpeg -f gdigrab -i desktop -f dshow -i audio="麦克风阵列 (Realtek High Definition Audio)" -vcodec libx264 -pix_fmt yuv420p -r 15 outt.mp4
* 好像只能输出为mp4格式不能是avi,或者也可能是音频编码问题,反正mp3也不能合到avi中,而输出MP4必须指定编码(和pix_fmt)
* 上面那个麦克风阵列在cmd里list_devices是乱码,保存成UTF8就可以了,注意空格 - 音频转换
ffmpeg -i input.mp3 [-ab bit(比特率 32,k为单位)] [-ar rate(码率,8000)] [-ac count(声道数1,2)] output.{format(mp3)} //aac不支持单声道 - 文件拼接
ffmpeg -f concat -i "file1|file2|file3" -c copy outfile
-
关于在此处打开命令行窗口
本身资源管理器shift+右键可以,在资源管理器中alt+D可以定位到地址栏,再敲cmd(或是其他.exe)都可以在当前目录下运行exe,然后写个
vbs{CreateObject("Wscript.Shell").SendKeys"%Dcmd{ENTER}"}
模拟按键,把触控板的按钮绑定到这个vbs就可以一个键在资源管理器的打开位置召唤cmd了对就是因为我懒
插一句,Ctrl+ESC等同释放*win,Ctrl+Shift+ESC可以召唤任务管理器 -
关于事件查看器
应用程序-特定 权限设置并未向在应用程序容器 xxxxxxxx用户【xxxxxxx】xxxxxAPPID为【xxxxxxxxx】,这种情况注册表里搜索class_root/appid/{APPID},编辑权限,赋予上面的用户完全修改权限(不行就改变所有者),看一下右边的APP名称,去组件服务里找到这个app,编辑启动和激活,以上用户本地启动和本地激活打勾,这种问题出现的原因可能是以上那个用户的信息被删除了(注册表清理之类的,会在编辑权限时发现产生一个未知用户{})
-
微信分享的坑
主要是缩略图,微信限制了图片大小(尺寸和文件大小),超过的话可能会卡死,也可能会显示不出来,图片宽高如果超过128会被搞成128*128的,比例会变
Android里获取一张assets下的图片(cocos的Resources):
InputStream is = getContext().getAssets().open(fileName);
Bitmap bmp= BitmapFactory.decodeStream(is);
is.close();
-
vmware 里的mac无法通过磁盘工具扩容
借助终端命令
diskutil list
diskutil resizeVolume {diskID} {容量(GB)}
啊其实在磁盘工具那里选择可用空间分区点下面-就行。。。
-
使用dnsmasq配置局域网DNS
安装brew: /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
安装dnsmasq: brew install dnsmasq
-
游戏中的语音聊天功能
首先是调系统录音和播放器,Recorder和Player,记得一定要stop()以及release(),否则会因为系统资源分配不足没有声音;
最好录制aac格式,ios好像不能直接录mp3,又比wav清晰
录制完成走http上传至服务器
最好等到上传回调再将客户端的录音按钮再次启用,当然,期间要排除录音失败文件根本没有上传的情况