Pull to refresh

Comments 30

UFO just landed and posted this here
Я его использовал, но он чего-то пожевал код.
А так у вас текст пожеван
UFO just landed and posted this here
Исправил, спасибо пользователю Spice
1) Почему бы «Canvas canvas = null» не вынести в переменные класса GameThread, а не создавать ее при каждой итерации цикла, тем самым создавая лишнюю работу для GC?
2) Зачем такие методы, как setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) и два последующих помещать в яву, когда для этих целей есть Manifest.xml?

Это самое первое что бросается в глаза. Если ваша статья была написана для новичков, то может не стоит учить новичков кодить неправильно? Как написали выше, из вставок кода понять что-то очень сложно.

Вообще, мне кажется, что учиться писать игры стоит начиная с использования готовых движков, типа AndEngine, а уже когда поймешь что к чему, тогда и начинать писать все с нуля.

В случае с Canvas, вообще создается впечатление, что вы хотели написать:

Canvas canvas = view.getHolder().lockCanvas();

но эклипс вас обломал, указав на необработанное исключение, вы нажали «исправить», и оставили то чо получилось в результате.
1) Из тех уроков по которым учился я, делалось именно так, по этому я и написал так. Исправлюсь.
2) Вы не первый кто делает мне замечание по этому вопросу, но ни один человек мне толком не смог объяснить почему нельзя именно так? Почему именно в манифесте?

Учиться писать игры наоборот как по мне нужно учиться писать с нуля, для понимания работы игр. А если начинать писать сразу на готовых движках то они будут делать все за Вас, и тут уже весь функционал не понять.
2. В принципе так писать можно, но зачем, когда можно в манифесте описать и будет правильнее. В манифесте указываешь активити и его параметры, а в классе уже само содержимое отображаешь.
Плюс сразу еще до открытия активити приложение знает, как оно будет отображаться, а так только после запуска. Теоретически на скорость запуска влиять будет, хотя и незаметно.
В случае смены ориентации активити пересоздается заново. В вашем случае, если перед запуском игры устройство у пользователя было в портретной ориентации, то и активити начнет создаваться в портрете. Но, обнаружив в процессе создания ваш код, андроид пересоздаст активити уже в альбомном виде. Указание в манифесте позволяет сразу задать нужную ориентацию.

Вот здесь описана проблема, к которой может привести метод setRequestedOrientation() в onCreate().
Еще одна статья из серии «Я сам ничего в этом не понимаю, поэтому решил объяснить другим»
очевидно, что следующее условие всегда истинно и j.remove никогда не вызывается:
if(b.x >= 1000 || b.x <= 1000) {
  b.onDraw(canvas);
} else {
  j.remove();
}
как и в этом куске тоже:
        	  Enemy e = i.next();
        	  if(e.x >= 1000 || e.x <= 1000) {
        		  e.onDraw(canvas);
        	  } else {
        		  i.remove();
        	  }
Рекомендую для ознакомления статью, как надо делать игровые циклы — deWiTTERS game loop.
Вы в своей реализации упустили этот важный компонент.
С запятыми в статье тоже беда!
Такая игра как на маркете вряд ли выйдет. Вообще думаю мало-чего хорошего выйдет при использовании канваса. А так как разработка под OpenGL на Android дело не простое, то лучшим вариантом будет использование готовых игровых движков.
Я начал учить JBox2D, ждите цикл статей)
Простите а в чем особенная сложность OpenGL под Андроидом от iOS или Мака или Винды?
К сожалению сказать насколько сложнее/легче OpenGL под Android не могу так как знаю о разработке под OpenGL очень мало. Зато знаком с игровым движком AndEngine и точно могу сказать что он достаточно легок для изучения и его возможности достаточны для такого рода игр.
Т.е. я хотел сказать что если вы только вникаете в разработку игр, то лучше всего использовать игровой движок. Ну а если вы программируете под OpenGL, то вы вероятно это уже прошли и все знаете.
Зачем размещать продолжение статьи на странной копии хабра? Скрытая реклама или маленькая месть?
Чес слово не заметил, я когда писал эту статью я залил её в песочницу и ждал пока пропустят, думал что не пропустят и залил на свободнохабр. А тут такая радость — пропустили :)
Тогда, я считаю, следует переносить продолжение сюда)
Если я начну переносить все продолжения меня забанят)))
О, призраки-ниндзя. На третьем видео.
Как-то мне не понравилось как работает 2д графика без OpenGL на андроиде. Думается мне, создавать игры надо с использованеим какого-нибудь гл движка, типа AndEngine и т.п. Все хочу попробовать, да руки не доходят:)
guns — что это за переменная? она не объявлена, но используется.
и позицию игрока сделали по центу gameView.getHeight() / 2; а позицию пули у = 120. При разных разрешениях экрана положение по у будет не верное, лучше задать gameView.getHeight() / 2 — 20;
Sign up to leave a comment.

Articles