На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Hsilgos
  
> [Android] пишем игру , Нужно указать где ошибки.
    С целью освоить Android начинаю писать игру, кторую я написал на MobileBasic 5 лет назад.
    user posted image
    Надо ловить яблоки, падающие сверху.
    Когда я запускаю приложение на данном этапе, есть две проблемы.
    View.getWidth(); вероятно, возвращает null
    ExpandedWrap disabled
          private void initApple() {
              apple.x = rnd.nextInt(400); //работает
              apple.x = rnd.nextInt(sw); //не работает
              apple.y = 0;
          }



    где sw

    ExpandedWrap disabled
          public GameView(Context context, AttributeSet attrs) {
              super(context, attrs);
                  //...
                  sw = this.getWidth();
                  //...
              initApple();
          }


    И второе, если делать invalidate() с целью сделать цикл падения яблока - приложение Not Responding.

    ExpandedWrap disabled
          private void startGame() {
              setContentView(R.layout.game);
              GameView gv = (GameView)findViewById(R.id.gameView);
              while (true) {
                  gv.invalidate();
                  try { Thread.sleep(100); } catch (InterruptedException ie) {}
              }
          }


    для перерисовки и инкрементации координаты.
    ExpandedWrap disabled
          @Override
          protected void onDraw(Canvas canvas) {
              canvas.drawBitmap(apple.b, apple.x, apple.y, null);
              apple.y ++;
              if (apple.y > sh) initApple();
          }
      View.getWidth() - вы ее в конструкторе вызываете, в этот момент размер вьюхи не известен и функция вернет 0.
      GameView - чей наследник? Для игры лучше использовать SurfaceView и отдельный поток отрисовки.
        Mario Zechner - Beginning Android Games поможет

        getWidth обычно вызывается в OnCreate методе
          Цитата mrco @
          View.getWidth() - вы ее в конструкторе вызываете, в этот момент размер вьюхи не известен и функция вернет 0.
          GameView - чей наследник? Для игры лучше использовать SurfaceView и отдельный поток отрисовки.


          ExpandedWrap disabled
            public final class GameView extends View


          Отдельный поток отрисовк я так понял не это имееться в виду.
          ViewRootCalledFromWrongThreadException

          ExpandedWrap disabled
                private void startGame() {
                    new Thread() {
                        public void run() {
                            setContentView(R.layout.game);
                            GameView gv = (GameView)findViewById(R.id.gameView);
                            while (true) {
                                gv.invalidate();
                                try { Thread.sleep(100); } catch (InterruptedException ie) {}
                            }
                        }
                    }.start();
                }



          И так понял не это, так как висит да и вообще подозрительный подход

          ExpandedWrap disabled
                @Override
                protected void onDraw(final Canvas canvas) {
                    new Thread() { public void run() {
                    canvas.drawBitmap(apple.b, apple.x, apple.y, null);
                    apple.y ++;
                    if (apple.y > sh) initApple(); }}.start();
                }


          Да и так будет ViewRootCalledFromWrongThreadException

          ExpandedWrap disabled
            public class GameView extends View implements Runnable {
             
                     ....
             
                public void run() {
                    while (true) {
                        invalidate();
                        try { Thread.sleep(100); } catch (InterruptedException ie) {}
                    }
                }


          Цитата Хрен @
          Mario Zechner - Beginning Android Games поможет

          Спс, посмотрю.
          Сообщение отредактировано: Doctor Drive -
          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
          0 пользователей:


          Рейтинг@Mail.ru
          [ Script execution time: 0,0256 ]   [ 15 queries used ]   [ Generated: 25.06.24, 03:34 GMT ]