Fight Travel开发日志(5)

  之前一直想在决赛的时候要做到的功能是,用Android的手机,打开重力传感器,用wifi连接到无线路由器上玩PC端的一个赛车的游戏。今天我把大一的那个学弟喊来了实验室,然后一起去做那个手机端和PC端的Socket通信部分,实现之前的想法。由于以前也做过Java的网络编程,所以这次做网络通信部分就非常简单了。我把以前的代码拿了过来,放到我们的工程里面,然后作部分修改,就可以用了。
  我们两个的手机都安装了控制软件,PC端打开了服务器,然后用wifi连到无线TP-Link上。在手机上点几个上下左右的按钮,结果服务器马上就显示了我们手机按键的消息了!看来我们的一个想法实现了,兴奋!我们是用Socket发送对象流来实现的。对象封装的是按键编码、重力感应方向、手机MAC号,和一些获取数据方法。但是一个问题出现了。手机端一断开连接后重新连接的时候,手机端的程序就挂了...一直都找不出是什么原因。后来我们在模拟器测试了一下,同样情况,挂了之后,Logcat报异常,一看,竟然说是线程已经运行了?奇怪,断开连接的时候,我已经将后台发送对象的子线程关闭了(用一个静态变量isStart控制线程的关闭,将isStart赋值false,子线程就结束),重新连接的时候再开一次线程应该是成功的才是。一直都没有办法解决,直到一个大三的软件工程的一个学长来实验室看看的时候,我跟他说那个问题。他问我用的是不是有名线程,我说是的,结果他就把问题解决了...在关闭线程的时候,将有名线程赋值为null就可以了。虽然不知道为什么这样做也可以,不过问题还是解决了。感谢这位学长啊,后来学长说这是经验问题。我觉得也是,毕竟我们又不是专门搞Java的(本人是搞嵌入式的)。
  那位学长也看了一下我PC端的代码。我说窗口的那个路面和车子都是自己用3DS MAX画的。他说我这样做不行,应该是用3DS MAX画一些地图元素才是,而不是用3DS MAX把整个地图都画出来了,这样程序解析wrl文件会负担很重,而且地图也是死的。他这么说,我又想起我以前的那个C语言程序设计大赛的游戏的地图元素,确实,这样做的优点很多,地图多样化,碰撞检测也好做。
  但是,我还是不知道碰撞检测怎么做...算法上还是会判断碰撞,但是什么东西才能检测车子和障碍物的位置关系呢?还是找找Java 3d那些API能获取边界吧。

你可能感兴趣的:(Fight Travel开发日志(5))