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

Canvas-игра. Вылет при сворачивании - Программирование Android

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Программирование Android Как поменять текст внутри вью полученного через layoutinflater? http://www.cyberforum.ru/android-dev/thread1538669.html
Как поменять текст внутри вью полученного через layoutinflater? LayoutInflater inflater = getLayoutInflater(); View element1 = inflater.inflate(R.layout.step_res, scrollView, true); Внутри...
Программирование Android Как получить keystore через AIDE? Такая проблема,создаю приложение для андроид на AIDE и мне нужно получить keystore моего приложения,как это сделать через AIDE и возможно ли это? http://www.cyberforum.ru/android-dev/thread1538659.html
Программирование Android TimerTask/Handler запускаются только 1 раз
Мне нужно, что-бы в сервисе TimerTask или Handler работали постоянно. Но когда я запускаю программу, они срабатывают только 1 раз. Может у меня где-то ошибка? Вот мой код с использованием Handler ...
Программирование Android В классе не Activity доступ к Resources
У меня есть класс Joke, который не является activity. В MainActivity создаю экземпляр класса Joke : Joke joke = new Joke(this); А в коде самого класса Joke хочу достать строки из ресурсов ...
Программирование Android Notifications повтор http://www.cyberforum.ru/android-dev/thread1538607.html
Как сделать периодический повтор уведомлений(частота задается через Shared Preferences)?
Программирование Android AlertDialog Camera SurfaceView заниженная яркость в превью AlertDialog Camera SurfaceView заниженная яркость в превью Перенес работу с камерой в AlertDialog и получил низкую яркость изображения в превью, такое ощущение, что оно затемняется также, как и... подробнее

Показать сообщение отдельно
tronuo
4 / 3 / 0
Регистрация: 06.06.2011
Сообщений: 79

Canvas-игра. Вылет при сворачивании - Программирование Android

26.09.2015, 22:04. Просмотров 296. Ответов 4
Метки (Все метки)

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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
public class GameView extends SurfaceView
{
    private GameThread mThread;
    SurfaceHolder holder;
    Bitmap fon = BitmapFactory.decodeResource(getResources(), R.drawable.fon);
    ArrayList<Integer> lasers = new ArrayList<Integer>();
    ArrayList<Integer> coordYlasers = new ArrayList<Integer>();
    ArrayList<Integer> coordXlasers = new ArrayList<Integer>();
    Bitmap laser = BitmapFactory.decodeResource(getResources(), R.drawable.laser);
    int touchX = 0;
    int touchY = 0;
    int coordX = 0;
    int coordY = 600;
    int _coordX = 0;
    private boolean running = false;
    ArrayList<Bitmap> blocks = new ArrayList<Bitmap>();
    public class GameThread extends Thread
    {
        private GameView view;
 
        public GameThread(GameView view)
        {
            this.view = view;
        }
 
        public void setRunning(boolean run)
        {
            running = run;
        }
 
        public void run()
        {
            int i = 0;
            while (running)
            {
                Canvas canvas = null;
                try
                {
                    canvas = view.getHolder().lockCanvas();
                    synchronized (view.getHolder())
                    {
                        onDraw(canvas);
                    }
                
                }
                catch (Exception e) { }
                finally
                {
                    if (canvas != null)
                    {
                        view.getHolder().unlockCanvasAndPost(canvas);
                    }
                }
            }
        }
    }
 
 
    public GameView(Context context)
    {
        super(context);
 
        mThread = new GameThread(this);
        getHolder().addCallback(new SurfaceHolder.Callback() {
            public void surfaceDestroyed(SurfaceHolder holder) {
                boolean retry = true;
                mThread.setRunning(false);
                while (retry) {
                    try {
                        mThread.join();
                        retry = false;
                    } catch (InterruptedException e) {
                    }
                }
            }
 
            public void surfaceCreated(SurfaceHolder holder) {
                mThread.setRunning(true);
                mThread.start();
 
            }
 
            public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
            }
        });
    }
    public boolean onTouchEvent(MotionEvent event)
    {
        if(event.getAction() == MotionEvent.ACTION_DOWN)
        {
            _coordX = coordX;
            X = (int) event.getX();
            Y = (int) event.getY();
 
        }
        if(event.getAction() == MotionEvent.ACTION_MOVE)
        {
            touchX = ((int) event.getX());
            touchY = (int) event.getY();
            //if (Math.abs(touchX - X) > 10){
            coordX = _coordX + (touchX - X);
            invalidate();
 
            //}
        }
        if(event.getAction() == MotionEvent.ACTION_UP)
        {
            _coordX = coordX;
            Y = touchY;
        }
        return true;
    }
    protected void onDraw(Canvas canvas) {
        Paint paint = new Paint();
        paint.setColor(Color.WHITE);
        paint.setStyle(Paint.Style.FILL);
        paint.setColor(Color.RED);
        paint.setTextSize(20);
 
        canvas.drawColor(Color.WHITE);
        canvas.drawBitmap(fon, 0, 0, null);
        canvas.drawBitmap(player, coordX, coordY, null);
        canvas.drawBitmap(laser, coordLaserX, coordLaserY, null);
        for (int i = 1; i<coordYlasers.size(); ++i){
            canvas.drawBitmap(laser, coordXlasers.get(i), coordYlasers.get(i), null);
        }
        canvas.drawText("" + V, 10, 25, paint);
    }
   
}
Все работает хорошо кроме того, что если я сверну приложение и зайду заново, оно вылетает.
Вот logcat ошибки.
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
5553-5553/com.example.thetronuo.pregame E/AndroidRuntime﹕ FATAL EXCEPTION: main
    java.lang.IllegalThreadStateException: Thread already started.
            at java.lang.Thread.start(Thread.java:1045)
            at com.example.thetronuo.pregame.GameView$1.surfaceCreated(GameView.java:161)
            at android.view.SurfaceView.updateWindow(SurfaceView.java:569)
            at android.view.SurfaceView.onWindowVisibilityChanged(SurfaceView.java:231)
            at android.view.View.dispatchWindowVisibilityChanged(View.java:7618)
            at android.view.ViewGroup.dispatchWindowVisibilityChanged(ViewGroup.java:1039)
            at android.view.ViewGroup.dispatchWindowVisibilityChanged(ViewGroup.java:1039)
            at android.view.ViewGroup.dispatchWindowVisibilityChanged(ViewGroup.java:1039)
            at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1211)
            at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:989)
            at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4356)
            at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749)
            at android.view.Choreographer.doCallbacks(Choreographer.java:562)
            at android.view.Choreographer.doFrame(Choreographer.java:532)
            at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735)
            at android.os.Handler.handleCallback(Handler.java:725)
            at android.os.Handler.dispatchMessage(Handler.java:92)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:5099)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:803)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:570)
            at dalvik.system.NativeStart.main(Native Method)
Как тут можно решить эту проблему? Спасибо заранее.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru