Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
kinderproc
0 / 0 / 0
Регистрация: 12.05.2012
Сообщений: 11
#1

Рисование пазлов, нужен совет - Android

12.05.2012, 12:02. Просмотров 1176. Ответов 1
Метки нет (Все метки)

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

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
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, может быть с помощью нее можно сделать все проще?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.05.2012, 12:02     Рисование пазлов, нужен совет
Посмотрите здесь:

Android AsincTask нужен совет!
Нужен совет Android
Android Рисование
Android Рисование
Android Нужен совет с программой с использованием карт
Android Ребят нужен технический совет по созданию приложения для для вывода ошибок с сервера
Получение данных с сайта. Нужен совет Android
Android Нужен совет в поиске неизвестной ошибки
Нужен ваш совет. Игра или программа под Андроид Android
Нужен совет с облачными технологиями Android
Нужен вас совет Android
Android Нужен совет по правильной логике для авторизации пользователя при запуске приложения

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DedBoroda
ComfyMobile
87 / 87 / 6
Регистрация: 04.11.2010
Сообщений: 376
15.05.2012, 00:04     Рисование пазлов, нужен совет #2
Цитата Сообщение от kinderproc Посмотреть сообщение
1. Как вырезать из Bitmap-а кусок произвольной формы и реализовать их склеивание при соприкосновении? Я думаю делать это с помощью класса Path, но в гугле ничего конкретного не нашел, может плохо гуглил.
2. Никогда не работал с OpenGL, может быть с помощью нее можно сделать все проще?
Я бы сделал потомка от View типа PuzzleView, в методе OnDraw которого рисовал бы фигуру нужной мне формы. Передвигать PuzzleView в этом случае как View очень просто.

Вот пример реализации http://megadarja.blogspot.com/2010/0...r-android.html
Yandex
Объявления
15.05.2012, 00:04     Рисование пазлов, нужен совет
Ответ Создать тему
Опции темы

Текущее время: 10:51. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru