2017-02-13 23 views
1

У меня есть два события, которые должны выполняться на одном и том же объекте. Один на ощупь и другое - при отпускании/удалении этого касания. Надеюсь, я смогу сделать это с помощью событий touchup и touchdown с помощью Inputprocessor.Как срабатывают события приземления и касания - LibGdx

Что-то я пробовал.

if (MyInputProcessor.isTouchDown) { 

     stickSprite.setSize(stickSprite.getWidth(), stickSprite.getHeight() + 500.0f); 
     } 

     if (MyInputProcessor.isTouchUp) 
     { 
      if(anglevalue>=0) 
       { 
        anglevalue++; 
       stickSprite.setRotation(70f); 

       } 
     } 

Здесь, если предложение о приземлении не выполняется.

Как эти события действительно работают?

Как я могу эффективно использовать эти события для выполнения моих требований?

+0

Показать свой MyInputProcessor. Кроме того, что s 'angleValue' для? Вы понимаете, что увеличиваете его на один на каждый кадр? – Tenfour04

ответ

1

Похоже, вы хотите увеличить размер изображения по высоте, когда пользователь прикоснется к экрану и увеличится, пока он не вытащит палец с экрана, а затем повернет это изображение на 90 градусов.

Я попробовал это, Надеюсь, что это может быть дать вам некоторые ссылки

public class TestGame extends Game implements InputProcessor{ 

Texture pixelTex; 

SpriteBatch spriteBatch; 
Sprite sprite; 
float w,h; 

TouchStatus touchStatus=TouchStatus.NONE; 

enum TouchStatus { 
    TOUCH_DOWN,TOUCH_UP,NONE 
} 

@Override 
public void create() { 

    w=Gdx.graphics.getWidth(); 
    h=Gdx.graphics.getHeight(); 
    Gdx.input.setInputProcessor(this); 

    spriteBatch=new SpriteBatch(); 
    pixelTex= getPixmapTexture(Color.WHITE); 

    sprite=new Sprite(pixelTex); 
    sprite.setColor(Color.YELLOW); 
    sprite.setSize(10,10); 
    sprite.setPosition(200,200); 
} 

@Override 
public void render() { 
    super.render(); 

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

    spriteBatch.begin(); 
    sprite.draw(spriteBatch); 
    spriteBatch.end(); 

    if(touchStatus==TouchStatus.TOUCH_DOWN){ 

     if(sprite.getY()+sprite.getHeight()<h){ 
      float currentHeight=sprite.getHeight(); 
      currentHeight++; 
      sprite.setSize(sprite.getWidth(),currentHeight); 
     } 
    } 
    if(touchStatus==TouchStatus.TOUCH_UP){ 
     float currentRotation=sprite.getRotation(); 
     currentRotation--; 
     sprite.setRotation(currentRotation); 
     if(currentRotation<=-90) 
      touchStatus=TouchStatus.NONE; 
    } 
} 

@Override 
public void resize(int width, int height) { 
    super.resize(width, height); 
} 

@Override 
public void dispose() { 
    super.dispose(); 
    pixelTex.dispose(); 
    spriteBatch.dispose(); 
} 

@Override 
public boolean keyDown(int keycode) { 

    return false; 
} 

@Override 
public boolean keyUp(int keycode) { 
    return false; 
} 

@Override 
public boolean keyTyped(char character) { 
    return false; 
} 

@Override 
public boolean touchDown(int screenX, int screenY, int pointer, int button) { 

    if(touchStatus==TouchStatus.NONE) 
    touchStatus=TouchStatus.TOUCH_DOWN; 
    return false; 
} 

@Override 
public boolean touchUp(int screenX, int screenY, int pointer, int button) { 
    if(touchStatus==TouchStatus.TOUCH_DOWN) 
    touchStatus=TouchStatus.TOUCH_UP; 
    return false; 
} 

@Override 
public boolean touchDragged(int screenX, int screenY, int pointer) { 
    return false; 
} 

@Override 
public boolean mouseMoved(int screenX, int screenY) { 
    return false; 
} 

@Override 
public boolean scrolled(int amount) { 
    return false; 
    } 

public static Texture getPixmapTexture(Color color){ 
     return new Texture(getPixmapRectangle(1, 1, color)); 
} 

public static Pixmap getPixmapRectangle(int width, int height, Color color){ 
     Pixmap pixmap=new Pixmap(width, height, Pixmap.Format.RGBA8888); 
     pixmap.setColor(color); 
     pixmap.fillRectangle(0,0, pixmap.getWidth(), pixmap.getHeight()); 

     return pixmap; 
    } 
} 
+0

Эй, спасибо! Я запускаю этот код, и он выглядит как то, что я пытаюсь делать в течение нескольких дней. Я пытался разными способами реализовать этот тип логики и получить очень тяжелое время. Надеюсь, используя этот код, я могу реализовать логику, что я хочу! Еще раз спасибо! – Niranjana