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

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

Войти
Регистрация
Восстановить пароль
 
TonyBicbaev
3 / 3 / 0
Регистрация: 04.11.2013
Сообщений: 124
#1

Создание врагов - Android

27.06.2016, 09:15. Просмотров 147. Ответов 3
Метки нет (Все метки)

Привет есть вот такой класс, работаю в андроид студио, пытаюсь создать большое количество врагов.
Но отрисовывает только одного в методе onDraw, как бы при удаление добавляю нового и так он будет один до бесконечности бегать.
В общем поставил логи, в методо run() вообще не заходит, по сути этот метод добавляет новых врагов.
Может с потоками как то не так намутил подскажите мб что


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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
public class GameView extends SurfaceView implements Runnable {
    /**
     * Объект класса GameLoopThread
     */
    private GameThread mThread;
    private List<Enemy> enemy = new ArrayList<Enemy>();
    Bitmap enemies;
    private Thread thred = new Thread(this);
    
 
 
    // How long should each frame last
 
    /**
     * Переменная запускающая поток рисования
     */
    private boolean running = false;
    private boolean go = false;
 
 
    //-------------Start of GameThread--------------------------------------------------\\
 
    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() {
            while (running) {
                Canvas canvas = null;
                try {
                    // подготовка Canvas-а
                    canvas = view.getHolder().lockCanvas();
                    synchronized (view.getHolder()) {
                        // собственно рисование
                        //   view.onDraw(canvas);
 
 
                        onDraw(canvas);
 
                    }
                } catch (Exception e) {
                    Log.e("c", "c =");
                } finally {
                    if (canvas != null) {
                        view.getHolder().unlockCanvasAndPost(canvas);
                    }
                }
            }
        }
    
    }
 
    //-------------End of GameThread--------------------------------------------------\\
 
 
    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) {
                        Log.e("b", "b =");
                    }
                }
            }
 
            /** Создание области рисования */
            public void surfaceCreated(SurfaceHolder holder) {
                mThread.setRunning(true);
                mThread.start();
 
 
 
            }
 
            /** Изменение области рисования */
            public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
 
            }
        });
        enemies = BitmapFactory.decodeResource(getResources(), R.drawable.cat);
        enemies = Bitmap.createScaledBitmap(enemies, 200 * 6, 110, false);
        enemy.add(new Enemy(this, enemies));
 
 
    }
 
 
    /**
     * Функция рисующая все спрайты и фон
     */
    protected void onDraw(Canvas canvas) {
        canvas.drawColor(Color.WHITE);
 
        Iterator<Enemy> i = enemy.iterator();
        Random rnd = new Random();
        while (i.hasNext()) {
 
            Enemy e =  i.next();
            if (e.x >= 200) {
 
              e.onDraw(canvas);
 
            } else {
                i.remove();
                enemy.add(new Enemy(this, enemies)); 
 
            }
 
        }
 
    }
 
 
 
 
    @Override
    public void run() {
        Log.e("a", "a =");
        while (true) {
            Random rnd = new Random();
            try {
                Log.e("a1", "1a =");
                Thread.sleep(rnd.nextInt(2000));
                
                enemy.add(new Enemy(this, enemies));
            } catch (InterruptedException e) {
                Log.e("2a", "a2 =");
                e.printStackTrace();
            }
        }
    }
 
}
класс Enemy на всякий
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
 /**Х и У коорданаты*/
    public int x;
    public int y;
    private int currentFrame = 0;
    private int frameCount = 6;
    private long lastFrameChangeTime = 0;
    Paint paint;
    private Rect frameToDraw = new Rect(
            0,
           0,
            200,
            110);
    RectF whereToDraw = new RectF(
            10, 0,
            10 + 200,
            110);
    private int frameLengthInMilliseconds = 100;
    /**Скорость*/
    public int speed;
 
    /**Выосота и ширина спрайта*/
    public int width;
    public int height;
 
    public GameView gameView;
    public Bitmap bmp;
    public Bitmap bmp1;
    Matrix flipper = new Matrix();
 
    /**Конструктор класса*/
    public Enemy(GameView gameView, Bitmap bmp){
        this.gameView = gameView;
        this.bmp = bmp;
 
        Random rnd = new Random();
        this.x = 900;
        this.y = rnd.nextInt(300);
        this.speed = 8;
        paint = new Paint();
        this.width = 9;
        this.height = 8;
        flipper.preScale(-1, 1);
    }
 
    public void update(){
 
        x -= speed;
 
 
 
        whereToDraw.set((int)x,
                (int) y,
                (int)x + 200,
                (int) y + 110);
 
        getCurrentFrame();
    }
 
    public void onDraw(Canvas c){
        update();
 
        c.drawBitmap(bmp,frameToDraw,whereToDraw, paint);
 
       // c.drawBitmap(bmp, x, y, null);
    }
    public  int getX()
    {
        return x;
    }
    public void setgetX(int x)
    {
        this.x = x;
    }
    public void getCurrentFrame() {
 
        long time = System.currentTimeMillis();
     
        if (time > lastFrameChangeTime + frameLengthInMilliseconds) {
            lastFrameChangeTime = time;
            currentFrame++;
            if (currentFrame >= frameCount) {
 
                currentFrame = 0;
            }
        }
       
        //update the left and right values of the source of
        //the next frame on the spritesheet
        frameToDraw.left = currentFrame * 200;
        frameToDraw.right = frameToDraw.left + 200;
 
 
    }
 
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Паблито
2063 / 1805 / 562
Регистрация: 12.05.2014
Сообщений: 6,430
Завершенные тесты: 1
27.06.2016, 11:01     Создание врагов #2
много кода
petruchodd
27.06.2016, 11:27
  #3

Не по теме:

это с хабры походу код. Видел там такое же создание

TonyBicbaev
3 / 3 / 0
Регистрация: 04.11.2013
Сообщений: 124
27.06.2016, 15:39  [ТС]     Создание врагов #4
ну кое что от туда брал, но у него багов там не мало было
Yandex
Объявления
27.06.2016, 15:39     Создание врагов
Ответ Создать тему
Опции темы

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