如果我错了,请纠正我。我是java的新手,我正在尝试使用lwjgl创建一个简单的物理引擎。目前代码有点凌乱,但它启动并正常工作,物理工作完美。我试图想办法让用户点击鼠标并添加physics_object。目前,它是可能的,但有一个限制,我必须编码所有对象名称。
添加物理对象:
phys_square rec1 = new phys_square(100, 100, 10.0f, -1.0f, 10, 0.0f, 0.5f, 0.0f);
和phys_square类的代码:
package quad;
import org.lwjgl.LWJGLException;
import org.lwjgl.input.Keyboard;
import org.lwjgl.input.Mouse;
import org.lwjgl.opengl.Display;
import org.lwjgl.opengl.DisplayMode;
import org.lwjgl.opengl.GL11;
public class phys_square {
float velocityY;
float velocityX;
int x;
int y;
int particleSize;
float red;
float green;
float blue;
public phys_square(int xpos, int ypos, float velocity_x, float velocity_y, int size, float red, float green, float blue) { this.x = xpos; this.y = ypos; this.velocityY = velocity_y; this.velocityX = velocity_x; this.particleSize = size; this.red = red; this.green = green; this.blue = blue;}
public void updatePos() {
if ( this.y == 0 | this.y < 0) {
this.velocityY *= -0.825f;
}
if (this.y > 0 | this.y >= this.velocityY) {
this.y -= this.velocityY;
this.velocityY += 0.2f;
}
if (this.x <= 0 | this.x + quad_main.particleSize >= 800) {
this.velocityX *= -0.5f;
}
if (this.x > 0 | this.x >= this.velocityX) {
this.x -= this.velocityX;
if (Math.abs(this.velocityX) <= 0){
this.velocityX -= 0.2f;
}
}
if (this.x < 0) {
this.x = 0;
}
if (this.x > 800 + quad_main.particleSize) {
this.x = 800 + quad_main.particleSize;
}
if (this.y < 0){
this.y = 0;
}
}
public void render() {
window.particle(this.x, this.y, this.red, this.green, this.blue, this.particleSize);
}
public static void main(String[] args[]){
}
}
有没有办法创建多个对象而无需手动为它们分配所有名称?我听说过PHP和其他一些语言可以使用字符串的值作为另一种语言的名称。
答案 0 :(得分:2)
注意:此答案假设您根本不需要名称,而不是您希望在运行时创建名称。使用哈希映射。
您可以将对象存储在列表中,例如ArrayList
。这就像一个对象数组,但是可以调整大小,并且让你能够随意添加它们,使用索引访问它们,并迭代它们。
将此与您的导入:
import java.util.ArrayList;
以下代码会创建您的ArrayList
:
ArrayList<phys_square> squaresList = new ArrayList<phys_square>();
您可以像这样向ArrayList
添加一个对象:
squaresList.add(new phys_square( /* paramenters here */));
如果要处理对象,可以遍历列表。以下代码对列表的每个元素执行方法。
for (phys_square sq : squaresList) {
processPhysicsStuff(sq);
processGraphicsStuff(sq);
}
您可以查看Arraylist
here的文档。阅读,这是一个非常有用的课程。