Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Nirfik
0 / 0 / 0
Регистрация: 12.01.2015
Сообщений: 7
#1

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

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

делаю приложение по урокам http://dajver.blogspot.com/2012/01/android-4-ontouchevent.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){}
        }
    }
}
Все хорошо только при нажатии несколько раз вылетает с ошибкой, если не нажить то все норм ошибка только при закрытии.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.03.2015, 18:40
Ответы с готовыми решениями:

Ошибка при запуске AsyncTask при нажатии на пункт ActionBar
Здравствуйте, почему при нажатии на пункт Action Bar'а вылетает ошибка? ...

Ошибка при нажатии на кнопку
package ru.test.gthen; import android.app.*; import android.os.*; import...

Ошибка при нажатии кнопки button
Добрый день, прошу прощения за такой глупый вопрос. Только начал разбираться, и...

"В приложении произошла ошибка" при нажатии на кнопку перехода на какую-либо активность
Нужно было несколько функций в одно приложение соединить..Отдельно каждая из...

При нажатии на кнопку выходит ошибка "Attempting to invoke method on a null object reference"
Доброго дня! Есть вот этот код. При нажатии на кнопку Add выдает Attempting to...

1
YuraAAA
1578 / 1319 / 282
Регистрация: 25.10.2009
Сообщений: 3,436
Записей в блоге: 2
19.03.2015, 10:57 #2
Nirfik, а какая ошибка?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.03.2015, 10:57

ListView: сбивается содержимое ImageView элемента при скроллинге + как сделать выделение пункта списка при нажатии?
1. Есть свой класс ContactsSimpleCursorAdapter, в методе public void...

Как изменить цвет пункта ListView при нажатии на него и сохранять его цвет при проматывании списка?
Здравствуйте, подскажите, пожалуйста, как изменить цвет пункта ListView при...

Действие при нажатии на ссылку
Есть TextView, в тексте содержится ссылка. Как сделать, чтоб при нажатии на...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

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