产生蛇的节点时,由于程序有一个线程让它移动的,代码部分如下:
for(int i=0; i<this.bodyNodes.size(); i++) {
Node node = this.bodyNodes.get(i);
switch (node.dir) {
case Up: {
node.posY--;
break;
}
case Down: {
node.posY++;
break;
}
case Left: {
node.posX--;
break;
}
case Right: {
node.posX++;
break;
}
}
if(i != 0) {
tempDir = preDir;
preDir = node.dir;
node.dir = tempDir;
}
}
然后添加新节点代码如下:
Node tailNode = this.bodyNodes.get(this.bodyNodes.size()-1);
dir = tailNode.dir;
switch(tailNode.dir) {
case Up: {
posX = tailNode.posX;
posY = tailNode.posY+1;
break;
}
case Down: {
posX = tailNode.posX;
posY = tailNode.posY-1;
break;
}
case Left: {
posX = tailNode.posX+1;
posY = tailNode.posY;
break;
}
case Right: {
posX = tailNode.posX-1;
posY = tailNode.posY;
break;
}
}
}
this.bodyNodes.add(new Node(posX, posY, dir));
最后发现不是的,是蛇的方向使用了Enum,然后开始的时候是随机产生的方向,结果,switch 的一个case把posY写成了posX,由于随机产生,所以bug时隐时现,导致我以为是线程问题产生的bug。