Java 如何获得每个项目的起点?Libgdx简单游戏

Java 如何获得每个项目的起点?Libgdx简单游戏,java,android,c++,arrays,libgdx,Java,Android,C++,Arrays,Libgdx,我想得到子弹的起始点,但我不能确定它是最终的,子弹.x和子弹.y总是在变化,所以我不知道如何保存每个子弹的起始坐标。它在一个随机的地方繁殖,然后移动。我已经尝试过在bullet.x和bullet.y开始时将其保存为一个变量,但当bullet移动时也会发生变化 这是我的密码:- public class MyGame extends ApplicationAdapter { SpriteBatch batch; Texture ballImage, bulletImage; Orthographi

我想得到子弹的起始点,但我不能确定它是最终的,子弹.x和子弹.y总是在变化,所以我不知道如何保存每个子弹的起始坐标。它在一个随机的地方繁殖,然后移动。我已经尝试过在bullet.x和bullet.y开始时将其保存为一个变量,但当bullet移动时也会发生变化

这是我的密码:-

public class MyGame extends ApplicationAdapter {
SpriteBatch batch;
Texture ballImage, bulletImage;
OrthographicCamera cam;
Circle ball, bullet;
Array <Circle> bullets;
//long lastShot;

@Override
public void create ()
{
    System.out.println("game created");
    ballImage = new Texture(Gdx.files.internal("ball.png"));
    bulletImage = new Texture(Gdx.files.internal("bullet.png"));

    cam = new OrthographicCamera();
    cam.setToOrtho(true,320,480);//true starts top left false starts bottom left

    batch = new SpriteBatch();  

    ball = new Circle();
    ball.radius=20;
    ball.x=320/2-ball.radius; // half screen size - half image
    ball.y=480/2-ball.radius;

    bullets = new Array<Circle>();
    spawnBullet();

}

public void spawnBullet()
{
    Circle bullet = new Circle();
    bullet.radius=8;
    bullet.x=bullet.radius; // half screen size - half image
    bullet.y=MathUtils.random(0, 480-bullet.radius);
    bullets.add(bullet);
    System.out.println("x: "+bullet.x+" Y: "+bullet.y);

}

@Override
public void render ()
{
    Gdx.gl.glClearColor(0, 0, 0, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
    cam.update();
    batch.setProjectionMatrix(cam.combined);
    batch.begin();
    batch.draw(ballImage,ball.x-ball.radius,ball.y-ball.radius);
    for(Circle bullet: bullets)
    {
        batch.draw(bulletImage, bullet.x-bullet.radius, bullet.y-bullet.radius);
    }
    batch.end(); 

    if(Gdx.input.isTouched())
    {           
        Vector3 pos = new Vector3();
        pos.set(Gdx.input.getX(), Gdx.input.getY(),0);
        cam.unproject(pos); 
        ball.y = pos.y ;    
    }


    if(ball.y<0+ball.radius)ball.y=ball.radius;
    if(ball.y>480-ball.radius)ball.y=480-ball.radius;

    Iterator<Circle> i = bullets.iterator();    

     while(i.hasNext())
    {

        Circle bullet = i.next();   
        //System.out.println("x2: "+bullet.x+" Y2: "+bullet.y);


        if(bullet.y>240){
        bullet.x++;
        bullet.y--;}

        bullet.x++;

        //right border collision
        if(bullet.x>320)
        {
            i.remove();
            spawnBullet();
        }
         //circle collision
            if(ball.overlaps(bullet))
            {
            i.remove();
            spawnBullet();
            }   
    } 
}   
  }
公共类MyGame扩展应用程序适配器{
喷雾批;
纹理球图像,子弹图像;
正交摄像机;
圆球、子弹;
阵列子弹;
//远射;
@凌驾
公共void创建()
{
System.out.println(“游戏创建”);
ballImage=新纹理(Gdx.files.internal(“ball.png”);
bulletImage=新纹理(Gdx.files.internal(“bullet.png”);
cam=新的正交摄影机();
cam.setToOrtho(true,320480);//true从左上角开始false从左下角开始
批次=新的SpriteBatch();
ball=新圆();
球半径=20;
ball.x=320/2-ball.radius;//半屏幕大小-半图像
球y=480/2球半径;
项目符号=新数组();
子弹();
}
公共项目符号()
{
圆圈项目符号=新圆圈();
子弹半径=8;
bullet.x=bullet.radius;//半屏幕大小-半图像
bullet.y=MathUtils.random(0480 bullet.radius);
项目符号。添加(项目符号);
System.out.println(“x:+bullet.x+“Y:+bullet.Y”);
}
@凌驾
公共无效渲染()
{
glClearColor(0,0,0,1);
Gdx.gl.glClear(GL20.gl\u颜色\u缓冲\u位);
cam.update();
batch.setProjectionMatrix(cam.combined);
batch.begin();
批处理绘制(ballImage,ball.x-ball.radius,ball.y-ball.radius);
用于(圆形项目符号:项目符号)
{
批量绘制(bulletImage、bullet.x-bullet.radius、bullet.y-bullet.radius);
}
batch.end();
if(Gdx.input.isTouched())
{           
Vector3位置=新Vector3();
pos.set(Gdx.input.getX(),Gdx.input.getY(),0);
凸轮未投影(pos);
ball.y=位置y;
}
如果(ball.y480 ball.radius)ball.y=480-ball.radius;
迭代器i=bullets.Iterator();
while(i.hasNext())
{
圆圈项目符号=i.下一步();
//System.out.println(“x2:+bullet.x+”Y2:+bullet.y);
如果(项目符号y>240){
bullet.x++;
bullet.y--;}
bullet.x++;
//右边界碰撞
如果(bullet.x>320)
{
i、 删除();
子弹();
}
//圆碰撞
if(球重叠(项目符号))
{
i、 删除();
子弹();
}   
} 
}   
}

我的libgdx有点生锈了。也就是说,这看起来是一个相当常见的设计问题。从本质上说,MyGame类尝试做的太多,这意味着解决其中的问题很困难

现在,您正试图使用一个圆作为项目符号,这意味着您只能获得circle类提供的内容。您希望存储额外的信息并将行为添加到循环中,因此您应该创建一些东西来实现这一点。我建议创建一个Bullet类,如下所示:

public class Bullet {
    private Circle circle;
    private int startX;
    private int startY;

    public Bullet(int startX, int startY){
        circle = //create circle from startX and startY
        this.startX = startX;
        this.startY = startY;
    }
    //getters and setters here...
}
您也可以选择让项目符号延伸圆,但若您决定,那个么将项目符号更改为矩形会稍微困难一些


然后您可以存储其他信息。它还允许您将一些行为转移到该类中,而不是在MyGame类中执行所有操作。这总是好的,因为它使代码更容易理解。

我的libgdx有些生疏。也就是说,这看起来是一个相当常见的设计问题。从本质上说,MyGame类尝试做的太多,这意味着解决其中的问题很困难

现在,您正试图使用一个圆作为项目符号,这意味着您只能获得circle类提供的内容。您希望存储额外的信息并将行为添加到循环中,因此您应该创建一些东西来实现这一点。我建议创建一个Bullet类,如下所示:

public class Bullet {
    private Circle circle;
    private int startX;
    private int startY;

    public Bullet(int startX, int startY){
        circle = //create circle from startX and startY
        this.startX = startX;
        this.startY = startY;
    }
    //getters and setters here...
}
您也可以选择让项目符号延伸圆,但若您决定,那个么将项目符号更改为矩形会稍微困难一些


然后您可以存储其他信息。它还允许您将一些行为转移到该类中,而不是在MyGame类中执行所有操作。这总是好的,因为它使代码更容易理解。

我的libgdx有些生疏。也就是说,这看起来是一个相当常见的设计问题。从本质上说,MyGame类尝试做的太多,这意味着解决其中的问题很困难

现在,您正试图使用一个圆作为项目符号,这意味着您只能获得circle类提供的内容。您希望存储额外的信息并将行为添加到循环中,因此您应该创建一些东西来实现这一点。我建议创建一个Bullet类,如下所示:

public class Bullet {
    private Circle circle;
    private int startX;
    private int startY;

    public Bullet(int startX, int startY){
        circle = //create circle from startX and startY
        this.startX = startX;
        this.startY = startY;
    }
    //getters and setters here...
}
您也可以选择让项目符号延伸圆,但若您决定,那个么将项目符号更改为矩形会稍微困难一些


然后您可以存储其他信息。它还允许您将一些行为转移到该类中,而不是在MyGame类中执行所有操作。这总是好的,因为它使代码更容易理解。

我的libgdx有些生疏。也就是说,这看起来是一个相当常见的设计问题。从本质上说,MyGame类尝试做的太多,这意味着解决其中的问题很困难

现在,您正试图使用一个圆作为项目符号,这意味着您只能获得circle类提供的内容。您希望存储额外的信息并将行为添加到循环中,因此您应该创建一些东西来实现这一点。我建议创建一个Bullet类,如下所示:

public class Bullet {
    private Circle circle;
    private int startX;
    private int startY;

    public Bullet(int startX, int startY){
        circle = //create circle from startX and startY
        this.startX = startX;
        this.startY = startY;
    }
    //getters and setters here...
}
您也可以让Bullet扩展圆,尽管这样会使更改