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

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

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

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

27.06.2016, 09:15. Просмотров 162. Ответов 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;
 
 
    }
 
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.06.2016, 09:15
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Создание врагов (Программирование Android):

Создать базу данных с(Создание функции БД, Создание процедуры БД, Создание тригера БД) - Программирование Android
В задание для курсовой работы по БД входят вот такие пункты: 1.2 Создание функции БД. 1.3 Создание процедуры БД 1.4 Создание...

Здоровье врагов в массиве - C#
Здравствуйте, название темы нелепое, за это простите пожалуйста. Значит так, пишу я игру, что то вроде tower defence. Есть у меня...

Слон бьет врагов ??? - C++
Приветствую, всех! Кто то скажет опять эти шахматы, сам спекся :wall: когда получил задание. Но дорогие форумчани помогите с задание. Не...

AS 2.0 Подсчет количества пуль и врагов - ActionScript
у меня есть пуля (shot0), каким образом можно реализовать подсчет количества вылетевших пуль в динамическом тексте (qwe.text). работаю в...

2D. Пули от врагов проходят через героя - Unity, Unity3D
Не знаю как исправить, написал много, всё работает как надо, но единственное - это то, что когда стреляет пушка, пуля, летящая из неё...

Игра танки тормозит при появлении 6 и более врагов - C#
как то писал курсач -&quot;танки&quot;. c# знал плохо, ооп вообще не понимал. сейчас стал кое что понимать решил повторить попытку. столкнулся с тем,...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Pablito
2473 / 1918 / 595
Регистрация: 12.05.2014
Сообщений: 6,746
Завершенные тесты: 1
27.06.2016, 11:01 #2
много кода
petruchodd
27.06.2016, 11:27
  #3

Не по теме:

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

TonyBicbaev
3 / 3 / 0
Регистрация: 04.11.2013
Сообщений: 129
27.06.2016, 15:39  [ТС] #4
ну кое что от туда брал, но у него багов там не мало было
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.06.2016, 15:39
Привет! Вот еще темы с ответами:

Server 2003 Хочу освоить и применить на практике создание локальной сети, создание домена - Windows Server
Доброго времени суток. Господа, на днях начал осваиваю win server 2003. Хочу освоить и применить на практике создание локальной сети,...

Создание кода из строк или создание произвольного количества объектов - Java ME
Привет сообществу. Возник такой вопрос: Мне в мидлете необходимо создать некоторое количество StringItem, заранее неизвестное, то бишь...

Создание БД учет заявок на доступ к информационным ресурсам: создание отчетов - MS Access
Доброго времени суток. Это всего вторая моя попытка что-то наваять в MS Access, сильно не пинайте. Задача: сделать БД по учету...

Создание базы данных на лету, создание и заполнение таблиц в базе DB (Paradox? или..). - C#
Здравствуйте Профи! --- Видел я &quot;простенькую&quot; (exe-шник небольшого размера, запускается сразу, без предварительной установки)...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
27.06.2016, 15:39
Ответ Создать тему
Опции темы

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