繁体   English   中英

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

[英]how to use a sprite as an anchor point of another 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();
}

编辑2

太空飞船

如您在图片中所看到的,我希望当我旋转飞船的精灵时,红点(这是另一个精灵)保留在航天器的尖端。 因此,您可以使用两个精灵的原点计算向量。

我希望已经清楚了。 不能在libgdx中合并两个精灵吗?

编辑3

红点不跟随飞船

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

如果您的两个子画面具有相同的宽度,则可以使用以下方法:

这是psudo code 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);

我现在无法测试,但是您有个想法。

我不知道这是不是您的意思,所以请注释并删除:

Ps:points *是一个Vector2:

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向量是两个向量的中心。

如果那是您想要的,并问自己,如何旋转? 精灵可以帮助您。

LibGDX-围绕其中心旋转2D精灵阵列

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM