Модераторы: javastic
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Рисование пазлов, нужен совет 
:(
    Опции темы
kinderproc
Дата 12.5.2012, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 9.9.2009

Репутация: нет
Всего: нет



Здравствуйте. Начал изучать программирование с написания Паззлов - аналога обычных картонных. Нужен совет в каком направлении двигать булки. В данный момент реализовал рисование на канве кругов и их перетаскивание, выглядит это так:

Код

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, может быть с помощью нее можно сделать все проще?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Android | Следующая тема »


 




[ Время генерации скрипта: 0.0756 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.