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

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

Наш опрос
Какой у Вас Андроид
Всего ответов: 192

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


Теги
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., пишем, экран
  
Просмотров: 1210 | Рейтинг: 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
Ранг:

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


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

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

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

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




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


    Flag Counter



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