// 旋转坦克得到新的坐标点
double[][] rotate_tank(double[] center, double rotate_angle, double tank_length, double tank_width, double panel_width, double core_width, double core_length, double canon_length, double canon_width) {
double radium = gougu(tank_length, tank_width);
double ini_angle = -1 * (Math.atan(tank_width/tank_length) + PI/2);
double[] pt1 = new double[2];
//System.out.println("aa="+ aa);
pt1[0] = center[0] + radium * Math.cos(ini_angle + rotate_angle);
pt1[1] = center[1]+ radium * Math.sin(ini_angle + rotate_angle);
//--
double[] pt2 = new double[2];
pt2= point_and_angle(pt1, rotate_angle, panel_width);
//-----
double[] pt4 = new double[2];
pt4= point_and_angle(pt2, rotate_angle + PI05, tank_length*2.0);
//----
double[] pt3 = new double[2];
pt3= point_and_angle(pt4, rotate_angle + PI, panel_width);
//---
double[] pt5 = new double[2];
pt5 = point_and_angle(pt2, rotate_angle + PI05, tank_length-core_length);
//----
double[] pt6 = new double[2];
pt6 = point_and_angle(pt4, rotate_angle - PI05, tank_length-core_length);
//---
radium = gougu(tank_length, tank_width);
ini_angle = -1 * (PI/2 - Math.atan(tank_width/tank_length));
double[] pt10 = new double[2];
pt10[0] = center[0]+ radium * Math.cos(ini_angle + rotate_angle);
pt10[1] = center[1]+ radium * Math.sin(ini_angle + rotate_angle);
//---
double[] pt9 = new double[2];
pt9= point_and_angle(pt10, rotate_angle - PI, panel_width);
//-----
double[] pt11 = new double[2];
pt11= point_and_angle(pt9, rotate_angle+ PI05, tank_length*2.0);
//---
double[] pt12 = new double[2];
pt12= point_and_angle(pt11, rotate_angle, panel_width);
//--
double[] pt7 = new double[2];
pt7= point_and_angle(pt9, rotate_angle+ PI05, tank_length-core_length);
//--
double[] pt8 = new double[2];
pt8= point_and_angle(pt11, rotate_angle- PI05, tank_length-core_length);
//---
//炮管
double[] pt15 = new double[2];
double[] temp= point_and_angle(original_pt, rotate_angle, canon_width);
pt15[0] = center[0] + temp[0];
pt15[1] = center[1] + temp[1];
//--
double[] pt14 = new double[2];
pt14 = point_and_angle(pt15, rotate_angle - PI05, tank_length);
//---
double[] pt13 = new double[2];
pt13 = point_and_angle(pt14, rotate_angle - PI, canon_width * 2.0);
//---
double[] pt16 = new double[2];
temp= point_and_angle(original_pt, rotate_angle - PI, canon_width);
pt16[0] = center[0] + temp[0];
pt16[1] = center[1] + temp[1];
//---
double[][] re = new double[16][2];
re[0]=pt1;
re[1]=pt2;
re[2]=pt3;
re[3]=pt4;
re[4]=pt5;
re[5]=pt6;
re[6]=pt7;
re[7]=pt8;
re[8]=pt9;
re[9]=pt10;
re[10]=pt11;
re[11]=pt12;
re[12]= pt13;
re[13] = pt14;
re[14] = pt15;
re[15] = pt16;
return re;
}double gougu (double x, double y) {
return Math.sqrt(x *x + y * y);
}void forward_tank(OneTank tank) {
double[][] re= rotate_tank(tank.center, tank.angle, tank.tank_length, tank.tank_width, tank.panel_width, tank.core_width, tank.core_length, tank.canon_length, tank.canon_width);
tank.pt1=re[0];
tank.pt2=re[1];
tank.pt3=re[2];
tank.pt4=re[3];
tank.pt5=re[4];
tank.pt6=re[5];
tank.pt7=re[6];
tank.pt8=re[7];
tank.pt9=re[8];
tank.pt10=re[9];
tank.pt11=re[10];
tank.pt12=re[11];
tank.pt13 = re[12];
tank.pt14= re[13];
tank.pt15 = re[14];
tank.pt16 = re[15];}
// 这里为了让程序有时间响应用户的操作,必须使用Thread。
class Thread8 extends Thread {
public void run() {
while (true) {
DrawTank();
}
}
} public void actionPerformed(ActionEvent e) { if (e.getSource() == btnstart) { // 一旦按下这个开始键,程序开始运行太阳系
if (firstTimeRunning) {
Thread8 t = null;
t= new Thread8();
// 目前哪一个星球是被聚焦的,默认是0号,即第一个
WhichPlanetFocus= 0;
ThreadRunning = true;
t.start();
} else {
ThreadRunning = !ThreadRunning;
}
}
}
}public class Tank {
public static void main(String[] args) throws IOException {
// 这个办法可以暂停程序以便开发者调试 JFrame dd= new TankSys();
}
}
double[][] rotate_tank(double[] center, double rotate_angle, double tank_length, double tank_width, double panel_width, double core_width, double core_length, double canon_length, double canon_width) {
double radium = gougu(tank_length, tank_width);
double ini_angle = -1 * (Math.atan(tank_width/tank_length) + PI/2);
double[] pt1 = new double[2];
//System.out.println("aa="+ aa);
pt1[0] = center[0] + radium * Math.cos(ini_angle + rotate_angle);
pt1[1] = center[1]+ radium * Math.sin(ini_angle + rotate_angle);
//--
double[] pt2 = new double[2];
pt2= point_and_angle(pt1, rotate_angle, panel_width);
//-----
double[] pt4 = new double[2];
pt4= point_and_angle(pt2, rotate_angle + PI05, tank_length*2.0);
//----
double[] pt3 = new double[2];
pt3= point_and_angle(pt4, rotate_angle + PI, panel_width);
//---
double[] pt5 = new double[2];
pt5 = point_and_angle(pt2, rotate_angle + PI05, tank_length-core_length);
//----
double[] pt6 = new double[2];
pt6 = point_and_angle(pt4, rotate_angle - PI05, tank_length-core_length);
//---
radium = gougu(tank_length, tank_width);
ini_angle = -1 * (PI/2 - Math.atan(tank_width/tank_length));
double[] pt10 = new double[2];
pt10[0] = center[0]+ radium * Math.cos(ini_angle + rotate_angle);
pt10[1] = center[1]+ radium * Math.sin(ini_angle + rotate_angle);
//---
double[] pt9 = new double[2];
pt9= point_and_angle(pt10, rotate_angle - PI, panel_width);
//-----
double[] pt11 = new double[2];
pt11= point_and_angle(pt9, rotate_angle+ PI05, tank_length*2.0);
//---
double[] pt12 = new double[2];
pt12= point_and_angle(pt11, rotate_angle, panel_width);
//--
double[] pt7 = new double[2];
pt7= point_and_angle(pt9, rotate_angle+ PI05, tank_length-core_length);
//--
double[] pt8 = new double[2];
pt8= point_and_angle(pt11, rotate_angle- PI05, tank_length-core_length);
//---
//炮管
double[] pt15 = new double[2];
double[] temp= point_and_angle(original_pt, rotate_angle, canon_width);
pt15[0] = center[0] + temp[0];
pt15[1] = center[1] + temp[1];
//--
double[] pt14 = new double[2];
pt14 = point_and_angle(pt15, rotate_angle - PI05, tank_length);
//---
double[] pt13 = new double[2];
pt13 = point_and_angle(pt14, rotate_angle - PI, canon_width * 2.0);
//---
double[] pt16 = new double[2];
temp= point_and_angle(original_pt, rotate_angle - PI, canon_width);
pt16[0] = center[0] + temp[0];
pt16[1] = center[1] + temp[1];
//---
double[][] re = new double[16][2];
re[0]=pt1;
re[1]=pt2;
re[2]=pt3;
re[3]=pt4;
re[4]=pt5;
re[5]=pt6;
re[6]=pt7;
re[7]=pt8;
re[8]=pt9;
re[9]=pt10;
re[10]=pt11;
re[11]=pt12;
re[12]= pt13;
re[13] = pt14;
re[14] = pt15;
re[15] = pt16;
return re;
}double gougu (double x, double y) {
return Math.sqrt(x *x + y * y);
}void forward_tank(OneTank tank) {
double[][] re= rotate_tank(tank.center, tank.angle, tank.tank_length, tank.tank_width, tank.panel_width, tank.core_width, tank.core_length, tank.canon_length, tank.canon_width);
tank.pt1=re[0];
tank.pt2=re[1];
tank.pt3=re[2];
tank.pt4=re[3];
tank.pt5=re[4];
tank.pt6=re[5];
tank.pt7=re[6];
tank.pt8=re[7];
tank.pt9=re[8];
tank.pt10=re[9];
tank.pt11=re[10];
tank.pt12=re[11];
tank.pt13 = re[12];
tank.pt14= re[13];
tank.pt15 = re[14];
tank.pt16 = re[15];}
// 这里为了让程序有时间响应用户的操作,必须使用Thread。
class Thread8 extends Thread {
public void run() {
while (true) {
DrawTank();
}
}
} public void actionPerformed(ActionEvent e) { if (e.getSource() == btnstart) { // 一旦按下这个开始键,程序开始运行太阳系
if (firstTimeRunning) {
Thread8 t = null;
t= new Thread8();
// 目前哪一个星球是被聚焦的,默认是0号,即第一个
WhichPlanetFocus= 0;
ThreadRunning = true;
t.start();
} else {
ThreadRunning = !ThreadRunning;
}
}
}
}public class Tank {
public static void main(String[] args) throws IOException {
// 这个办法可以暂停程序以便开发者调试 JFrame dd= new TankSys();
}
}
解决方案 »
- JAVA 内部类是否可以相互引用?
- 如何用JavaSE写一个简易的HTTP服务器
- java.security.AccessControlException: access denied (java.io.FilePermission <<AL
- 如何令JInternalFrame 默认最大化?
- JAVA 异常提问
- 一个比较菜的问题~~
- 怎么用java打开dbf格式的文件,修改其中的内容保存,它跟读写txt文件有区别吗??
- 求教:安装j2re-1_3_1_02-win-i.exe提示成功安装,可为什么还是不能运行
- 关于jar的一个小问题
- j2sdk-1_4_0_03-windows-i586.exe 是不是所谓的JDK?
- 枚举代码的调用疑问
- JDBC空指针异常,求帮助!(40分)
创建一个全局变量:private static boolean keyDown[256]; //256个按键的状态
键盘监听:if key Down{
keyDown[keyCode] = true;
}
if key Release{
keyDown[keyCode] = false;
}键盘的监听里只改变状态,不进行任何操作。
对于操作,在你的游戏线程里进行。
例如,你可以在游戏线程里再写这样一段代码:.....
if(keyDwon[KeyEvent.VK_UP]){
...}
else if
...保证不卡