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

3 respostas
L

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

M

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.

L

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!

L

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