时间线
- 2025 年四月 (1)
- 2025 年二月 (2)
- 2024 年十二月 (1)
- 2024 年十一月 (1)
- 2024 年七月 (1)
- 2024 年六月 (1)
- 2024 年五月 (2)
- 2024 年四月 (3)
- 2024 年三月 (9)
- 2023 年十二月 (1)
- 2023 年十一月 (1)
- 2023 年十月 (1)
- 2023 年五月 (1)
- 2023 年四月 (1)
- 2022 年十二月 (5)
- 2022 年十月 (1)
- 2022 年七月 (1)
- 2022 年六月 (1)
- 2022 年三月 (1)
- 2022 年一月 (3)
- 2021 年十二月 (2)
- 2021 年十一月 (1)
- 2021 年十月 (2)
- 2021 年九月 (1)
- 2021 年八月 (2)
- 2021 年七月 (2)
- 2021 年六月 (1)
- 2021 年四月 (2)
- 2021 年三月 (1)
- 2021 年二月 (1)
- 2020 年十二月 (1)
- 2020 年五月 (2)
- 2019 年六月 (1)
- 2019 年五月 (1)
- 2018 年八月 (2)
- 2018 年四月 (1)
- 2018 年三月 (1)
- 2018 年二月 (1)
- 2017 年十一月 (1)
- 2017 年五月 (1)
- 2017 年三月 (1)
- 2017 年一月 (3)
- 2016 年九月 (3)
- 2016 年六月 (2)
- 2016 年五月 (1)
- 2016 年一月 (1)
- 2015 年十月 (1)
- 2015 年九月 (1)
- 2015 年八月 (1)
- 2015 年七月 (5)
- 2015 年四月 (5)
- 2014 年五月 (1)
- 2014 年四月 (1)
- 2014 年三月 (2)
- 2014 年二月 (2)
- 2014 年一月 (7)
- 2013 年十一月 (1)
- 2013 年九月 (2)
- 2013 年七月 (3)
- 2013 年六月 (1)
- 2013 年五月 (3)
- 2013 年四月 (3)
- 2013 年二月 (3)
- 2013 年一月 (10)
- 2012 年十二月 (3)
- 2012 年十一月 (2)
- 2012 年十月 (3)
- 2012 年九月 (3)
- 2012 年八月 (1)
- 2012 年七月 (7)
- 2012 年六月 (5)
- 2012 年五月 (7)
- 2012 年四月 (3)
- 2012 年三月 (4)
- 2012 年二月 (8)
- 2012 年一月 (9)
- 2011 年十二月 (3)
- 2011 年十一月 (4)
- 2011 年十月 (5)
- 2011 年九月 (3)
- 2011 年八月 (5)
- 2011 年五月 (1)
- 2011 年四月 (5)
- 2011 年三月 (11)
- 2011 年二月 (6)
- 2010 年十二月 (1)
- 2009 年九月 (1)
- 2009 年八月 (1)
- 2009 年七月 (1)
- 2008 年十二月 (2)
- 2008 年十一月 (4)
- 2008 年十月 (4)
七嘴八舌
- 123 发表在《[转]在ios模拟器上实现模拟双指触摸》
- admin 发表在《nodejs-express初体验》
- laozh 发表在《nodejs-express初体验》
- xxx 发表在《玩转微信公号开发(七)——账号体系与oauth登录》
- 银基网 发表在《玩转微信公号开发(七)——账号体系与oauth登录》
发布日历
2025 年六月 一 二 三 四 五 六 日 « 四 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
Author Archives: jkl
Arduino软串口的使用
2022 年 10 月 24 日 – 上午 7:19
Arduino Uno自带一个串口,也就是管脚1、2,“硬串口”,IDE upload代码、使用串口监视器调试程序,用到的都是这个串口,那么,如果你还需要用串口连接其他设备时,应该怎么办呢?
为了不应现调试程序,这里需要用到“软串口”,也就是将其他数字管脚当成串口使用~~の,难道要按TTL串口协议解析串口数据不成?
到是没有这么复杂,Arduino已经自带SoftwareSerial库,完成了对串口逻辑的封装。以下代码是串口读取VAMLED电压模块的逻辑,咱们以此为例来看看软串口是怎么用的:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #include <SoftwareSerial.h> SoftwareSerial EVSerial(2, 3); //定义软串口管脚,分别是rx tx void setup (){ EVSerial.begin(9600); //波特率 Serial.begin(9600); } void loop() { if(EVSerial.available() > 0){ Serial.print(">> "); Serial.println(EVSerial.readString());//在串口监视器,打印电压模块传递的电压值 delay(1000); //每读取一次,延时 EVSerial.print(0); //向VAMLED模块发送“上报电压”指令 } } |
以上逻辑,即包含了SoftwareSerial读取和写入的操作,不过实际使用有两个问题:
1. 每模拟一个软串口都要消耗单片机的资源,内存和flash、堆栈等。软串口和硬串口对于发送数据是一样的,但在接收数据时,性能就有差别了,硬串口是支持中断接收数据的,不会影响程序运行的实时性,但是软串口不支持中断,接收串口数据你得去不断轮询,收到的数据还有可能会丢掉
2. 具体到上面这个例子,实际收到的电压值包含乱码,不好解析,具体原因正在研究,等有结果了再更新o(* ̄︶ ̄*)o
———-
转载请注明出处:http://www.jiangkl.com/2022/10/arduino_serial/
浅析schedule与update的关系
2022 年 07 月 21 日 – 上午 9:52
schedule是cocos自带的定时器,这里简单试试这玩意的执行情况:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | onLoad () { this.schedule(()=>{ let now = new Date().getTime(); console.log('schedule-test, schedule 0.001', now); }, 0.001); this.schedule(()=>{ let now = new Date().getTime(); console.log('schedule-test, schedule 0.01', now); }, 0.01); this.schedule(()=>{ let now = new Date().getTime(); console.log('schedule-test, schedule 0.1', now); }, 0.1); } update (dt) { let now = new Date().getTime(); console.log('schedule-test, update', now); } |
输出如下:
————
schedule-test, update 1658395521046
schedule-test, schedule 0.001 1658395521047
schedule-test, schedule 0.01 1658395521048
schedule-test, update 1658395521063
schedule-test, schedule 0.001 1658395521064
schedule-test, schedule 0.01 1658395521065
schedule-test, update 1658395521080
schedule-test, schedule 0.001 1658395521081
schedule-test, schedule 0.01 1658395521082
schedule-test, update 1658395521097
schedule-test, schedule 0.001 1658395521098
schedule-test, schedule 0.01 1658395521099
schedule-test, schedule 0.1 1658395521100
schedule-test, update 1658395521113
schedule-test, schedule 0.001 1658395521114
schedule-test, schedule 0.01 1658395521115
。。。。
————
简单总结一下,可以得到下面几个结论:
1. 在cocos的世界里,一“帧”,就是它的最小计时单位,也是schedule的最小调用周期,比帧间隔再小的时间单位,对schedule无效
2. schedule(可能)会在每一帧的update以后,调起定时逻辑
3. 即使定时间隔大于帧间隔,schedule也不能按毫秒级的时间精确调起回调函数(这一点从定时“0.1s”的回调里可以看出,不过上面没贴出出这么多)
嗯,简单来说看,可以把schedule当成低配版setInterval,既然cocos提供了自己的定时器,就尽量少用setInterval和setTimeout吧
————
转载请注明出处:http://www.jiangkl.com/2022/07/cocos_schedule_update
使用图片序列创建cocos帧动画
2022 年 06 月 17 日 – 上午 7:27
需求是制作一个简单的帧动画,图片素材来自一个gif,只有八帧,实现简单的人物动作。做demo时,没找到ccoos的切片工具,便直接用8个图片文件来实现了动画,效果还不错。但是正式项目时,八张图就是八个http请求,会拖慢页面加载速度,于是便回头找cocos做图片切片的方法
这里要吐槽一个cocos,css有background-position,unity更是自带强大的切片工具,但找了很久,也没找到cocos对应的解决方案~~
从前天一直拿“cocos 切片”类似的关键字搜索,一直也没找到解决方案~~到是在sprite的sliced浪费了不少时间。。。最后才发现被误导了,这玩意根本不是做图片切片用的,而是做背景图无变形放大用的。。。
终于,昨天无意间看到一篇文章,提到的cocos的mask组件。。。嗯,就是它了,遮罩
具体做法也很简单:父节点增加mask组件,然后将图片精灵放在子节点,调整子节点的position属性,就可以实现类似background-position的效果,详细设置见下图
———-
转载请注明出处:http://www.jiangkl.com/2022/06/sequence_animation
————————-
三天后补充:
就在我自己拿ps合并了项目里的二十几张小图后,然后呼哧呼哧一顿替换,将项目小图通过前面提得到的mask形式全都全换成了合并后大图,然后继续项目调优。。。然后就看到了cocos高手的调优经验:慎用mask,因为会带来过多的Drawcall。。。调整后的项目,Drawcall是36。。。咕~~(╯﹏╰)b
同时也在这篇文章里看到了解决小图问题的方案:cocos createor自带“合并图集”的功能。。。
这就是不好好看教材,直接靠搜代码方案做项目的结果,白费两天时间。。。
还好上次折腾前,备份了项目。于是直接恢复项目,10分钟不到,就是用“合并图集”完成了减少http请求数的目标——然后打包运行,项目正常!
———-
反思一下,其实就是没搞清“切图”和“合图”的区别,被自己一知半解的unity经验误导了。。。一直没找到点上
记得大三时,刚接触汇编语言,有一次作业,需要相似的逻辑,执行10次。虽然当时已经学了c,知道程序里有“循环”可以做这事,可是在简单翻书没找到汇编的“循环”写法以后,下意识以为汇编这种低级语言没有循环,于是手动写了10次代码逻辑。老师看了以后评价:下次作业要执行有个一万次的循环,你要不要也这么写?
cocos碰撞检测的坑–移动太快可能不触发
2022 年 03 月 22 日 – 上午 10:33
下午调试一个cocos射击游戏,未击中时,目标背后的“墙”上会显示一个弹孔。本来以为挺简单的东西,可碰到了一个无厘头的问题,搞了一个小时才解决。
具体的问题是这样的:子弹和墙的碰撞事件,有时能触发、有时不能触发。于是按照以前的经验,逐个找了下面一个容易出问题的点:
1. 开启碰撞检查:cc.director.getCollisionManager().enabled = true;
2. 碰撞检测函数onCollisionEnter加入到碰撞实体的绑定函数
3. 项目设置里的碰撞分组设置
4. 碰撞节点出了添加collder,还要至少有一方添加rigidbody
———-
这几个点都确认了一遍,还是没解决。。。只能瞎搞了
N种尝试以后,降低子弹速度了,问题不在重现。。。
于是看出了端倪:游戏过程是每帧间隔的,子弹速度太快,撞击体太小,刚好撞击的过程发生在了两帧之间
尝试增大撞击体“墙”的“厚度”,问题解决
——————
转载请注明出处:http://www.jiangkl.com/2022/03/cocos_oncollisionenter