안드엔진: 스프라이트
스프라이트란 장면 상에서 좌표 위치를 가지는 2차원 비트맵이다.
Sprite 클래스에는 여러가지 생성자가 있으며 그 중 가장 간단한 생성자 메서드는 다음과 같은 식으로 사용할 수 있다.
Entity layer = new Entity();
sprite = new Sprite(posX , posY, textureRegion , getVertexBufferObjectManager()) ;
layer.attachChild( sprite);
sprite = new Sprite(posX , posY, textureRegion , getVertexBufferObjectManager()) ;
layer.attachChild( sprite);
엔티티의 attachChild() 메서드를 사용해서 스프라이트를 부모 엔티티에 붙인다. 엔티티를 제거하려면, 제거할 엔티티의 detachSelf() 메서드를 사용한다.
Tiled Sprite
TiledSprite 클래스는 normal, clicked 등의 상태에 따른 버튼을 만드는 데에 사용될 수 있다. 여러 장의 이미지가 필요하므로 TiledTextureRegion 클래스를 사용해야 한다.
TiledTextureRegion은 하나의 이미지 파일에 포함된 한 세트의 이미지를 불러온다. 매개변수로 열과 행의 갯수를 지정한다.
final BuildableBitmapTextureAtlas buildableBitmapTextureAtlas = new BuildableBitmapTextureAtlas(getTextureManager() , 180 , 36) ;
tiledTextureRegion = BitmapTextureAtlasTextureRegionFactory
.createTiledFromAsset (buildableBitmapTextureAtlas, this, "tiled.png" , 5, 1);
try {
buildableBitmapTextureAtlas.build(new BlackPawnTextureAtlasBuilder<IBitmapTextureAtlasSource , BitmapTextureAtlas>(0, 0, 0 ));
buildableBitmapTextureAtlas.load() ;
} catch (ITextureAtlasBuilder.TextureAtlasBuilderException e) {
e.printStackTrace();
}
tiledTextureRegion = BitmapTextureAtlasTextureRegionFactory
.createTiledFromAsset (buildableBitmapTextureAtlas, this, "tiled.png" , 5, 1);
try {
buildableBitmapTextureAtlas.build(new BlackPawnTextureAtlasBuilder<IBitmapTextureAtlasSource , BitmapTextureAtlas>(0, 0, 0 ));
buildableBitmapTextureAtlas.load() ;
} catch (ITextureAtlasBuilder.TextureAtlasBuilderException e) {
e.printStackTrace();
}
TiledSprite를 생성한 후, setCurrentTileIndex() 메서드를 사용해서 타일 이미지를 교체할 수 있다.
TiledSprite tiledSprite = new TiledSprite(posX, posY , tiledTextureRegion, getVertexBufferObjectManager()) ;
tiledSprite.setCurrentTileIndex( 1);
pScene.attachChild(tiledSprite) ;
tiledSprite.setCurrentTileIndex( 1);
pScene.attachChild(tiledSprite) ;
Animated Sprite
AnimatedSprite는 움직이는 이미지를 만드는 클래스이다. TiledSprite와 마찬가지로 TiledTextureRegion 클래스를 사용한다.
animate() 메서드를 사용해서 프레임의 지속시간을 지정할 수 있다.
AnimatedSprite animatedSprite = new AnimatedSprite(posX , posY, tiledTextureRegion , getVertexBufferObjectManager()) ;
animatedSprite.animate( 1000L);
pScene.attachChild(animatedSprite) ;
animatedSprite.animate( 1000L);
pScene.attachChild(animatedSprite) ;
/**
* Hello, AndEngine
* Created by Elex on 2014-06-30.
*/
public class HelloAndEngine extends BaseGameActivity {
private Camera camera;
private Music music;
private TiledTextureRegion tiledTextureRegion ;
/**
* 게임 엔진의 옵션을 설정한다 .
* @return
*/
@Override
public EngineOptions onCreateEngineOptions () {
final Display display = getWindowManager().getDefaultDisplay();
int cameraWidth = display.getWidth() ;
int cameraHeight = display.getHeight() ;
// 카메라를 생성 . 카메라는 뷰포트의 역할을 한다 .
camera = new Camera( 0, 0 , cameraWidth, cameraHeight) ;
// 엔진 옵션을 설정한다 .
EngineOptions engineOptions = new EngineOptions( true,
ScreenOrientation.LANDSCAPE_FIXED,
new RatioResolutionPolicy(16/ 10f), camera );
// 게임 중 사용자의 입력이 없더라도 화면이 꺼지지 않도록 하기 위해서 웨이크락을 지정한다 .
engineOptions.setWakeLockOptions(WakeLockOptions. SCREEN_ON );
// 게임엔진에서 음악 및 사운드 효과를 사용하도록 설정한다.
engineOptions.getAudioOptions().setNeedsMusic( true);
engineOptions.getAudioOptions().setNeedsSound( true);
// 마지막으로 , 엔진 옵션을 반환한다 .
return engineOptions ;
}
/**
* 게임에 필요한 리소스들을 불러온다 . 텍스쳐, 사운드 , 음악 , 폰트 등.
* @param pOnCreateResourcesCallback
* @throws IOException
*/
@Override
public void onCreateResources (OnCreateResourcesCallback pOnCreateResourcesCallback)
throws IOException {
BitmapTextureAtlasTextureRegionFactory. setAssetBasePath("gfx/");
SoundFactory. setAssetBasePath( "sfx/" );
MusicFactory. setAssetBasePath( "music/" );
FontFactory. setAssetBasePath( "font/" );
final BuildableBitmapTextureAtlas buildableBitmapTextureAtlas = new BuildableBitmapTextureAtlas(getTextureManager() , 180 , 36) ;
tiledTextureRegion = BitmapTextureAtlasTextureRegionFactory
. createTiledFromAsset(buildableBitmapTextureAtlas, this, "tiled.png" , 5, 1);
try {
buildableBitmapTextureAtlas.build(new BlackPawnTextureAtlasBuilder<IBitmapTextureAtlasSource , BitmapTextureAtlas>(0, 0, 0 ));
buildableBitmapTextureAtlas.load();
} catch (ITextureAtlasBuilder.TextureAtlasBuilderException e) {
e.printStackTrace();
}
try {
music = MusicFactory.createMusicFromAsset(getMusicManager() , this, "bgm.mp3" );
} catch (IOException e) {
e.printStackTrace();
}
// 리소스 생성이 끝나면 다음 콜백 메서드를 실행해서 끝이라고 알려줘야 한다.
pOnCreateResourcesCallback.onCreateResourcesFinished() ;
}
/**
* 게임에서 사용될 장면을 생성한다 .
* @param pOnCreateSceneCallback
* @throws IOException
*/
@Override
public void onCreateScene (OnCreateSceneCallback pOnCreateSceneCallback)
throws IOException {
// 장면을 생성한다 .
Scene scene = new Scene();
scene.setBackground( new Background(1.0f , 0.0f , 0.0f)) ;
// 장면 생성이 끝나면 다음 콜백 메서드를 실행해서 끝이라고 알려줘야 한다.
pOnCreateSceneCallback.onCreateSceneFinished(scene) ;
}
/**
* 장면을 엔티티들로 채운다 .
* @param pScene
* @param pOnPopulateSceneCallback
* @throws IOException
*/
@Override
public void onPopulateScene (Scene pScene , OnPopulateSceneCallback pOnPopulateSceneCallback)
throws IOException {
float posX = camera.getWidth()/ 2f;
float posY = camera.getHeight()/2f;
AnimatedSprite animatedSprite = new AnimatedSprite(posX , posY,
tiledTextureRegion, getVertexBufferObjectManager()) ;
animatedSprite.animate( 500L);
pScene.attachChild(animatedSprite) ;
// 마찬가지로 , 다음 콜백 메서드를 실행해서 끝났다고 알려준다.
pOnPopulateSceneCallback.onPopulateSceneFinished() ;
}
@Override
public synchronized void onResumeGame() {
if (music != null && !music .isPlaying()){
music.play() ;
}
super .onResumeGame() ;
}
@Override
public synchronized void onPauseGame() {
if (music != null && music .isPlaying()){
music.pause() ;
}
super .onPauseGame() ;
}
}
* Hello, AndEngine
* Created by Elex on 2014-06-30.
*/
public class HelloAndEngine extends BaseGameActivity {
private Camera camera;
private Music music;
private TiledTextureRegion tiledTextureRegion ;
/**
* 게임 엔진의 옵션을 설정한다 .
* @return
*/
@Override
public EngineOptions onCreateEngineOptions () {
final Display display = getWindowManager().getDefaultDisplay();
int cameraWidth = display.getWidth() ;
int cameraHeight = display.getHeight() ;
// 카메라를 생성 . 카메라는 뷰포트의 역할을 한다 .
camera = new Camera( 0, 0 , cameraWidth, cameraHeight) ;
// 엔진 옵션을 설정한다 .
EngineOptions engineOptions = new EngineOptions( true,
ScreenOrientation.LANDSCAPE_FIXED,
new RatioResolutionPolicy(16/ 10f), camera );
// 게임 중 사용자의 입력이 없더라도 화면이 꺼지지 않도록 하기 위해서 웨이크락을 지정한다 .
engineOptions.setWakeLockOptions(WakeLockOptions. SCREEN_ON );
// 게임엔진에서 음악 및 사운드 효과를 사용하도록 설정한다.
engineOptions.getAudioOptions().setNeedsMusic( true);
engineOptions.getAudioOptions().setNeedsSound( true);
// 마지막으로 , 엔진 옵션을 반환한다 .
return engineOptions ;
}
/**
* 게임에 필요한 리소스들을 불러온다 . 텍스쳐, 사운드 , 음악 , 폰트 등.
* @param pOnCreateResourcesCallback
* @throws IOException
*/
@Override
public void onCreateResources (OnCreateResourcesCallback pOnCreateResourcesCallback)
throws IOException {
BitmapTextureAtlasTextureRegionFactory. setAssetBasePath("gfx/");
SoundFactory. setAssetBasePath( "sfx/" );
MusicFactory. setAssetBasePath( "music/" );
FontFactory. setAssetBasePath( "font/" );
final BuildableBitmapTextureAtlas buildableBitmapTextureAtlas = new BuildableBitmapTextureAtlas(getTextureManager() , 180 , 36) ;
tiledTextureRegion = BitmapTextureAtlasTextureRegionFactory
. createTiledFromAsset(buildableBitmapTextureAtlas, this, "tiled.png" , 5, 1);
try {
buildableBitmapTextureAtlas.build(new BlackPawnTextureAtlasBuilder<IBitmapTextureAtlasSource , BitmapTextureAtlas>(0, 0, 0 ));
buildableBitmapTextureAtlas.load();
} catch (ITextureAtlasBuilder.TextureAtlasBuilderException e) {
e.printStackTrace();
}
try {
music = MusicFactory.createMusicFromAsset(getMusicManager() , this, "bgm.mp3" );
} catch (IOException e) {
e.printStackTrace();
}
// 리소스 생성이 끝나면 다음 콜백 메서드를 실행해서 끝이라고 알려줘야 한다.
pOnCreateResourcesCallback.onCreateResourcesFinished() ;
}
/**
* 게임에서 사용될 장면을 생성한다 .
* @param pOnCreateSceneCallback
* @throws IOException
*/
@Override
public void onCreateScene (OnCreateSceneCallback pOnCreateSceneCallback)
throws IOException {
// 장면을 생성한다 .
Scene scene = new Scene();
scene.setBackground( new Background(1.0f , 0.0f , 0.0f)) ;
// 장면 생성이 끝나면 다음 콜백 메서드를 실행해서 끝이라고 알려줘야 한다.
pOnCreateSceneCallback.onCreateSceneFinished(scene) ;
}
/**
* 장면을 엔티티들로 채운다 .
* @param pScene
* @param pOnPopulateSceneCallback
* @throws IOException
*/
@Override
public void onPopulateScene (Scene pScene , OnPopulateSceneCallback pOnPopulateSceneCallback)
throws IOException {
float posX = camera.getWidth()/ 2f;
float posY = camera.getHeight()/2f;
AnimatedSprite animatedSprite = new AnimatedSprite(posX , posY,
tiledTextureRegion, getVertexBufferObjectManager()) ;
animatedSprite.animate( 500L);
pScene.attachChild(animatedSprite) ;
// 마찬가지로 , 다음 콜백 메서드를 실행해서 끝났다고 알려준다.
pOnPopulateSceneCallback.onPopulateSceneFinished() ;
}
@Override
public synchronized void onResumeGame() {
if (music != null && !music .isPlaying()){
music.play() ;
}
super .onResumeGame() ;
}
@Override
public synchronized void onPauseGame() {
if (music != null && music .isPlaying()){
music.pause() ;
}
super .onPauseGame() ;
}
}
댓글
댓글 쓰기