
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.239.2.192] |
![]() |
|
Сообщ.
#1
,
|
|
|
С целью освоить Android начинаю писать игру, кторую я написал на MobileBasic 5 лет назад.
![]() Надо ловить яблоки, падающие сверху. Когда я запускаю приложение на данном этапе, есть две проблемы. View.getWidth(); вероятно, возвращает null ![]() ![]() private void initApple() { apple.x = rnd.nextInt(400); //работает apple.x = rnd.nextInt(sw); //не работает apple.y = 0; } где sw ![]() ![]() public GameView(Context context, AttributeSet attrs) { super(context, attrs); //... sw = this.getWidth(); //... initApple(); } И второе, если делать invalidate() с целью сделать цикл падения яблока - приложение Not Responding. ![]() ![]() 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) {} } } для перерисовки и инкрементации координаты. ![]() ![]() @Override protected void onDraw(Canvas canvas) { canvas.drawBitmap(apple.b, apple.x, apple.y, null); apple.y ++; if (apple.y > sh) initApple(); } |
Сообщ.
#2
,
|
|
|
View.getWidth() - вы ее в конструкторе вызываете, в этот момент размер вьюхи не известен и функция вернет 0.
GameView - чей наследник? Для игры лучше использовать SurfaceView и отдельный поток отрисовки. |
Сообщ.
#3
,
|
|
|
Mario Zechner - Beginning Android Games поможет
getWidth обычно вызывается в OnCreate методе |
Сообщ.
#4
,
|
|
|
Цитата mrco @ View.getWidth() - вы ее в конструкторе вызываете, в этот момент размер вьюхи не известен и функция вернет 0. GameView - чей наследник? Для игры лучше использовать SurfaceView и отдельный поток отрисовки. ![]() ![]() public final class GameView extends View Отдельный поток отрисовк я так понял не это имееться в виду. ViewRootCalledFromWrongThreadException ![]() ![]() 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(); } И так понял не это, так как висит да и вообще подозрительный подход ![]() ![]() @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 ![]() ![]() 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 поможет Спс, посмотрю. |