Иллюстрированный самоучитель по программированию мобильных телефонов

Столкновение объектов

В листинге 8.4 содержатся три класса MainGame, MyGameCanvas и My Sprite. Основной код обработки столкновений бомб и мяча находится в классе MyGameCanvas – этому классу мы и уделим особое внимание при разборе – листинга.

В конструкторе класса MyGameCanvas происходит загрузка изображения мяча из файла ресурса bol.png, инициализация объекта bol, класса MySprite и устанавливается позиция прорисовки на экране объекта bol.

ImagebolImage = Image.createlmage("/bol.png");
bol= new KySprioe(bollmage, 23, 23);
bol.setPosition(getWidth()/2,getHeight()/2);

Заметьте, что позиция вывода мяча на экран установлена в центре экрана, но эта позиция определена для левой верхней точки мяча, поэтому именно левый верхний угол изображения спрайта мяча будет находиться в центре экрана. Для того чтобы нарисовать сам спрайт в центре экрана, нужно переопределить опорную позицию мяча с помощью метода defineReferencePixel ().

Затем в конструкторе класса MyGameCanvas загружается изображение бомбы.

Image bombalmage=Image.createlmage("/bomba.png");

После этого происходит инициализация четырех объектов bomba1, bomba2, bomba3 и bomba4 класса MySprite и устанавливается позиция для вывода всех четырех бомб на экран телефона.

bomba1 = new MySprite(bombalmage, 23, 23);
bomba1.setPosition(10.10);
bomba2 = new MySprite(bombalmage, 23, 23);
bomba2.setPosition(getwidth()-30, 10);
bomba3 = new MySprite(bombalmage, 23, 23);
bonba3.setPosition(10, getHeight()-40);
bomba4 = new MySprite(bombalmage, 23, 23);.
bomba4.setPosition(getWidth()-30, getHeight()-40);

Все четыре бомбы рисуются в разных углах экрана слева направо и сверху вниз.

Произведя загрузку необходимых изображений и инициализируя все объекты класса MySprite, можно добавить их к уровню с помощью менеджера уровней.

lm.append(bo1);
lm.append(bomba1);
lm.append(bomba2);
lm.append(bomba3);
lm .append (bomba4);

Наша задача в этом примере – это определение столкновения бомб и мячика, для этого создан метод stolknovenie (), где при помощи конструкции if/else происходит обработка столкновения объектов bol и bombalbomba4. Сейчас было бы очень хорошо, если бы вы могли запустить программу из листинга 8.4 и попробовали осуществить столкновение мяча с четырьмя бомбами. Как мы договорились, при столкновении будет обсуждаться работа четырех разных методов.

В столкновении с первой бомбой, находящейся в левом верхнем углу экрана, используется метод next Frame (). Если вы переместите мячик по экрану, то при наезде на первую бомбу произойдет взрыв бомбы и мяча. То есть начнется перебор всех имеющихся фреймов обоих объектов в цикличном порядке. Как только вы уберете мячик с бомбы, взрыв обоих объектов прекратится, потому что закончится перебор фреймов изображений. А состояние бомбы и мяча будет соответствовать одному из фреймов всей анимационной последовательности, при этом возможности повлиять на остановку – перехода по фреймам в методе nextFrame () нет.

Вторая бомба, находящаяся в правом верхнем углу экрана, при обработке столкновения использует практически идентичный предыдущему Метод prevFrame (), отличающийся лишь тем, что переход по всем существующим фреймам бомбы и мяча происходит в обратном порядке. Остановить работу метода на нужном фрейме также невозможно.

Третья бомба рисуется в нижнем углу экрана и для обработки столкновения мяча с бомбой используется метод setFrame (). Этот метод производит переход по заданным фреймам всей анимационной последовательности по номеру или индексу фрейма. В этом примере используется следующий код при столкновении мяча и третьей бомбы.

bol, setFrame (2);
bomba3.setFrame(0);

Когда вы передвинете мячик на третью бомбу, то увидите, что изображение мячика изменится, и будет соответствовать третьему фрейму всей анимационной последовательности мячика. Состояние бомбы останется неизменным, потому что используется индекс 0, а это первый фрейм бомбы.

Четвертая бомба при столкновении задействует метод setFrameSequenсе (), благодаря которому можно использовать фреймовые последовательности в виде массива индексов.

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

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.