Comments 30
UFO just landed and posted this here
1) Почему бы «Canvas canvas = null» не вынести в переменные класса GameThread, а не создавать ее при каждой итерации цикла, тем самым создавая лишнюю работу для GC?
2) Зачем такие методы, как setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) и два последующих помещать в яву, когда для этих целей есть Manifest.xml?
Это самое первое что бросается в глаза. Если ваша статья была написана для новичков, то может не стоит учить новичков кодить неправильно? Как написали выше, из вставок кода понять что-то очень сложно.
Вообще, мне кажется, что учиться писать игры стоит начиная с использования готовых движков, типа AndEngine, а уже когда поймешь что к чему, тогда и начинать писать все с нуля.
2) Зачем такие методы, как setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) и два последующих помещать в яву, когда для этих целей есть Manifest.xml?
Это самое первое что бросается в глаза. Если ваша статья была написана для новичков, то может не стоит учить новичков кодить неправильно? Как написали выше, из вставок кода понять что-то очень сложно.
Вообще, мне кажется, что учиться писать игры стоит начиная с использования готовых движков, типа AndEngine, а уже когда поймешь что к чему, тогда и начинать писать все с нуля.
+2
В случае с Canvas, вообще создается впечатление, что вы хотели написать:
Canvas canvas = view.getHolder().lockCanvas();
но эклипс вас обломал, указав на необработанное исключение, вы нажали «исправить», и оставили то чо получилось в результате.
Canvas canvas = view.getHolder().lockCanvas();
но эклипс вас обломал, указав на необработанное исключение, вы нажали «исправить», и оставили то чо получилось в результате.
+2
1) Из тех уроков по которым учился я, делалось именно так, по этому я и написал так. Исправлюсь.
2) Вы не первый кто делает мне замечание по этому вопросу, но ни один человек мне толком не смог объяснить почему нельзя именно так? Почему именно в манифесте?
Учиться писать игры наоборот как по мне нужно учиться писать с нуля, для понимания работы игр. А если начинать писать сразу на готовых движках то они будут делать все за Вас, и тут уже весь функционал не понять.
2) Вы не первый кто делает мне замечание по этому вопросу, но ни один человек мне толком не смог объяснить почему нельзя именно так? Почему именно в манифесте?
Учиться писать игры наоборот как по мне нужно учиться писать с нуля, для понимания работы игр. А если начинать писать сразу на готовых движках то они будут делать все за Вас, и тут уже весь функционал не понять.
+2
2. В принципе так писать можно, но зачем, когда можно в манифесте описать и будет правильнее. В манифесте указываешь активити и его параметры, а в классе уже само содержимое отображаешь.
Плюс сразу еще до открытия активити приложение знает, как оно будет отображаться, а так только после запуска. Теоретически на скорость запуска влиять будет, хотя и незаметно.
Плюс сразу еще до открытия активити приложение знает, как оно будет отображаться, а так только после запуска. Теоретически на скорость запуска влиять будет, хотя и незаметно.
+2
В случае смены ориентации активити пересоздается заново. В вашем случае, если перед запуском игры устройство у пользователя было в портретной ориентации, то и активити начнет создаваться в портрете. Но, обнаружив в процессе создания ваш код, андроид пересоздаст активити уже в альбомном виде. Указание в манифесте позволяет сразу задать нужную ориентацию.
Вот здесь описана проблема, к которой может привести метод setRequestedOrientation() в onCreate().
Вот здесь описана проблема, к которой может привести метод setRequestedOrientation() в onCreate().
+1
Еще одна статья из серии «Я сам ничего в этом не понимаю, поэтому решил объяснить другим»
+22
очевидно, что следующее условие всегда истинно и j.remove никогда не вызывается:
if(b.x >= 1000 || b.x <= 1000) {
b.onDraw(canvas);
} else {
j.remove();
}
+8
Рекомендую для ознакомления статью, как надо делать игровые циклы — deWiTTERS game loop.
Вы в своей реализации упустили этот важный компонент.
Вы в своей реализации упустили этот важный компонент.
+2
Такая игра как на маркете вряд ли выйдет. Вообще думаю мало-чего хорошего выйдет при использовании канваса. А так как разработка под OpenGL на Android дело не простое, то лучшим вариантом будет использование готовых игровых движков.
+1
Я начал учить JBox2D, ждите цикл статей)
0
Простите а в чем особенная сложность OpenGL под Андроидом от iOS или Мака или Винды?
0
К сожалению сказать насколько сложнее/легче OpenGL под Android не могу так как знаю о разработке под OpenGL очень мало. Зато знаком с игровым движком AndEngine и точно могу сказать что он достаточно легок для изучения и его возможности достаточны для такого рода игр.
Т.е. я хотел сказать что если вы только вникаете в разработку игр, то лучше всего использовать игровой движок. Ну а если вы программируете под OpenGL, то вы вероятно это уже прошли и все знаете.
Т.е. я хотел сказать что если вы только вникаете в разработку игр, то лучше всего использовать игровой движок. Ну а если вы программируете под OpenGL, то вы вероятно это уже прошли и все знаете.
+1
Зачем размещать продолжение статьи на странной копии хабра? Скрытая реклама или маленькая месть?
0
О, призраки-ниндзя. На третьем видео.
0
Как-то мне не понравилось как работает 2д графика без OpenGL на андроиде. Думается мне, создавать игры надо с использованеим какого-нибудь гл движка, типа AndEngine и т.п. Все хочу попробовать, да руки не доходят:)
0
guns — что это за переменная? она не объявлена, но используется.
0
и позицию игрока сделали по центу gameView.getHeight() / 2; а позицию пули у = 120. При разных разрешениях экрана положение по у будет не верное, лучше задать gameView.getHeight() / 2 — 20;
0
Sign up to leave a comment.
Создание простой 2D игры на Android