Как стать автором
Обновить

Создание 2D мира

Хочу поделиться кодом который будет полезен при создании 2D мира, очень интересна будет новичкам (таким же как и Я).

Начнем со стандартного кода программы:
@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        GraphicsView myview=new GraphicsView(this);
        setContentView(myview);
    }

Глобальные переменные которые будем использовать:
   //Указывает координате место нахождения (т.е себя)
    private float WorldX;
    private float WorldY;

    
    private float tmpX=0;
    private float tmpY=0;


Класс где все это происходит:
public class GraphicsView extends View
    {
	    public GraphicsView(Context context) { super(context); }
	
    //тут весь код
   }


Движение по нашему 2D миру:
//Обработка события(клика по экрану)
public boolean onTouchEvent(MotionEvent event)
{
	    	//Получаем координаты где был сделан клик
	    	float npX = event.getX();
	    	float npY = event.getY();
	    	
                //Вычисляем куда движемся 
	    	if((tmpX!=0)&(tmpY!=0))
	    	{
		    	
		    	if(tmpX<npX)
		    	{
		    		WorldX = WorldX - (tmpX-npX);
		    		invalidate();
		    	}
		    	if(tmpX>npX)
		    	{
		    		WorldX = WorldX + (npX-tmpX);
		    		invalidate();
		    	}
		    	if(tmpY<npY)
		    	{
		    		WorldY = WorldY - (tmpY-npY);
		    		invalidate();
		    	}
		    	if(tmpY>npY)
		    	{
		    		WorldY = WorldY + (npY-tmpY);
		    		invalidate();
		    	}
	    	}
	    	
	    	tmpX=event.getX();
	    	tmpY=event.getY();
	    	
	    	int i = event.getAction();
	    	if(i==MotionEvent.ACTION_UP)
	    		{ tmpX=0; tmpY=0; }
	    		
	    	
	    return true;
}

При клике, а затем удерживание мы получаем координаты и вычисляем в какую сторону идет движение пальца, в результате получая WorldX и WorldY

Функция DrawRoad() отвечает за рисование так называемых дорог (в моем случае) в нашем виртуальном мире.
public void DrawRoad(Canvas canvas, float starX,float startY,float stopX,float stopY)
{
    	   Paint paint1 = new Paint();
           paint1.setStrokeWidth(23);
           paint1.setColor(Color.GRAY);
           canvas.drawLine(starX+WorldX, startY+WorldY, stopX+WorldX, stopY+WorldY, paint1);
          
           Paint paint = new Paint();
           paint.setStrokeWidth(20);           
           paint.setColor(Color.rgb(245, 245, 220));
           canvas.drawLine(starX+WorldX, startY+WorldY, stopX+WorldX, stopY+WorldY, paint);   
}

Рисование идет относительно переменных WorldX и WorldY

И сам процесс рисования:
protected void onDraw(Canvas canvas)
{
          //Наш фон
          canvas.drawColor(Color.WHITE);
          //Рисую фигуры, в моем случае дорогу	   
	  DrawRoad(canvas, 10, 10, 250, 250);
	  DrawRoad(canvas, 249, 250, 400, 350);
	  DrawRoad(canvas, 250, 250, 400, 200);
}


Пожалуйста не судите строго!
Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.