Здравствуйте. Начал изучать программирование с написания Паззлов - аналога обычных картонных. Нужен совет в каком направлении двигать булки. В данный момент реализовал рисование на канве кругов и их перетаскивание, выглядит это так: Код | public class GameWindow extends Activity{ private GraphicsView myView; private int selDot = -1; private int imgInd; private class GraphicsView extends View{ //Класс, реализущий перетаскиваемую точку private class Dot { float dotX, dotY; Paint dotPaint; } private Dot[] arrDots; private final int dflColor = Color.YELLOW; private int Rad = 20; private float initialX, initialY, offsetX, offsetY; public GraphicsView(Context context) { super(context); //Рисуем пять точек с произвольными координатами Random rnd = new Random(); int i; arrDots = new Dot[5]; for (i=0; i<5; i++){ arrDots[i] = new Dot(); arrDots[i].dotX = rnd.nextInt(400); arrDots[i].dotY = rnd.nextInt(400); arrDots[i].dotPaint = new Paint(); arrDots[i].dotPaint.setColor(dflColor); } //Собственно обработчик перетаскивания точки setOnTouchListener(new OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()){ case MotionEvent.ACTION_DOWN: float posX = event.getX(); float posY = event.getY(); for (int i = 0; i < 5; i++){ if (posX > (arrDots[i].dotX - Rad) && posX < (arrDots[i].dotX + Rad) && posY > (arrDots[i].dotY - Rad) && posY < (arrDots[i].dotY + Rad)){ initialX = arrDots[i].dotX; initialY = arrDots[i].dotY; offsetX = posX; offsetY = posY; arrDots[i].dotPaint.setColor(Color.CYAN); selDot = i; } else arrDots[i].dotPaint.setColor(dflColor); } break; case MotionEvent.ACTION_MOVE: if (selDot >= 0){ arrDots[selDot].dotX = event.getX() + initialX - offsetX; arrDots[selDot].dotY = event.getY() + initialY - offsetY; } break; case MotionEvent.ACTION_UP: for (int i = 0; i < 5; i++) arrDots[i].dotPaint.setColor(dflColor); selDot = -1; break; case MotionEvent.ACTION_CANCEL: break; } return true; } }); } //Перерисовываем точки на канве @Override public void onDraw(Canvas canvas){ for (int i = 0; i < 5; i++) canvas.drawCircle(arrDots[i].dotX, arrDots[i].dotY, Rad, arrDots[i].dotPaint); invalidate(); } } @Override protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); myView = new GraphicsView(this); myView.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); LinearLayout ll = new LinearLayout(this); ll.setOrientation(LinearLayout.VERTICAL); ll.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); ll.addView(myView); setContentView(ll); } }
|
По всему этому имею несколько вопросов, просьба откликнуться действительно разбирающихся людей ))) Интересует даже не столько пример, сколько общий принцип реализации, т.е. в каком направлении копать. 1. Как вырезать из Bitmap-а кусок произвольной формы и реализовать их склеивание при соприкосновении? Я думаю делать это с помощью класса Path, но в гугле ничего конкретного не нашел, может плохо гуглил. 2. Никогда не работал с OpenGL, может быть с помощью нее можно сделать все проще?
|