Я довольно новичок в программировании на Java, но имею опыт работы с некоторыми другими языками.Я хочу нарисовать куб в окне JFrame, нашел какой-то код, созданный кем-то в lua, и изо всех сил пытался преобразовать его в java.Это может быть потому, что я либо недостаточно хорош в Java, либо из-за различий между языками.
У меня есть основной скрипт, который устанавливает окно и вызывает скрипт куба:
package Main;
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JPanel;
import javax.swing.JFrame;
public class Main extends JPanel{
public static void main(String[] args) {
int width = 800;
int height = 600;
String title = "Test";
JFrame display = new JFrame();
display.setTitle(title);
display.setSize(width, height);
display.setVisible(true);
display.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
display.setContentPane(new Main());
}
public Main() {
setBackground(Color.black);
}
public void paintComponent(Graphics g) {
Cube cube = new Cube();
cube.paint(); // not sure how to call cube correctly!
}
}
Однако я не думаю, что он правильно вызвал скрипт куба!
Затем я создал скрипт куба, который настраивает куб, однако естьрядом с цитатами найдено несколько ошибок.
package Main;
import java.awt.Color;
import java.awt.Graphics;
import java.util.*;
public class Cube {
public int focalLength = 300;
int[] Make3dPoint(int x, int y, int z) {
int[] point = new int[3];
point[0]=x;
point[1]=y;
point[2]=z;
return point;
}
int[] Make2dPoint(int x, int y) {
int[] point = new int[2];
point[0]=x+240;
point[1]=y+131;
return point;
}
List Trans3dTo2d(ArrayList points[], ArrayList axisRotations[]) { // both arrays aren't being used!
List TransformedPoints = new ArrayList();
int sx = Math.sin(axisRotations.x); // Not finding x or y or z in any of these??
int cx = Math.coz(axisRotations.x);
int sy = Math.sin(axisRotations.y);
int cy = Math.coz(axisRotations.y);
int sz = Math.sin(axisRotations.z);
int cz = Math.coz(axisRotations.z);
int x;int y;int z;
int xy = x*y;int xz = x*z;int yx = y*x;int yz = y*z;int zx = z*x;int zy = z*y; // coupling the variables! not sure if this is correct
int i = points.length;
while(i>0) {
x = points[i].x; // again can't find x, y or z??
y = points[i].y;
z = points[i].z;
xy = cx*y - sx*z;
xz = sx*y + cx*z;
yz = cy*xz - sy*x;
yx = sy*xz + cy*x;
zx = cz*yx - sz*xy;
zy = sz*yx + cz*xy;
int scaleRatio = focalLength/(focalLength + yz);
x = zx*scaleRatio;
y = zy*scaleRatio;
TransformedPoints = new Make2dPoint(x,y); // not set up correctly??
i=i-1;
}
return TransformedPoints;
}
List pointsArray;{ // making points in 3d space! wanted ";" but not sure if correct
Make3dPoint(-50, -50, -50);
Make3dPoint(50, -50, -50);
Make3dPoint(50, -50, 50);
Make3dPoint(-50, -50, 50);
Make3dPoint(-50, 50, -50);
Make3dPoint(50, 50, -50);
Make3dPoint(50, 50, 50);
Make3dPoint(-50, 50, 50);
}
float UserX = (float) -0.01;
float UserY = (float) 0.01;
List cubeAxisRotation = make3dPoint(0,0,0);
public void paint(Graphics g) {
cubeAxisRotation.x = cubeAxisRotation.x + UserX; // again not recognising x or y value
cubeAxisRotation.y = cubeAxisRotation.y + UserY;
List sp = new Trans3dTo2d(pointsArray, cubeAxisRotation); // doesn't like this!
g.setColor(Color.green);
g.drawLine(sp[1].x, sp[1].y, sp[2].x, sp[2].y); // not recognising this in all lines!
g.drawLine(sp[2].x, sp[2].y, sp[3].x, sp[3].y);
g.drawLine(sp[3].x, sp[3].y, sp[4].x, sp[4].y);
g.drawLine(sp[4].x, sp[4].y, sp[1].x, sp[1].y);
g.setColor(Color.red);
g.drawLine(sp[5].x, sp[5].y, sp[6].x, sp[6].y);
g.drawLine(sp[6].x, sp[6].y, sp[7].x, sp[7].y);
g.drawLine(sp[7].x, sp[7].y, sp[8].x, sp[8].y);
g.drawLine(sp[8].x, sp[8].y, sp[5].x, sp[5].y);
g.setColor(Color.white);
g.drawLine(sp[1].x, sp[1].y, sp[5].x, sp[5].y);
g.drawLine(sp[2].x, sp[2].y, sp[6].x, sp[6].y);
g.setColor(Color.blue);
g.drawLine(sp[3].x, sp[3].y, sp[7].x, sp[7].y);
g.drawLine(sp[4].x, sp[4].y, sp[8].x, sp[8].y);
}
}
Я даже не знаю, будет ли работать метод рисования.Это произошло по ссылке, приведенной ниже.Я не копировал и не вставлял, так как распечатал и не смог найти его до сих пор, и на это ушло несколько часов.Это может дать лучшее представление о том, как это работает, и если кто-то захочет его использовать.
https://gist.github.com/Ipad41001/1335691
Я в основном застрял в работе с массивами и вызовом методов, простых вещей, но в то же время это трудно.
Спасибо за любую помощь!
:)