文章目录
- 前言
- 一、蓝牙调试
- 1.组件设计
- 2.逻辑设计
- 二、蓝牙对战
- 1.组件设计
- 2.逻辑设计
- 3.效果展示
- 总结
前言
练习APP Inventor中蓝牙的使用,并为之前的项目APP小游戏——一个都不能死增加了蓝牙对战功能。
一、蓝牙调试
先写一个蓝牙调试的APP,用来收发文本
1.组件设计
第一栏显示连接状态;第二栏显示连接信息;第三栏用于确定开启服务器还是客户端;第四、五栏用于设置和显示收发数据。
2.逻辑设计
1、通过下拉框选择调用服务器还是客户端;
2、如果调用客户端,在列表选择框中写入之前连接过的地址,选择需要连接的地址进行连接;
3、通过连接状态来判断当前使用的是服务器还是客户端;
4、使用计时器实现隔一段时间进行一次接收。
二、蓝牙对战
学会了用蓝牙收发文本,来写一个蓝牙对战的小游戏。
1.组件设计
和前面相似,第一栏用来设置使用服务器还是客户端;第二栏的黑色方框用来显示接收到的数据;第三栏显示比分和玩家状态;另外将游戏界面先隐藏起来。
2.逻辑设计
由于不同阶段所收发的内容不同,以状态机的形式规定什么时候该做什么事
写两个过程用来收发文本
在游戏进行的过程中,需要发送玩家跳跃、撞墙、时间信息,为了避免混乱,将数据写入列表,同时进行收发
把列表组装成文本进行发送,再把接收到的文本拆成列表
蓝牙的部分就写好了,接下来就是一些小细节,项目文件我会传到资源里去。
3.效果展示
录屏的手机控制的是下面的人物,可以看到,对手的动作存在着很大的延迟。一方面,是因为计时器的间隔设置的是0.5s,主要是防止同时收到两组数据(不过还是发生了);另一方面,传数据的时候只传了跳跃,如果把墙的位置信息也传上,效果会更好一些。
总结
用APP Inventor拼一些简单的功能还是挺方便的,但如果碰到复杂的任务,条条框框就显得眼花缭乱,尽量多使用过程来做简化,即便是只调用一次。蓝牙对战的效果不是很好,即时类还是很吃延时的,关键是需要实现一次只接受一组数据,可以采用分隔符或者设置缓冲区等方法。还有,模拟器和电脑都连不上蓝牙,每次调试的时候都要往两个手机里面下,前前后后下了二十来次,真的是,麻烦…