안드엔진: 스프라이트

스프라이트란 장면 상에서 좌표 위치를 가지는 2차원 비트맵이다.
Sprite 클래스에는 여러가지 생성자가 있으며 그 중 가장 간단한 생성자 메서드는 다음과 같은 식으로 사용할 수 있다.
Entity layer = new Entity();
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()
;
}

TiledSprite를 생성한 후, setCurrentTileIndex() 메서드를 사용해서 타일 이미지를 교체할 수 있다.
TiledSprite tiledSprite = new TiledSprite(posX, posY , tiledTextureRegion, getVertexBufferObjectManager()) ;
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) ;



/**
* 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() ;
    
}

}


댓글

이 블로그의 인기 게시물

자바 암호화 확장 (JCE) 관련 자바 1.8.0_151 이후 변경 사항

좌표 변환: 회전 이동

HTTP POST