Столкновение объектов
В листинге 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се (), благодаря которому можно использовать фреймовые последовательности в виде массива индексов.
Используя эти методы, я думаю, вы вполне сможете создать любую цепочку событий для перемещения, столкновения и других возможных действий объекта В следующей главе будет рассматриваться мультимедийная библиотека, необходимая для создания звукового сопровождения в играх.