{[RESOLVIDO], [Android]} Como criar Joystick Virtual

3 respostas
landantas

Salve galerinha!

Bem… Estou desenvolvendo um apk android para o controle do PC pelo celular(mouse e teclado)…

A poucos dias baixei um jogo no meu aparelho que tem um Joystick Virtual na tela…(tipo os analogicos como do PS2)…

Além do meu app nao ter nada a ver com jogos(por enquanto)… Eu quero saber se alguem tem algum tutorial de como criar estes “Botões Analogicos Virtuais”…

Fico no aguardo…

Grato pela atenção:!:

Fiquem com DEUS:!:

Edit:

A itenção é que seja + ou - assim

3 Respostas

Marky.Vasconcelos

Criar uma classe que extende View que no onDraw desenho o Joystick e no onTouchEvent voce le os movimentos do toque.

Estarei criando um desses pro jogo que estou desenvolvendo.

landantas

Cara eu vendo hoje na net Encontrei este

Já nos ajuda neste nosso trabalho arduo :wink:

Fica com DEUS:!:

E Boa Sorte com o seu jogo!

landantas

Galerinha, fiz como o Marky indicou...
Fiz um View na mãozona bruta mesmo e utilizei o metodo onTouch...

Ficou assim:
package lan.controlador;

import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Point;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;

public class Joy extends View {
	Point pontoFinal, pontoMeio = null;
	Paint paint;
	int larg = getWidth();
    int alt = getHeight();

	public Joy(Context context, AttributeSet attrs)
    {
        super(context, attrs);
        
        pontoFinal = new Point(larg/2, alt/2);
        
        iniciarPaint();
        
        setarListener();
    }
	
	public void iniciarPaint(){
		paint = new Paint();
		paint.setStrokeWidth(2); //Seta a "grossura" do Paint
	}
	
	@SuppressLint("DrawAllocation")
	@Override
    protected void onDraw(Canvas canvas)
    {
		if(pontoMeio == null){
			larg = getWidth();
        	alt = getHeight();
        
        	pontoMeio = new Point(larg/2, alt/2);
		}
        
        paint.setColor(Color.GREEN); //Seta a cor do Paint
        
        canvas.drawRect(10, 10, larg-10, alt-10, paint);
        
        paint.setColor(Color.RED); //Seta a cor do Paint
        
        int tam = 15, x = 0, y = 0;
        
        if(pontoFinal.x > 0){
        	if(pontoFinal.x > larg){
        		x = larg;
        	}else{
        		x = pontoFinal.x;
        	}
        }
        
        if(pontoFinal.y > 0){
        	if(pontoFinal.y > larg){
        		y = larg;
        	}else{
        		y = pontoFinal.y;
        	}
        }
        
        canvas.drawRect(x-tam, y-tam, x+tam, y+tam, paint);
        
        super.onDraw(canvas);
    }
	
	public void setarListener(){
		setOnTouchListener(new View.OnTouchListener() {
			
			@Override
			public boolean onTouch(View v, MotionEvent event) {
				if(event.getAction() == MotionEvent.ACTION_DOWN){
		        }
		        
		        if(event.getAction() == MotionEvent.ACTION_MOVE){
		        	pontoFinal.set((int) event.getX(), (int) event.getY());
		        	
		        	invalidate();
		        	
		        	System.err.println("X: "+getxAxis()+" Y: "+getyAxis());
		        }
		        
		        if(event.getAction() == MotionEvent.ACTION_UP){
		        	pontoFinal.set(pontoMeio.x, pontoMeio.y);
		        	invalidate();
		        }
				return true;
			}
		});
	}
	
	public int getxAxis(){
		int ret = 0;
		
		if(pontoFinal.x > 0 && pontoFinal.x < larg){
			ret = pontoFinal.x - pontoMeio.x;
		}
		
		if(pontoFinal.x > larg){
			ret = larg/2;
		}
		
		if(pontoFinal.x < 0){
			ret = 0-(larg/2);
		}
		
		return ret;
	}
	
	public int getyAxis(){
		int ret = 0;
		
		if(pontoFinal.y > 0 && pontoFinal.y < alt){
			ret = pontoFinal.y - pontoMeio.y;
		}
		
		if(pontoFinal.y > alt){
			ret = alt/2;
		}
		
		if(pontoFinal.y < 0){
			ret = 0-(alt/2);
		}
		
		return ret;
	}
}

Espero que possa ajudar a alguém aii...

Ah! Os getxAxis e getyAxis pegam a posição do "joy"...
Depois implementarei-o para alterar a sensibilidade :D

Fiquem com DEUS:!:

Criado 21 de agosto de 2012
Ultima resposta 22 de ago. de 2012
Respostas 3
Participantes 2