首页 文章

我不能在Rajawali中使用MotionEvent

提问于
浏览
0

Rajawali版本或分支rajawali:1.0.186

设备和Android版本ADV Nexus 5X API 19 Android 4.4

摘要

我正试图在MotionEvent(触摸)发生时让相机移动 . 我尝试了https://github.com/Rajawali/Rajawali/issues/428的代码,但它对我不起作用 .

我的代码

public class Renderer extends RajawaliRenderer {

public Context context;
private DirectionalLight directionalLight;
public Renderer(Context context) {
    super(context);
    this.context = context;
    setFrameRate(60);
}

private Object3D object, star;
public void initScene(){

    getCurrentScene().setBackgroundColor(Color.rgb(5,104,255));
    directionalLight = new DirectionalLight(1f, .2f, -1.0f);
    directionalLight.setColor(1.0f, 1.0f, 1.0f);
    directionalLight.setPower(2);
    getCurrentScene().addLight(directionalLight);

    //LoaderOBJ objParser = new LoaderOBJ(this,"Load/1c_obj");
    LoaderOBJ objParser = new LoaderOBJ(mContext.getResources(),mTextureManager, R.raw.primo_obj);
    LoaderOBJ starParser = new LoaderOBJ(mContext.getResources(),mTextureManager,R.raw.star_obj);
    try {
        objParser.parse();
        starParser.parse();
        object = objParser.getParsedObject();
        star = starParser.getParsedObject();
        getCurrentScene().addChild(star);
        getCurrentScene().addChild(object);

    } catch (ParsingException e) {
        e.printStackTrace();
    }


    getCurrentCamera().setLookAt(object.getWorldPosition());
    Log.d("->",getCurrentCamera().getX()+","+getCurrentCamera().getY()+","+getCurrentCamera().getZ());

    getCurrentCamera().setZ(40);
}


@Override
public void onRender(final long elapsedTime, final double deltaTime) {
    super.onRender(elapsedTime, deltaTime);

    Camera cam = getCurrentCamera();
    Vector3 s = cam.getPosition();
    if (touchTurn != 0) {

        if (flagMulti) {
            Double r = Math.sqrt(s.x * s.x + s.z * s.z);
            angle += touchTurn;
            angle %= 360;
            cam.setPosition((float) (r * Math.cos(angle)), s.y, (float) (r * Math.sin(angle)));
            cam.setLookAt(object.getLookAt());
        }
        else{
            s.x+=touchTurn*5;
            cam.setPosition(s);
        }
        touchTurn = 0;
    }

    if (touchTurnUp != 0) {
        if (!flagMulti) {
            s.z += touchTurnUp * 5;
            cam.setPosition(s);
        }
        touchTurnUp = 0;
    }

}



@Override
public void onTouchEvent(MotionEvent me){
    Log.d("touch ","Log touch");
    int pointerCount = me.getPointerCount();
    if(pointerCount == 2)
        flagMulti = true;


    if (me.getAction() == MotionEvent.ACTION_DOWN) {
        xpos = me.getX();
        ypos = me.getY();
    }

    if (me.getAction() == MotionEvent.ACTION_UP) {
        xpos = -1;
        ypos = -1;
        touchTurn = 0;
        touchTurnUp = 0;
    }

    if (me.getAction() == MotionEvent.ACTION_MOVE) {
        float xd = me.getX() - xpos;
        float yd = me.getY() - ypos;

        xpos = me.getX();
        ypos = me.getY();

        touchTurn = xd / -100f;
        touchTurnUp = yd / -100f;

        Log.d("touchTurn ", touchTurn+" - "+touchTurnUp);
    }



    try {
        Thread.sleep(15);
    } catch (Exception e) {
    }

}

public void onOffsetsChanged(float x, float y, float z, float w, int i, int j){

}}

1 回答

  • 0

    你会考虑arcballCamera并定位到你的3D对象 . 然后,您可以旋转3D对象并使用arcballCamera放大/缩小 .

相关问题