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

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

Войти
Регистрация
Восстановить пароль
 
Nirfik
0 / 0 / 0
Регистрация: 12.01.2015
Сообщений: 7
#1

Ошибка при нажатии - Android

18.03.2015, 18:40. Просмотров 309. Ответов 1
Метки нет (Все метки)

делаю приложение по урокам http://dajver.blogspot.com/2012/01/a...ouchevent.html

GameView.java
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
public class GameView extends SurfaceView{
    private GameManager LoopThread;
    private List<Sprite> sprites = new ArrayList<Sprite>();
    long lastClick = System.currentTimeMillis();
 
 
    public GameView(Context context) {
        super(context);
        LoopThread = new GameManager(this);
        getHolder().addCallback(new SurfaceHolder.Callback() {
            @Override
            public void surfaceCreated(SurfaceHolder holder) {
                //sprite = new Sprite(GameView.this,bmp);
                sprites.add(createSprite(R.drawable.men1));
                sprites.add(createSprite(R.drawable.women1));
                sprites.add(createSprite(R.drawable.men1));
                sprites.add(createSprite(R.drawable.women1));
                LoopThread.setRunning(true);
                LoopThread.start();
            }
 
            @Override
            public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
 
            }
 
            @Override
            public void surfaceDestroyed(SurfaceHolder holder) {
                boolean retry = true;
                LoopThread.setRunning(false);
                while(retry) {
                    try {
                        LoopThread.join();
                        retry = false;
                    } catch (InterruptedException e) {
                    }
                }
            }
        });
    }
 
    private Sprite createSprite(int resouce) {
        Bitmap bmp = BitmapFactory.decodeResource(getResources(), resouce);
        return new Sprite(this,bmp);
    }
 
    protected void onDraw(Canvas canvas){
       canvas.drawColor(Color.BLACK);
        for(Sprite sprite : sprites){
            sprite.onDraw(canvas);
        }
    }
 
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if(System.currentTimeMillis() - lastClick > 300){
            lastClick = System.currentTimeMillis();
            synchronized (getHolder()){
                for(int i = sprites.size() - 1; i >= 0; i++){
                    Sprite sprite = sprites.get(i);
                    if(sprite.isCollition(event.getX(),event.getY())){
                        sprites.remove(sprite);
                        break;
                    }
                }
            }
        }
 
        return true;
    }
 
 
}
Sprite.java
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
public class Sprite {
    private GameView gameView;
    private Bitmap bmp;
    private int x = 5;
    private int y = 5;
    private int xSpeed = 5;
    private int ySpeed = 5;
    private int currentFrame = 0;
    private int width;
    private int height;
    public static final int BMP_ROWS = 4;
    public static final int BMP_COLUMNS = 3;
 
    public Sprite(GameView gameView, Bitmap bmp){
        this.gameView = gameView;
        this.bmp = bmp;
        this.width = bmp.getWidth() / BMP_COLUMNS;
        this.height = bmp.getHeight() / BMP_ROWS;
 
        Random rnd = new Random();
        xSpeed = rnd.nextInt(10) - 5;
        ySpeed = rnd.nextInt(10) - 5;
        x = rnd.nextInt(gameView.getWidth() - width);
        y = rnd.nextInt(gameView.getHeight() - height);
    }
 
    private void update(){
        if(x > gameView.getWidth() - width - xSpeed || x+xSpeed < 0){
            xSpeed = -xSpeed;
        }
        x += xSpeed;
        if(y > gameView.getHeight() - height - ySpeed || y + ySpeed < 0){
            ySpeed = -ySpeed;
        }
        y += ySpeed;
        currentFrame = ++currentFrame % BMP_COLUMNS;
    }
 
    // animation = 3 up, 1 left, 0 down, 2 right
    int[] DIRECTION_TO_ANIMATION_MAP = { 3, 1, 0, 2 };
    private int getAnimationRow() {
        double dirDouble = (Math.atan2(xSpeed, ySpeed) / (Math.PI / 2) + 2);
        int direction = (int) Math.round(dirDouble) % BMP_ROWS;
        return DIRECTION_TO_ANIMATION_MAP[direction];
    }
 
    public void onDraw(Canvas canvas){
        update();
        int srcX = currentFrame * width;
        int srcY = getAnimationRow() * height;
        Rect src = new Rect(srcX, srcY, srcX + width, srcY + height);
        Rect dst = new Rect(x, y, x + width, y + height);
        canvas.drawBitmap(bmp, src, dst, null);
    }
 
    public boolean isCollition(float x2,float y2){
        return x2 > x && x2 < x + width && y2 > y && y2 < y + height;
    }
}
GameManager.java
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
public class GameManager extends Thread {
    private GameView view;
    private boolean running = false;
    public GameManager(GameView view){
        this.view = view;
    }
    public void setRunning(boolean run){
        running = run;
    }
    public void run(){
        long trickSP = 1000/10;
        long startTime;
        long sleepTime;
 
        while(running){
            Canvas c = null;
            startTime = System.currentTimeMillis();
            try{
                c = view.getHolder().lockCanvas();
                synchronized (view.getHolder()){
                    view.onDraw(c);
                }
            } finally {
                if(c != null){
                    view.getHolder().unlockCanvasAndPost(c);
                }
            }
            sleepTime = trickSP - (System.currentTimeMillis() - startTime);
            try{
                if(sleepTime > 0)
                    sleep(sleepTime);
                else
                    sleep(10);
            }catch (Exception e){}
        }
    }
}
Все хорошо только при нажатии несколько раз вылетает с ошибкой, если не нажить то все норм ошибка только при закрытии.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.03.2015, 18:40     Ошибка при нажатии
Посмотрите здесь:

Android Действие при нажатии на ссылку
Exception при нажатии любых кнопок Android
Дизайн кнопки при наведении, нажатии Android
Разворачивание приложения при нажатии на уведомление Android
Вылет при нажатии кнопки Android
Ошибка при нажатии кнопки button Android
Android Ошибка при нажатии на кнопку
Android Studio при нажатии на btn Android
Считывание чисел при нажатии на кнопки Android
Вылетает приложение при нажатии на кнопку Android
Android "В приложении произошла ошибка" при нажатии на кнопку перехода на какую-либо активность
Android При нажатии на кнопку выходит ошибка "Attempting to invoke method on a null object reference"

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
YuraAAA
1565 / 1307 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
19.03.2015, 10:57     Ошибка при нажатии #2
Nirfik, а какая ошибка?
Yandex
Объявления
19.03.2015, 10:57     Ошибка при нажатии
Ответ Создать тему
Опции темы

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