Evento de ponteiro TouchScreen

galera, queria simular o efeito de segurar uma tecla do teclado em TouchScreen

Acontece o seguinte: to fazendo um joguinho e quero que enquanto a pessoa segure o botão virtual na tela o personagem se comporte da mesma maneira do que se estivesse segurando o botão no teclado.(A merda é que o meu celular n tem teclas, é só touchscreen :/).

eu uso do teclado com keyState & DOWN_PRESSED, por exemplo,
e no botão touchScreen eu uso pointer pressed, pointer released e pointer dragged.

O que acontece de errado: Se eu clico o mouse no botão ele anda certo. Se eu configuro pra fazer quando eu solto, tb funciona. Mas aí eu tenho que ficar clicando feito um demente, pq cada clique dispara o evento. Devo estar errando e besteira… me ajudem se puderem

métodos de interesse:

protected void pointerPressed(int x, int y){
     if (botaoDireita.isTouched(x, y))
            return;

        if (botaoEsquerda.isTouched(x, y))
            return;

     if (botaoCima.isTouched(x, y))
            return;

     if (botaoBaixo.isTouched(x, y))
            return;

         if (botaoParar.isTouched(x, y))
            return;

    }



//
//
//public void onButttomTouch(Sprite sprite){
//if(sprite == spriteHyo){
//                  missoes[2]=true;
//                  if(missoes[4]==true){
//                          this.falaHyo.setFrameSequence(gameDesign.Hyofl03);
//                            this.falaBuddy.setFrameSequence(gameDesign.Buddyfl01);
//                  }else if(missoes[2]==true){
//
//                       this.falaHyo.setFrameSequence(gameDesign.Hyofl02);
//
//}
//
//}
//}
   public void onButtomTouch(ImageButtom buttom) {
     while (!this.interrupted) {
       if (buttom == botaoDireita) {
//            //Cria o alerta de mensagem
//            Alert alert = new Alert("Tocado no botão.");
//            //Mostra a mensagem na tela
//            Display.getDisplay(GameMidlet.a).setCurrent(alert, this);
            //tratamento para botão direito
                if (this.lastDirection != RIGHT) {
                    this.lastDirection = RIGHT;
                    if(missoes[1]==false){
                    this.spriteSte.setFrameSequence(gameDesign.SteDireita);
                    }
                    if (missoes[1] == true) {
                   this.spriteSte.setFrameSequence(gameDesign.SteDireitaG);

                    }
                   continue;
                }

                this.spriteSteAnimator.forward();
                this.spriteSte.move(SPEED, 0);
                if (this.spriteSteCollides(this.spriteSte)) {
                    this.spriteSte.move(-SPEED, 0);
                //this.spriteHyo.setFrameSequence(gameDesign.HyoEsquerda);
                   continue;
                }
                this.adjustViewport(this.viewPortX + SPEED, this.viewPortY);
       
       } else if (buttom == botaoEsquerda) {

            if (this.lastDirection != LEFT) {
                    this.lastDirection = LEFT;
                   //coloca para a esqueda

                    if(missoes[1]==false){
                       this.spriteSte.setFrameSequence(gameDesign.SteEsquerda);}
                    if(missoes[1]==true){
                   this.spriteSte.setFrameSequence(gameDesign.SteEsquerdaG);
                   }
                 continue;
                }
                //roda o filminho de andar a esquerda
                this.spriteSteAnimator.forward();
                //move efetivamente(desloca) o boneco para a esquerda
                this.spriteSte.move(-SPEED, 0);
                //se ele bater em alguma coisa, faz ele voltar para onde estava(antes de ir pra esquerda)
                if (this.spriteSteCollides(this.spriteSte)) {
                    this.spriteSte.move(SPEED, 0);
                  continue;
                }

                //ajusta a visão do usuário para manter o bonequinho na tela
                this.adjustViewport(this.viewPortX - SPEED, this.viewPortY);
        }else if(buttom == botaoCima){
           if (this.lastDirection != UP) {
                    this.lastDirection = UP;
                     if(missoes[1]==false){
                    this.spriteSte.setFrameSequence(gameDesign.SteCostas);
                  //  this.spriteHyo.setFrameSequence(gameDesign.HyoEsquerda);
                     }
                    if (missoes[1] == true) {
                   this.spriteSte.setFrameSequence(gameDesign.SteCostasG);
                   }

                    continue;
                }
                this.spriteSteAnimator.forward();
                this.spriteSte.move(0, -SPEED);
                if (this.spriteSteCollides(this.spriteSte)) {
                    this.spriteSte.move(0, SPEED);
                  continue;
                }}
 else if (buttom == botaoBaixo){
  //tratamento para baixo
                if (this.lastDirection != DOWN) {
                    this.lastDirection = DOWN;
                  //  this.spriteSte.setFrameSequence(gameDesign.SteFrente);
                     if(missoes[1]==false){
                    this.spriteSte.setFrameSequence(gameDesign.SteFrente);
                    }
                    if(missoes[1]==true){
                   this.spriteSte.setFrameSequence(gameDesign.SteFrenteG);
                   }
                    continue;
                    
           }
                this.spriteSteAnimator.forward();
                this.spriteSte.move(0, SPEED);
                if (this.spriteSteCollides(this.spriteSte)) {
                    this.spriteSte.move(0, -SPEED);
                    continue;
                }
                this.adjustViewport(this.viewPortX, this.viewPortY + SPEED);
 }
 else if(buttom == botaoParar){
   this.spriteSteAnimator.setMoving(false);

 
   }
       try{Thread.sleep(50);}catch(Exception e){}
            }
    //this.spriteSteAnimator.setMoving(false);
            
   }

Implementa uma thread que incremente os valores x e y de sua tela. E nos metodos pointerPressed e pointerReleased vc starta e para essa thread de acordo com a ação do usuario. Espero ter ajudado!

Desculpe a ignorância, mas como ficaria isso? Eu não programo faz mais de um ano, estou meio enferrujado ( então vc imagina o quanto me custou pra chegar nesse código aí :p).

Obrigado pela força, estou tentaando por aqui :slight_smile: