无法在 andEngineGLES2-AC 中为精灵设置 .setAnchorCenter() 和 .setRotationCenter()



我有一个精灵,我想在触摸事件上移动。 应该有箭头指向计划运动的方向。该运动应该在 9 Action_Up 上出演)。问题出在旋转中心和锚中心。它应该像这样工作:当你触摸精灵时,会出现箭头和蓝色圆圈(稍后箭头的数量将取决于手指与显示移动强度的精灵的距离)。第一个箭头附加到精灵,另一个箭头附加到第一个,依此类推。因此,当您移动手指时,第一个箭头底部的中心应该围绕我的精灵中心旋转。(我希望它很清楚,这与Angy Birds的概念相似,你可以移动手指瞄准并设置力量)。问题是我无法设置坐标。例如,为旋转中心或锚点中心设置坐标(50f、50f)会使我的箭头在远离精灵中心的点周围移动。我以为将坐标除以 32 会有所帮助,但没有。即使是像(0.5f,0.5f)这样的坐标也会将我的箭头移动到0.5像素以上。我正在使用和引擎 GLES2-锚中心

@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);

并且没有设置锚中心。

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

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

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

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

实体类

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

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;
    }

如您所见,旋转中心值 (X,Y) 乘以实体的宽度和高度,这就是为什么它们应该介于 0.0-1.0 之间

锚点中心和旋转中心 (x,y) 值介于 0.0f 和 1.0f 之间:

  • 0f 0f 表示实体的左下角顶点
  • 0,5F 0,5f 用于实体中心(锚中心)
  • 1f 1f 用于实体的右上方顶点
  • 等。。。

所以如果你想实现像愤怒的小鸟这样的东西,我会将我的鸟锚中心设置为 1f 0.5f,然后对身体应用一些旋转逻辑。我认为它会起作用。

相关内容

  • 没有找到相关文章

最新更新