关于弹球游戏的总结
1 两球的碰撞
在使用shap()方法判断两球碰撞后,用if方法编写球的改变写完后将if判断中的条件由ture改为flase负责同球会不断的相互碰撞,代码如下:
while (!Threadtext.isStop) {
for (int i = 0; i < list.size() - 1; i++) {
Threadtext b1 = list.get(i);
Threadtext b2 = list.get(i + 1);
boolean b = b1.intersects(b2.x, b2.y, b2.width, b2.height);
while(b){
int m=b1.x1;
int n=b1.y1;
b1.x1=b2.x1;
b1.y1=b2.y1;
b2.x1=m;
b2.y1=n;
b=false;
}
}
球对砖块的碰撞,与砖块的消失
在判断球与砖块碰撞的时候不能好高骛远,想要一步到位否则只会将自己绕糊涂,一步一步的根据球与砖块的坐标计算所有碰撞 的可能情况,砖块的消失则用到界面的重绘。同时应注意编码编写的顺序时能影响到画面效果代码对比
理清头绪前
// //判断球是否碰撞的砖块
// if(MapUtil.array[i][j]!=0&&y<=(i+1)*34&&y>=(i+1)*34-17&&x>=(j)*34-17&&x<=(j+1)*34-17){
// y1=-y1;
// bl.update(g);
// //将砖块位置设置为0(表示消除砖块)
// MapUtil.array[i][j]=0;
// }
理清头绪后
// 判断球是否碰撞的砖块
if (MapUtil.array[i][j] != 0) {
if ((Math.abs((xr + 17) - (x + 15)) <= (17 + 15)
&& (y > yr - 30) && y < yr + 34)) {
x1 = -x1;
// 将砖块位置设置为0(表示消除砖块)
MapUtil.array[i][j] = 0;
comp--;
bl.update(g);
}
else if (Math.abs((yr + 17) - (y + 15)) <= (17 + 15)
&& (x > xr - 30 && x < xr + 34)) {
y1 = -y1;
// 将砖块位置设置为0(表示消除砖块)
MapUtil.array[i][j] = 0;
comp--;
bl.update(g);
}
}
图片地址的引用和界面的闪烁
对于地图的地址的引用,最好将地图复制在程序对应名称的images包内,然后用相对位置引用给程序。界面的闪烁可以用双缓冲来解决,在重绘方法内在创建一个图片类将所有要刷新的图片板块全部绘制到新的图片对象中,再将对象一次性的画到界面上。
1 两球的碰撞
在使用shap()方法判断两球碰撞后,用if方法编写球的改变写完后将if判断中的条件由ture改为flase负责同球会不断的相互碰撞,代码如下:
while (!Threadtext.isStop) {
for (int i = 0; i < list.size() - 1; i++) {
Threadtext b1 = list.get(i);
Threadtext b2 = list.get(i + 1);
boolean b = b1.intersects(b2.x, b2.y, b2.width, b2.height);
while(b){
int m=b1.x1;
int n=b1.y1;
b1.x1=b2.x1;
b1.y1=b2.y1;
b2.x1=m;
b2.y1=n;
b=false;
}
}
球对砖块的碰撞,与砖块的消失
在判断球与砖块碰撞的时候不能好高骛远,想要一步到位否则只会将自己绕糊涂,一步一步的根据球与砖块的坐标计算所有碰撞 的可能情况,砖块的消失则用到界面的重绘。同时应注意编码编写的顺序时能影响到画面效果代码对比
理清头绪前
// //判断球是否碰撞的砖块
// if(MapUtil.array[i][j]!=0&&y<=(i+1)*34&&y>=(i+1)*34-17&&x>=(j)*34-17&&x<=(j+1)*34-17){
// y1=-y1;
// bl.update(g);
// //将砖块位置设置为0(表示消除砖块)
// MapUtil.array[i][j]=0;
// }
理清头绪后
// 判断球是否碰撞的砖块
if (MapUtil.array[i][j] != 0) {
if ((Math.abs((xr + 17) - (x + 15)) <= (17 + 15)
&& (y > yr - 30) && y < yr + 34)) {
x1 = -x1;
// 将砖块位置设置为0(表示消除砖块)
MapUtil.array[i][j] = 0;
comp--;
bl.update(g);
}
else if (Math.abs((yr + 17) - (y + 15)) <= (17 + 15)
&& (x > xr - 30 && x < xr + 34)) {
y1 = -y1;
// 将砖块位置设置为0(表示消除砖块)
MapUtil.array[i][j] = 0;
comp--;
bl.update(g);
}
}
图片地址的引用和界面的闪烁
对于地图的地址的引用,最好将地图复制在程序对应名称的images包内,然后用相对位置引用给程序。界面的闪烁可以用双缓冲来解决,在重绘方法内在创建一个图片类将所有要刷新的图片板块全部绘制到新的图片对象中,再将对象一次性的画到界面上。