日期:2014-05-20  浏览次数:20735 次

坦克大战中坦克移动和碰撞的问题
比如坦克大战中敌人的坦克移动和碰撞我是这样设计的,如果发生碰撞则转移方向,如果不碰撞则按照当前的方向走几秒钟,碰撞与否是一个全局变量boolean isCollide,在主线程里判断是否碰撞,改变方向是一个单独的方法moveDirection()。但是现在问题是我用Thread.sleep(moveTime);在moveDirection()之前调用,但是如果在线程休眠的时刻发生了碰撞,则无法立刻调用条件判断的另一个分支里的moveDirection(),大体结构如下,如何能达到想要的效果?
 new Thread(new Runnable() {

  public void run() {
  while (true) {

  if(!isCollide){
  Thread.sleep(moveTime);
  moveDirection();
  } else {
  moveDirection();
  }
  ...........

------解决方案--------------------
电驴上找马士兵的视频 其中有一个完整的坦克大战视频教程
------解决方案--------------------
因为这个情况产生的原因是在线程休眠的时候还能同时碰撞以及判断是否碰撞,相当于坦克无法移动的时候发生了碰撞,自然坦克也无法调转方向

那就得考虑是不是多线程判断碰撞合理?
严格意义上,考虑禁止在休眠时碰撞和判断碰撞。