Хочу поделиться кодом который будет полезен при создании 2D мира, очень интересна будет новичкам (таким же как и Я).
Начнем со стандартного кода программы:
Глобальные переменные которые будем использовать:
Класс где все это происходит:
Движение по нашему 2D миру:
При клике, а затем удерживание мы получаем координаты и вычисляем в какую сторону идет движение пальца, в результате получая WorldX и WorldY
Функция DrawRoad() отвечает за рисование так называемых дорог (в моем случае) в нашем виртуальном мире.
Рисование идет относительно переменных WorldX и WorldY
И сам процесс рисования:
Пожалуйста не судите строго!
Начнем со стандартного кода программы:
@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);
}
Пожалуйста не судите строго!