AndroidFastRenderView – РОЗРОБКА ІГОР ДЛЯ ОС ANDROID

AndroidFastRenderView: зібрати-розтягнути, зібрати-розтягнути

За назвою даного класу, яке перекладається приблизно як вид для швидкого відображення в Android, ви можете самі здогадатися, що нам належить У попередньому розділі ми обговорювали використання SurfaceView для тривалої візуалізації в окремому потоці, який також може містити основний цикл нашої гри

Ми розробили дуже простий клас FastRenderView, успадкований від SurfaceVi ew Переконалися, що вписуємося в життєвий цикл активності, і налаштували потік, в якому відбувається візуалізація в SurfaceView за допомогою Canvas

Ми знову скористаємося класом FastRenderView і доповнимо його, щоб він міг виконувати ще кілька завдань: зберігати посилання на екземпляр класу Game, щоб мати можливість отримати активний Screen Ми постійно викликаємо методи Screenupdare і Screen presentO з потоку FastRenderView стежити за дельтою часу між кадрами, яка передається активному Screen приймати штучний фреймбуфер, в якому функціонує екземпляр Androi dGraphi cs, і передавати це зображення в Surf aceVi ew, при необхідності масштабуючи його

У лістингу 514 показано, як реалізувати клас AndroidFastRenderView

Лістинг 514 AndroidFastRenderViewJava, потік SurfaceView виконує код нашої гри

Це має бути вам вже знайомо Нам просто потрібно зберігати ще два члени: екземпляр класу Androi dGame і екземпляр класу Bi tmap, які представляють наш штучний фреймбуфер Інші члени аналогічні тим, що використані в FastRenderView

У конструкторі ми просто викликаємо конструктор базового класу з параметром Androi dGame (який успадкований від Activity ми повернемося до цього трохи пізніше) і зберігаємо параметри у відповідних полях Ми також знову отримуємо SurfaceHolder, як ми це вже робили раніше

Метод resume є точною копією методу FastRenderVi ew resume, так що нам не доведеться проходити через все це знову Просто переконався, що потік нормально працює з життєвим циклом активності

Метод run має ще кілька особливостей Він також відстежує дельту часу між кадрами Ми використовуємо для цього функцію SystemnanoTime, що повертає поточний час в наносекундах як довге число

ПРИМІТКА

Наносекунд – це одна мільярдна частка секунди

На кожній ітерації циклу ми починаємо з отримання різниці між часом початку попередньої ітерації і поточним часом Щоб спростити роботу з дельтою часу, переводимо все в секунди Далі зберігаємо поточну тимчасову мітку, яку будемо використовувати на наступній ітерації, щоб підрахувати наступну дельту часу За допомогою даних про дельті часу викличемо методи update і present поточного Screen, які оновлять логіку гри і візуалізують обєкти в штучному фреймбуфер Нарешті, утримуємо Canvas для Surf aceView і малюємо штучний фреймбуфер Масштабування здійснюється автоматично у разі, якщо кінцевий прямокутник, який ми передаємо методу Canvas drawBitmap, менше або більше, ніж фреймбуфер

Зверніть увагу, що тут ми використовували скорочений спосіб отримання кінцевого прямокутника, розтягнутого на весь SufaceView за допомогою методу Canvas getClipBounds Він присвоїть членам top і left, належать до dstRect, значення 0, а членам bottom і right – реальні розміри екрана (наприклад, 480 х 800 в портретній орієнтації в Nexus One) Залишилося частина методу повністю збігається з тим, що ми робили в тесті FastRenderVi ew Вона просто перевіряє, що потік зупиняється, коли активність ставиться на паузу або віддаляється

Останній метод в цьому класі, pauseO, повністю збігається з методом FastRenderViewpause Він просто закінчує візуалізацію основного циклу потоку і очікує, поки цей цикл повністю закінчить роботу

Ми майже закінчили з нашим фреймворком Все, що нам залишилося, – реалізувати інтерфейс Game

Джерело: Mario Zechner / Маріо Цехнер, «Програмування ігор під Android», пров Єгор Сидорович, Євген зазноби, Видавництво «Пітер»

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*