×
Traktatov.net » Создание игр для мобильных телефонов » Читать онлайн
Страница 213 из 246 Настройки

// спрятать спрайт при необходимости

if (action == BA_HIDE) { //Спрятать спрайт при ударении о границу экрана

if (getX() < 0 || getX() > (canvas.getWidth() – getWidth()) ||

getY() < 0 || getY() > (canvas.getHeight() – getHeight()))

setVisible(false);

}

// переместить спрайт к противоположному краю экрана

else if (action == BA_WRAP) { //При достижении границы экрана спрайтом переместить спрайт к противоположному краю

//Wrap the sprite around the edges of the screen

if (getX() < -getWidth())

setPosition(canvas.getWidth(), getY());

else if (getX() > canvas.getWidth())

setPosition(-getWidth(), getY());

if (getY() < -getHeight())

setPosition(getX(), canvas.getHeight());

else if (getY() > canvas.getHeight())

setPosition(getX(), -getHeight());

}

// изменить направление движения спрайта на противоположное

else if (action == BA_BOUNCE) { //При ударении спрайта о границу экрана изменить направление его скорости на противоположное

// Bounce the sprite at the edges of the screen

if (getX() < 0 || getX() > (canvas.getWidth() – getWidth()))

xSpeed = -xSpeed;

if (getY() < 0 || getY() > (canvas.getHeight() – getHeight()))

ySpeed = -ySpeed;

}

// остановить спрайт

else { //Остановить спрайт по достижении границы экрана

if (getX() < 0)

setPosition(0, getY());

else if (getX() > (canvas.getWidth() – getWidth()))

setPosition(canvas.getWidth() – getWidth(), getY());

if (getY() < 0)

setPosition(getX(), 0);

else if (getY() > (canvas.getHeight() – getHeight()))

setPosition(getX(), canvas.getHeight() – getHeight());

}

}

Метод checkBounds() – это рабочая лошадка класса MovingSprite. Его целью является проверка столкновения спрайта с границей экрана и обработка этого события. Сначала метод проверяет, нужно ли выполнять действие BA_HIDE, которое соответствует сокрытию спрайта. Затем проверяется, необходимо ли выполнить действие, соответствующее константе BA_WRAP, и при столкновении спрайта с границей экрана переместить спрайт к противоположной границе. Константа BA_BOUNCE соответствует отталкиванию спрайта от границы экрана. И наконец, последний блок условия метода checkBounds() просто останавливает спрайт по достижении им границы экрана. В классе MovingSprite есть ряд вспомогательных методов, с которыми вы еще не знакомы. Ниже приведены эти методы, они обеспечивают доступ к значениям переменных скоростей по осям X и Y:

public int getXSpeed() {

return xSpeed;

}

public int getYSpeed() {

return ySpeed;

}

public void setXSpeed(int xMoveSpeed) {

xSpeed = xMoveSpeed;

}

public void setYSpeed(int yMoveSpeed) {

ySpeed = yMoveSpeed;

}

Эти методы позволяют считывать и изменять значения переменных xSpeed и ySpeed. Новый класс MovingSprite готов к работе, поэтому теперь мы можем сосредоточиться на создании кода самой игры Space Out. Давайте начнем с переменных класса.

Объявление переменных класса

Основные переменные игры Space Out расположены в специальном классе холста – SOCanvas. Этот класс отвечает за всю игровую логику. Поскольку SOCanvas достаточно велик, я разбил его на отдельные части, полный код класса доступен на прилагаемом компакт-диске. Ниже перечислены наиболее важные переменные: