В сегодняшней статье я расскажу о простых компонентах для написания игр для Android
используя AndEngine. Покажу как добавить sprite и score-текст на экран.
Пожалуй начнем.
Прежде всего нам необходимо заменить Activity на BaseGameActivity и переопределить методы.
После этого наш класс должен выглядеть вот так:
AndEnginePart2Activity.java
Если все получилось, можно продолжать. Теперь непосредственно о загрузке, добавлении компонентов на сцену.
Для начала добавим ещё один класс Monster.java. Функционала в него никакого добавлять не будем, только наследуем его от класса Sprite.
Monster.java
Теперь изменим наш AndEnginePart2Activity.java класс. Выглядеть он будет вот так:
Вот такая структура нашего приложения получилась:
И вот результат наших стараний ( пока что только моих :) ) :
Кому необходимо вот монстр -> Monster
Вот и все. С основами остановимся пока на этом. Удачи в написании игр для Android :)
используя AndEngine. Покажу как добавить sprite и score-текст на экран.
Пожалуй начнем.
Прежде всего нам необходимо заменить Activity на BaseGameActivity и переопределить методы.
После этого наш класс должен выглядеть вот так:
AndEnginePart2Activity.java
package
com.lunevich.andengine;
import
org.anddev.andengine.engine.Engine;
import
org.anddev.andengine.entity.scene.Scene;
import
org.anddev.andengine.ui.activity.BaseGameActivity;
public class
AndEnginePart2Activity
extends
BaseGameActivity {
// В onLoadEngine мы инициализируем движок
@Override
public
Engine onLoadEngine() {
// TODO Auto-generated method stub
return null
; }
// В onLoadResources мы будем загружать ресурсы, // необходимые для нашего приложения, картинки, музыка, и т.д...
@Override
public void
onLoadResources() {
// TODO Auto-generated method stub
}
// В onLoadScene мы создаем сцену
@Override
public
Scene onLoadScene() {
// TODO Auto-generated method stub
return null;
}
@Override
public void
onLoadComplete() {
// TODO Auto-generated method stub
} }
Если все получилось, можно продолжать. Теперь непосредственно о загрузке, добавлении компонентов на сцену.
Для начала добавим ещё один класс Monster.java. Функционала в него никакого добавлять не будем, только наследуем его от класса Sprite.
Monster.java
package
com.lunevich.andengine;
import
org.anddev.andengine.entity.sprite.Sprite;
import
org.anddev.andengine.opengl.texture.region.TextureRegion;
public class
Monster
extends
Sprite {
public
Monster(
float
pX,
float
pY, TextureRegion pTextureRegion) {
super
(pX, pY, pTextureRegion);
// TODO Auto-generated constructor stub
} }
Теперь изменим наш AndEnginePart2Activity.java класс. Выглядеть он будет вот так:
package
com.lunevich.andengine;
import
org.anddev.andengine.engine.Engine;
import
org.anddev.andengine.engine.camera.Camera;
import
org.anddev.andengine.engine.handler.IUpdateHandler;
import
org.anddev.andengine.engine.options.EngineOptions;
import
org.anddev.andengine.engine.options.EngineOptions.ScreenOrientation;
import
org.anddev.andengine.engine.options.resolutionpolicy.RatioResolutionPolicy;
import
org.anddev.andengine.entity.scene.Scene;
import
org.anddev.andengine.entity.scene.background.ColorBackground;
import
org.anddev.andengine.entity.text.ChangeableText;
import
org.anddev.andengine.entity.util.FPSLogger;
import
org.anddev.andengine.opengl.font.Font;
import
org.anddev.andengine.opengl.texture.TextureOptions;
import
org.anddev.andengine.opengl.texture.atlas.bitmap.BitmapTextureAtlas;
import
org.anddev.andengine.opengl.texture.atlas.bitmap.BitmapTextureAtlasTextureRegionFactory;
import
org.anddev.andengine.opengl.texture.region.TextureRegion;
import
org.anddev.andengine.ui.activity.BaseGameActivity;
import
android.content.Context;
import
android.graphics.Color;
import
android.graphics.Typeface;
import
android.view.Display;
import
android.view.WindowManager;
public class
AndEnginePart2Activity
extends
BaseGameActivity {
private
Display
display
;
private static int
CAMERA_WIDTH
= 0;
private static int
CAMERA_HEIGHT
= 0;
private
Camera mCamera;
private
Scene mScene;
private
BitmapTextureAtlas
mFontTexture;
private
Font mFont;
private
BitmapTextureAtlas mBitmapTextureAtlas;
private
TextureRegion monsterTexture;
private
Monster monster;
private
ChangeableText scoreText;
// В onLoadEngine мы инициализируем движок
@Override
public
Engine onLoadEngine() {
// TODO Auto-generated method stub
WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE); display = wm.getDefaultDisplay();
// Получаем ширину и высоту нашего экрана
CAMERA_WIDTH = display.getWidth(); CAMERA_HEIGHT = display.getHeight();
// Создаем камеру
this
.mCamera =
new
Camera(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT);
// Создаем движок
return new
Engine(
new
EngineOptions(
true
, ScreenOrientation.LANDSCAPE,
new
RatioResolutionPolicy(CAMERA_WIDTH, CAMERA_HEIGHT),
this
.mCamera)); }
// В onLoadResources мы будем загружать ресурсы, // необходимые для нашего приложения, картинки, музыка, и т.д...
@Override
public void
onLoadResources() {
// TODO Auto-generated method stub
// Создаем новую текстуру 256х256, помните её размер должен быть кратный 2
this
.mBitmapTextureAtlas =
new
BitmapTextureAtlas(256, 256, TextureOptions.BILINEAR_PREMULTIPLYALPHA);
// Создаем тектуру для текста
this
.mFontTexture =
new
BitmapTextureAtlas(256, 256, TextureOptions.BILINEAR);
// Загружаем тектуру монстра
this
.monsterTexture = BitmapTextureAtlasTextureRegionFactory.createFromAsset(
this
.mBitmapTextureAtlas,
this
, "monster/monster.png", 0, 0);
// Создаем шрифт
this
.mFont =
new
Font(
this
.mFontTexture, Typeface.create(Typeface.DEFAULT, Typeface.BOLD),
32,
true
, Color.BLACK
);
this
.mFont.prepareLetters("1234567890".toCharArray());
// Загружаем тектуры и шрифт в память
this
.mEngine.getTextureManager().loadTexture(
this
.mBitmapTextureAtlas);
this
.mEngine.getTextureManager().loadTexture(
this
.mFontTexture);
this
.mEngine.getFontManager().loadFont(
this
.mFont); }
// В onLoadScene мы создаем сцену
@Override
public
Scene onLoadScene() {
// TODO Auto-generated method stub
this
.mEngine.registerUpdateHandler(
new
FPSLogger());
// Создаем сцену
mScene =
new
Scene();
// Устанавливаем цвет фона сцены
mScene.setBackground(
new
ColorBackground(0.96f, 0.9215f, 0.8157f));
// Создаем нашего монстра и устанавливаем его на определенную позицию
monster =
new
Monster(CAMERA_WIDTH / 2, CAMERA_HEIGHT -
200
,
this
.monsterTexture);
// Добавляем монстра на нашу сцену
mScene.attachChild(monster);
// Создаем score-текст
scoreText = new ChangeableText(CAMERA_WIDTH - 220, 20, this.mFont, "Score :", "Score : XXXXX".length());
// Добавляем текст на нашу сцену
mScene.attachChild(scoreText);
// Создаем цикл нашей сцены, в этом примере мы ничего не будет там делать
mScene.registerUpdateHandler(
new
IUpdateHandler() {
@Override
public void
onUpdate(
float
arg0) {
// Расположение этой строки здесь только для примера
scoreText.setText("Score : " + AndEnginePart2Activity.
this
.mEngine.getSecondsElapsedTotal());
// ...
}
@Override
public void
reset() {
// ...
} });
return
mScene; }
@Override
public void
onLoadComplete() {
// TODO Auto-generated method stub
} }
Вот такая структура нашего приложения получилась:
И вот результат наших стараний ( пока что только моих :) ) :
Вот и все. С основами остановимся пока на этом. Удачи в написании игр для Android :)
Спасибо
ОтветитьУдалить