Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用一个精灵作为另一个精灵的锚点?_Java_Android_Libgdx_2d_Sprite - Fatal编程技术网

Java 如何使用一个精灵作为另一个精灵的锚点?

Java 如何使用一个精灵作为另一个精灵的锚点?,java,android,libgdx,2d,sprite,Java,Android,Libgdx,2d,Sprite,我想知道,如果可以的话,在libgdx中加入两个精灵 让我解释一下,我有一艘宇宙飞船,我必须在游戏中打开它。。。这是第一个雪碧 我会把另一个精灵放在飞船的顶端,这样当它转动我通过第二个精灵时,我总能知道坐标,从而导出一个向量,以推进我的飞船 我是libgdx的新手,如果有人有任何想法,我将不胜感激 多谢各位 @Override public void render () { sprite.setPosition(Gdx.graphics.getWidth() / 2 - sprite.

我想知道,如果可以的话,在libgdx中加入两个精灵

让我解释一下,我有一艘宇宙飞船,我必须在游戏中打开它。。。这是第一个雪碧

我会把另一个精灵放在飞船的顶端,这样当它转动我通过第二个精灵时,我总能知道坐标,从而导出一个向量,以推进我的飞船

我是libgdx的新手,如果有人有任何想法,我将不胜感激

多谢各位

@Override
public void render () {

    sprite.setPosition(Gdx.graphics.getWidth() / 2 - sprite.getWidth()/2, Gdx.graphics.getHeight() / 2 - sprite.getHeight()/2);
    point.setPosition(sprite.getX() + (sprite.getWidth()/2 - point.getWidth()/2), sprite.getY() + (sprite.getHeight() / 2 + point.getHeight()));

    Gdx.gl.glClearColor(1, 1, 1, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

    if(Gdx.input.isButtonPressed(Input.Buttons.LEFT)){
        //sprite.setPosition(Gdx.input.getX() - sprite.getWidth()/2, Gdx.graphics.getHeight() - Gdx.input.getY() - sprite.getHeight()/2);
        if(Gdx.input.getX() < Gdx.graphics.getWidth() / 2)
        {
            //System.out.println("x: " + Gdx.input.getX() + " - y: " + Gdx.input.getY());
            sprite.setRotation(rotation++);
        }
        else
        {
            System.out.println("x: " + Gdx.input.getX() + " - y: " + Gdx.input.getY());
            sprite.setRotation(rotation--);
            point.setRotation(rotation--);
        }
    }

    batch.begin();
    spacesprite.draw(batch);
    sprite.draw(batch);
    point.draw(batch);
    batch.end();
}
编辑 :我将遵循始终渲染其他精灵的位置,当前未发生,提示?多谢各位

@Override
public void render () {

    sprite.setPosition(Gdx.graphics.getWidth() / 2 - sprite.getWidth()/2, Gdx.graphics.getHeight() / 2 - sprite.getHeight()/2);
    point.setPosition(sprite.getX() + (sprite.getWidth()/2 - point.getWidth()/2), sprite.getY() + (sprite.getHeight() / 2 + point.getHeight()));

    Gdx.gl.glClearColor(1, 1, 1, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

    if(Gdx.input.isButtonPressed(Input.Buttons.LEFT)){
        //sprite.setPosition(Gdx.input.getX() - sprite.getWidth()/2, Gdx.graphics.getHeight() - Gdx.input.getY() - sprite.getHeight()/2);
        if(Gdx.input.getX() < Gdx.graphics.getWidth() / 2)
        {
            //System.out.println("x: " + Gdx.input.getX() + " - y: " + Gdx.input.getY());
            sprite.setRotation(rotation++);
        }
        else
        {
            System.out.println("x: " + Gdx.input.getX() + " - y: " + Gdx.input.getY());
            sprite.setRotation(rotation--);
            point.setRotation(rotation--);
        }
    }

    batch.begin();
    spacesprite.draw(batch);
    sprite.draw(batch);
    point.draw(batch);
    batch.end();
}
@覆盖
公共无效渲染(){
setPosition(Gdx.graphics.getWidth()/2-sprite.getWidth()/2,Gdx.graphics.getHeight()/2-sprite.getHeight()/2);
设置位置(sprite.getX()+(sprite.getWidth()/2-point.getWidth()/2),sprite.getY()+(sprite.getHeight()/2+point.getHeight());
Gdx.gl.glClearColor(1,1,1,1);
Gdx.gl.glClear(GL20.gl\u颜色\u缓冲\u位);
if(Gdx.input.isButtonPressed(input.Buttons.LEFT)){
//设置位置(Gdx.input.getX()-sprite.getWidth()/2,Gdx.graphics.getHeight()-Gdx.input.getY()-sprite.getHeight()/2);
if(Gdx.input.getX()
编辑2

正如你在图片中看到的,我希望当我旋转飞船的精灵时,红点(另一个精灵)留在飞船的顶端。所以你可以用两个精灵的原点计算一个向量

我希望已经说清楚了。 两个精灵的联合在libgdx中是不可能的,还有别的吗

编辑3


图片,我希望当飞船旋转时,红色的球始终保持在飞船的顶端。有可能吗?

如果您的两个精灵具有相同的宽度,则可以使用此选项:

这是psudo代码mor或更低

float pointY = yourSprite.getY() + yourSprite.getHeight();
float pointX = yourSprite.getX(); 

yourOtherSprite. setX(pointX);
yourOtherSprite. setY(pointY);
如果宽度不同

float pointY = yourSprite.getY() + yourSprite.getHeight();
float pointX = yourSprite.getX() + (yourSprite.getWidth() / 2); 

yourOtherSprite. setX(pointX - (thisSprite.getWidth() / 2));
yourOtherSprite. setY(pointY);
我现在不能测试,但你有主意了

新的

我不知道这是否是你的意思,如果不是,请评论并删除:

注:点*是一个矢量2:

pointSpriteA.x = yourSprite.getX() + (yourSprite.getHeight() / 2);
pointSpriteB.x = yourOtherSprite.getY() + (yourOtherSprite.getHeight() / 2);

pointSpriteA.y = yourSprite.getY() + (yourSprite.getWidth() / 2);
pointSpriteB.y = yourOtherSprite.getY() + (yourOtherSprite.getWidth() / 2);

pointC.X = (pointSpriteA.x + pointSpriteB.x) / 2);
pointC.y = (pointSpriteA.Y + pointSpriteB.y) / 2);
pointC向量是两个向量的中心

如果这是你想要的,问问自己,如何旋转?雪碧能帮上忙


我编辑了问题,为了更好地理解我需要什么,务必始终遵循渲染。所以你可以从两个精灵的中心计算一个向量。谢谢。也许我解释得不好,用我上传的图片更容易理解我的问题?感谢You@Alex也许这个链接,我说,你可以帮我一个忙,我希望这个红点总是在飞船图像的顶部。隔膜的位置没有问题,是当我点击渲染()时,红色的球没有跟随航天器的尖端,最新的尖端?感谢You@Alex如果我的英语不是很好,但是如果你有支点,你只需要对每个精灵应用旋转,如果我明白你想做什么,我想