2017-02-10 4 views
0

У меня есть простой мир box2d с платформой и камерой, отслеживающей плеер. Я пытаюсь получить сенсорный контроль ввода, когда я касаюсь стороны экрана, но он чувствует себя более сложным, чем я думаю. прикосновение к экрану иногда перемещает ящик, но никогда, когда я нахожусь в месте, которое я ожидаю, и пытаюсь отлаживать, рисуя картинку, на которой я касаюсь, только приводило к большей путанице. вот весь код с камеры или сенсорный прослушиванияlibgdx и box2d, экранные координаты касания nonsensical

метод создания

public void create() { 
    float w = Gdx.graphics.getWidth(); 
    float h = Gdx.graphics.getHeight(); 

    Gdx.input.setInputProcessor(new MyInputProcessor()); 

    camera = new OrthographicCamera(); 
    camera.setToOrtho(false, w/2, h/2); 

    touchpos = new Vector3(); 

    world = new World(new Vector2(0, -9.8f), false); 
    b2dr = new Box2DDebugRenderer(); 
    player = createBox(8, 10, 32, 32, false); 
    platform = createBox(0, 0, 64, 32, true); 
} 

метод визуализации

public void render() { 
    update(Gdx.graphics.getDeltaTime()); 

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

    b2dr.render(world, camera.combined.scl(PPM)); 
} 

размер

public void resize(int width, int height) { 
    camera.setToOrtho(false, width/2, height/2); 
} 

обновление камеры

public void cameraUpdate(float delta){ 
    Vector3 position = camera.position; 
    position.x = player.getPosition().x * PPM; 
    position.y = player.getPosition().y * PPM; 
    camera.position.set(position); 

    camera.update(); 
} 
Метод ввода

касания и математика

@Override 
public boolean touchDown(int screenX, int screenY, int pointer, int button) { 
    touchpos.set(screenX, screenY, 0); 
    camera.unproject(touchpos); 

    if (touchpos.x > 500){ 
     touchleft = true; 
    } 
    else touchleft = false; 

    if (touchpos.x < 300){ 
     touchright = true; 
    } 
    else touchright = false; 

    if (300 < touchpos.x && touchpos.x < 500){ 
     touchcenter = true; 
    } 
    else touchcenter = false; 

    return true; 
} 

Я думаю, что это должно быть так же просто, как использование сырья сенсорного значения без баловаться с камерой, как я хочу область, используемую для контроля, чтобы быть такими же всегда, но что Ждет» т, поэтому я взял в Google и попытался непроектировать и делать другие игры с камерой, но прикосновение никогда не срабатывало.

Я чувствую, что ответ должен быть простым. все что мне нужно, что, когда он обнаруживает прикосновение в левой или правой части экрана для того, чтобы установить соответствующую переменную для истинного

если кто-нибудь с большим опытом может увидеть ошибку я супер ценю

ответ

1

SCL() преобразует значение Matrix4 (camera.combined), поэтому не масштабируйте камеру.

float w = Gdx.graphics.getWidth(); 
float h = Gdx.graphics.getHeight(); 
camera = new OrthographicCamera(30, 30 * (h/w)); 

public void render() { 
    update(Gdx.graphics.getDeltaTime()); 

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

    b2dr.render(world, camera.combined); 
} 

Вы собираетесь работать с физикой поэтому размер движущихся объектов примерно от 0,1 до 10 метров, не больше, а затем 10.

Если вы хотите нарисовать изображения просто масштабировать box2d размер на 30 и получить размерность в пикселях.

И для касания вы устанавливаете видовое окно в соответствии с шириной и высотой устройства и применяете условие к предопределенному значению.

@Override 
public boolean touchDown(int screenX, int screenY, int pointer, int button) { 
    touchpos.set(screenX, screenY, 0); 
    camera.unproject(touchpos); 

    if (touchpos.x > camera.viewportWidth*.8f){ 
     touchleft = true; 
    } 
    else touchleft = false; 

    if (touchpos.x < camera.viewportWidth*.2f){ 
     touchright = true; 
    } 
    else touchright = false; 

    if (camera.viewportWidth*.2f< touchpos.x && touchpos.x < camera.viewportWidth*.8f){ 
     touchcenter = true; 
    } 
    else touchcenter = false; 

    return true; 
} 
Смежные вопросы