📄 car.java~91~
字号:
import javax.microedition.m3g.*;
public class Car {
public static float RotY = 75;
public static float carspeed = 0;
public static float lastcarspeed = 0;
public static float maxspeed = 4f;
public static float radius = 6;
public static int currentfield = 0;
public static float[] PreCarPosition;
public static double camSine;
public static double camCosine;
public static float turnangle = 4;
public static float acspeed = 0.01f;
public static float mass = 0.1f;
public boolean hitbyother;
public float Hspeed;
public float HrotY;
public Car() {
}
public void Checkfield(Group pod, boolean autoturn) {
float[] car = new float[3];
pod.getTranslation(car);
float[] left = new float[3];
float[] right = new float[3];
float dot;
for (int n = 0; n < 8; n = n + 2) {
left[0] = Global.roadpoints[currentfield][n];
left[1] = 0.0f;
left[2] = Global.roadpoints[currentfield][n + 1];
if (n == 6) {
right[0] = Global.roadpoints[currentfield][0];
right[1] = 0.0f;
right[2] = Global.roadpoints[currentfield][1];
}
else {
right[0] = Global.roadpoints[currentfield][n + 2];
right[1] = 0.0f;
right[2] = Global.roadpoints[currentfield][n + 3];
}
dot = Collision.Check(left, right, car);
if (dot < 0) {
//if (dot < -10000) {
switch (Global.roadinfo[currentfield]) {
case 1:
if (n == 0) {
if (Global.roaddir[currentfield]) {
currentfield = currentfield + 1;
}
else {
currentfield = currentfield - 1;
}
headandend();
// carspeed = -carspeed;
}
if (n == 2) {
collide(pod);
return;
}
if (n == 4) {
if (Global.roaddir[currentfield]) {
currentfield = currentfield - 1;
}
else {
currentfield = currentfield + 1;
}
headandend();
}
if (n == 6) {
collide(pod);
return;
}
break;
case 2:
if (n == 0) {
collide(pod);
return;
}
if (n == 2) {
if (Global.roaddir[currentfield]) {
currentfield = currentfield + 1;
}
else {
currentfield = currentfield - 1;
}
headandend();
}
if (n == 4) {
collide(pod);
return;
}
if (n == 6) {
if (Global.roaddir[currentfield]) {
currentfield = currentfield - 1;
}
else {
currentfield = currentfield + 1;
}
headandend();
}
break;
case 3:
if (n == 0) {
collide(pod);
return;
}
if (n == 2) {
if (Global.roaddir[currentfield]) {
currentfield = currentfield + 1;
}
else {
currentfield = currentfield - 1;
}
headandend();
}
if (n == 4) {
if (Global.roaddir[currentfield]) {
currentfield = currentfield - 1;
}
else {
currentfield = currentfield + 1;
}
headandend();
}
if (n == 6) {
collide(pod);
return;
}
break;
case 4:
if (n == 0) {
collide(pod);
return;
}
if (n == 2) {
collide(pod);
return;
}
if (n == 4) {
if (Global.roaddir[currentfield]) {
currentfield = currentfield + 1;
}
else {
currentfield = currentfield - 1;
}
headandend();
}
if (n == 6) {
if (Global.roaddir[currentfield]) {
currentfield = currentfield - 1;
}
else {
currentfield = currentfield + 1;
}
headandend();
}
break;
case 5:
if (n == 0) {
if (Global.roaddir[currentfield]) {
currentfield = currentfield - 1;
}
else {
currentfield = currentfield + 1;
}
headandend();
}
if (n == 2) {
if (Global.roaddir[currentfield]) {
currentfield = currentfield + 1;
}
else {
currentfield = currentfield - 1;
}
headandend();
}
if (n == 4) {
collide(pod);
return;
}
if (n == 6) {
collide(pod);
return;
}
break;
case 6:
if (n == 0) {
if (Global.roaddir[currentfield]) {
currentfield = currentfield + 1;
}
else {
currentfield = currentfield - 1;
}
headandend();
}
if (n == 2) {
collide(pod);
return;
}
if (n == 4) {
collide(pod);
return;
}
if (n == 6) {
if (Global.roaddir[currentfield]) {
currentfield = currentfield - 1;
}
else {
currentfield = currentfield + 1;
}
headandend();
}
break;
default:
break;
}
}
}
PreCarPosition = car;
if (autoturn) {
float pointFx = (car[0] + ( -1f * (float) camSine));
float pointFz = (car[2] + ( -1f * (float) camCosine));
int nextfield = currentfield + 1;
if (nextfield == 54) {
nextfield = 0;
}
float nextMidx = (Global.roadpoints[nextfield][0] +
Global.roadpoints[nextfield][2] +
Global.roadpoints[nextfield][4] +
Global.roadpoints[nextfield][6]) / 4;
float nextMidz = (Global.roadpoints[nextfield][1] +
Global.roadpoints[nextfield][3] +
Global.roadpoints[nextfield][5] +
Global.roadpoints[nextfield][7]) / 4;
float[] car2next = VectorOps.vector(car[0] - pointFx, 0.0f,
car[2] - pointFz);
car2next = VectorOps.normalize(car2next);
float[] next2last = VectorOps.vector(car[0] - nextMidx, 0.0f,
car[2] - nextMidz);
next2last = VectorOps.normalize(next2last);
float dotpod = VectorOps.dotProduct(car2next, next2last);
if (dotpod < 0.99f) {
acspeed += 0.01;
carspeed -= acspeed;
// System.out.println(currentRotY);
int currentRotYangle = (int) (RotY + turnangle);
while ( (currentRotYangle) > 360) {
currentRotYangle = currentRotYangle - 360;
}
while ( (currentRotYangle) < 0) {
currentRotYangle = currentRotYangle + 360;
}
double tempcamSine = Global.sinTab[currentRotYangle];
double tempcamCosine = Global.cosTab[currentRotYangle];
// double nrads = Math.toRadians(RotY + turnangle);
// double tempcamSine = Math.sin(nrads);
// double tempcamCosine = Math.cos(nrads);
float npointFx = (car[0] + ( -1f * (float) tempcamSine));
float npointFz = (car[2] + ( -1f * (float) tempcamCosine));
float[] ncar2next = VectorOps.vector(car[0] - npointFx, 0.0f,
car[2] - npointFz);
ncar2next = VectorOps.normalize(ncar2next);
float ndotpod = VectorOps.dotProduct(ncar2next, next2last);
if (ndotpod < dotpod) {
RotY -= turnangle;
pod.postRotate( -turnangle, 0.0f, 0.0f, 1.0f);
}
else {
RotY += turnangle;
pod.postRotate(turnangle, 0.0f, 0.0f, 1.0f);
}
}
// System.out.println(dotpod);
}
}
private void headandend() {
if (currentfield < 0) {
currentfield = 53;
}
if (currentfield == 54) {
currentfield = 0;
}
}
private void collide(Group pod) {
carspeed = -carspeed / 1.2f;
pod.setTranslation(PreCarPosition[0],
PreCarPosition[1],
PreCarPosition[2]);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -