J2J.RU - cовременная система продвижения сайтов
Меню сайта

Категории раздела

Наш опрос
Меня больше интересуют приложения и игры для:
Всего ответов: 22

Файлы
Новые Популярные Лучшие

Root_explorer_v2
05.10.2011
Virus
Inferno Galaxy
04.11.2012
Virus
Stair_Dismount_v.2.0.4.apk
17.10.2011
Virus
ADW_Launcher_EX_ru
05.10.2011
Virus
Chainfire3D_v.2.0
05.10.2011
Virus
Universalandroot_1.6.2
06.10.2011
Virus
z4root.1.3.0
05.10.2011
Virus

Теги
android (34)
uCoz (8)
Mobile (3)
sistem (3)
xml (3)
google (2)
html (2)
Oboi (2)
Opera (2)
Rest (2)
Soap (2)
Action (1)
ajax (1)
App2SD (1)
apps (1)
css (1)
Ddms (1)
editor (1)
gmail (1)
gobook (1)
JAVA (1)
legend (1)
Lite (1)
Live (1)
MP3 (1)
mrtm (1)
Muse (1)
Ninja (1)
pdf (1)
PHP (1)
root (1)
sensor (1)
Shazam (1)
sql (1)
thread (1)
touch (1)
ui (1)
Widget (1)
Worms (1)
Xplore (1)
Zirco (1)

RSS
  
Новостная лента.

Форумная лента.

Файловая лента.  

Главная » Статьи » Программинг » Программирование [ Добавить статью ]

Пишем игру для Android. Часть 2\2 - Вывод рисунка на экран и его перемещение

Самостоятельное перемещение робота   (начало)

Давайте теперь придадим нашему роботу самостоятельности и заставим его путешествовать по экрану без вмешательства пользователя. Робот не должен выходить за пределы экрана. Если он дошел до края - он должен изменить направление своего движения. Если наш объект движется самостоятельно - у него должна иметься какая-то скорость. Величина этой скорости влияет на изменение координат. Для понятия "скорость" мы реализуем собственный класс Speed. 

Создайте класс Speed.java

package ru.mobilab.gamesample;
 
public class Speed {
 
 private float xv = 1; // составляющая скорости по оси X
 private float yv = 1; // составляющая скорости по оси Y
 
 public Speed() {
 this.xv = 1;
 this.yv = 1;
 }
 
 public Speed(float xv, float yv) {
 this.xv = xv;
 this.yv = yv;
 }
 
 public float getXv() {
 return xv;
 }
 public void setXv(float xv) {
 this.xv = xv;
 }
 public float getYv() {
 return yv;
 }
 public void setYv(float yv) {
 this.yv = yv;
 }
 
 // изменяем направление по оси X
 public void toggleXDirection() {
 xv = -xv;
 }
 
 // изменяем направление по оси Y
 public void toggleYDirection() {
 yv=-yv;
 }
}

Робот имеет горизонтальную и вертикальную составляющую скорости. На каждом шаге цикла к текущей координате робота будим прибавлять соответствующую скорость (на самом деле в физическом смысле правильнее было бы прибавлять величину скорости, умноженную на время прошедшее с прошлой операции перемещения объекта, но мы в целях упрощения не будем так сильно заморачиваться). В конструкторе переменным vx и vy мы присвоили значение 1, то есть на каждом шаге игрового цикла робот будет смещаться на 1 пиксел. Если vx > 0 - робот движется вправо, если vx<0 - влево. Аналогично vy>0-вниз, vy<0 - вверх. В методах toggleXDirection() и toggleYDirection(), которые задают разворот направления движения по соответствующему направлению, мы просто умножаем vx или vy на -1.

Изменять координаты робота нужно на каждом шаге игрового цикла. Откройте файл MainThread.java и добавьте в метод run() строку

this.gamePanel.update();

метод примет вид

 public void run() {
 Canvas canvas;
 Log.d(TAG, "Starting game loop");
 while (running) {
 canvas = null;
 // пытаемся заблокировать canvas 
 // для изменение картинки на поверхности
 try {
 canvas = this.surfaceHolder.lockCanvas();
 synchronized (surfaceHolder) {
 // обновляем состояние
 this.gamePanel.update();
 // формируем новый кадр
 this.gamePanel.onDraw(canvas); //Вызываем метод для рисования
 }
 } finally {
 // в случае ошибки, плоскость не перешла в 
 //требуемое состояние
 if (canvas != null) {
 surfaceHolder.unlockCanvasAndPost(canvas);
 }
 } 
 }
 }

Создадим соответствующий метод MainGamePanel. Внутри метода update() мы будем менять состояние всех игровых объектов. Пока у нас только один объект - робот, но скоро их станет больше. Внутри этого метода мы должны проверить, не столкнулся ли робот со стеной. Если столкнулся – надо поменять направление движения. При вычислении столкновений нужно помнить, что координата робота соответствует центру рисунка, поэтому чтобы получить координату правого края мы должны вычесть из координаты x половину ширины рисунка. После проверки на столкновения мы можем прибавить к координатам робота соответствующие приращения скорости, для решения этой задачи напишем метод update в классе Droid. Перейдем к файлу MainGamePanel.java

 public void update() {
 // проверяем столкновение с правой стеной
 if (droid.getX() + droid.getBitmap().getWidth() / 2 >= getWidth()) {
 droid.getSpeed().toggleXDirection();
 }
 // проверяем столкновение с левой стеной
 if ( droid.getX() - droid.getBitmap().getWidth() / 2 <= 0) {
 droid.getSpeed().toggleXDirection();
 }
 // проверяем столкновение с нижней стеной
 if (droid.getY() + droid.getBitmap().getHeight() / 2 >= getHeight()) {
 droid.getSpeed().toggleYDirection();
 }
 // проверяем столкновение с верхней стеной
 if (droid.getY() - droid.getBitmap().getHeight() / 2 <= 0) {
 droid.getSpeed().toggleYDirection();
 }
 // Обновляем координаты робота
 droid.update();
 }

Методы getWidth() и getHeight() возвращают ширину и высоту рисунка. 

Последняя строка метода вызывает метод update объекта droid. Добавим этот метод в класс Droid.

 public void update() {
 if (!touched) {
 x = (int)(x+speed.getXv());
 y = (int)(y+speed.getYv());
 }
 }

Добавим в класс Droid поле

 private Speed speed;

В конструкторе создадим объект speed

 public Droid(Bitmap bitmap, int x, int y) {
 this.bitmap = bitmap;
 this.x = x;
 this.y = y;
 speed=new Speed();
 }

 и добавим метод getSpeed(), возвращающий объект speed.

 public Speed getSpeed() {
 return speed;
}

Все. Можно сохранять проект и пробовать его запустить. Если Вы все сделали правильно, робот будет двигаться по экрану, отскакивая от краев. Кстати, робота по-прежнему можно перетаскивать. 

Категория: Программирование | Добавил: Virus (29.11.2012)

Похожие темы на пост "Пишем игру для Android. Часть 2\2 - Вывод рисунка на экран и его перемещение"

Схожие темы выбранные по тегам : игру, рисунка, вывод, часть, перемещение, Android., пишем, экран
  
Просмотров: 1254 | Рейтинг: 0.0/0

Дорогие пользователи и гости сайта!!! Пожалуйста, если вам не сложно, оставте комментарий или ваше мнение о портале в Гостевой книге. Ваше мнение очень важно для нас и очень поможет в поиске дальнейшего пути развития сайта. С уважением, Администрация сайта AndroBum!



Так же рекомендуем:
Всего комментариев: 0
Информация:
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.

[ Регистрация | Вход ]
Поиск

Мини-чат

Block title
Virus
файлов: 69
Постов: 38
Комментов: 1005
Репутация: 0
Ранг:

droid
файлов: 3
Постов: 0
Комментов: 0
Репутация: 100
Ранг:

Serge
файлов: 1
Постов: 0
Комментов: 0
Репутация: 0
Ранг:

Sergey
файлов: 1
Постов: 0
Комментов: 0
Репутация: 0
Ранг:

Аватар не установлен! Octopus
файлов: 0
Постов: 0
Комментов: 0
Репутация: 3
Ранг:


Друзья сайта
  • Официальный блог
  • скрипты, шаблоны, html, css
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz

  • Статистика Сайта
    Статистика сайта как на сайте

    Пользователей всего: +0
    Материалов всего [?]: +
    Онлайн всего: 1
    Гостей: 1
    Пользователей: 0
    Гости сайта Пользователи

    Яндекс.Метрика




    Пользователи онлайн:


    Flag Counter



    Все материалы размещенные на сайте принадлежат их владельцам.
    Copyright dodomo.do.am © 2010-2012