我有一个想在touchevent上移动的精灵。应该以某种箭头指示计划的运动方向。该动作应在Action_Up 9it上起作用)。问题出在旋转中心和锚定中心上。它应该是这样的:触摸精灵时,箭头和蓝色圆圈出现(以后箭头的数量将取决于手指与精灵之间的距离,以显示运动的强度)。第一个箭头连接到精灵,另一个箭头连接到精灵,依此类推。因此,当您移动手指时,第一个箭头底部的中心应围绕我的精灵的中心旋转。 (我希望它很清楚,与Angy Birds类似,您可以用手指对准目标并施加力量)。问题是我无法设置坐标。例如,为旋转中心或锚定中心设置坐标(50f,50f)使我的箭头围绕远离精灵中心的点移动。我认为将坐标除以32会有所帮助,但不会。甚至(0.5f,0.5f)之类的坐标也会使我的箭头移动超过0.5个像素。我正在使用andEngine GLES2-AnchorCenter

@Override
public boolean onAreaTouched(final TouchEvent pSceneTouchEvent, final float pTouchAreaLocalX, final float pTouchAreaLocalY){


    if(pSceneTouchEvent.getAction() == TouchEvent.ACTION_DOWN){

        arrow = new Sprite(0, 0, 110, 70, ResourceManager.getInstance().mArrowregion, getVertexBufferObjectManager());
        arrow2 = new Sprite(55, 70, 110, 70, ResourceManager.getInstance().mArrowregion, getVertexBufferObjectManager());
        arrow3 = new Sprite(55, 70, 110, 70, ResourceManager.getInstance().mArrowregion, getVertexBufferObjectManager());
        arrow4 = new Sprite(55, 70, 110, 70, ResourceManager.getInstance().mArrowregion, getVertexBufferObjectManager());
        circle = new Sprite(50, 50, 300, 300, ResourceManager.getInstance().mBlueCircleRegion, getVertexBufferObjectManager());

        arrow.setAnchorCenter(25.0f/32, -10.0f/32);
        arrow.setRotationCenter(0, 0);

        arrow.setAlpha(0.4f);
        arrow2.setAlpha(0.6f);
        arrow3.setAlpha(0.8f);
        arrow4.setAlpha(1.0f);
        circle.setAlpha(0.3f);

        this.attachChild(circle);
        this.attachChild(arrow);
        arrow.attachChild(arrow2);
        arrow2.attachChild(arrow3);
        arrow3.attachChild(arrow4);



    }

    if(pSceneTouchEvent.getAction() == TouchEvent.ACTION_MOVE){
        arrow.setRotation(0 + pSceneTouchEvent.getX());


    }

    if(pSceneTouchEvent.getAction() == TouchEvent.ACTION_UP){
        arrow.detachSelf();
        circle.detachSelf();
        arrow.dispose();
        circle.dispose();

        body.setLinearVelocity(-((pSceneTouchEvent.getX()/32 - body.getPosition().x) * 10), -((pSceneTouchEvent.getY()/32 - body.getPosition().y) * 10));



    }


    return true;
}


编辑:

什么是有效的当我使用:

arrow = new Sprite(50, 100, ...)
arrow.setRotationCenter(0.5f, -0.25f);


而且没有建立锚中心。

为什么我需要X和Y的值小于1f作为旋转中心?

最佳答案

setRotationCenter通常应在0.0到1.0的范围内,因为它们是对象宽度/高度的比例,例如:setRotationCenter(0.5f, 0.5f)将使对象绕其中心旋转。

GLES2-AC中的setRotationCenter与GLES2中的setRotationCenter不同

欲了解更多信息,我建议您点击此链接:

Entity class

在此链接中,您具有以下功能:

protected void updateLocalRotationCenter() {
        this.updateLocalRotationCenterX();
        this.updateLocalRotationCenterY();
    }

    protected void updateLocalRotationCenterX() {
        this.mLocalRotationCenterX = this.mRotationCenterX * this.mWidth;
    }

    protected void updateLocalRotationCenterY() {
        this.mLocalRotationCenterY = this.mRotationCenterY * this.mHeight;
    }


如您所见,rotationCenter值(X,Y)乘以实体的Width和Height,这就是为什么它们应该在0.0-1.0之间的原因

10-07 23:07