// спрятать спрайт при необходимости
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 достаточно велик, я разбил его на отдельные части, полный код класса доступен на прилагаемом компакт-диске. Ниже перечислены наиболее важные переменные: