2011년 1월 16일 일요일

[Android 강좌][Korean][테마] - Android 무료 게임 엔진 사용 - Rokon




추가로 문의 사항이나, 궁금한 점이 계시면 연락주세요.
(joonryang@gmail.com)
※ 도움이 되셨다면, ^^. 맨 위 광고클릭 좀..ㅎㅎ

1. 'Rokon library' 다운로드
: http://code.google.com/p/rokon/downloads/list
위의 사이트에는 "Rokon library" 및 "Rokon library Source Code" 등이 있습니다.

2. 'Rokon library' Eclipse Porject에 추가
















 3. 'Rokon library' Framework 및 설명
1) 구조














2) 'Rokon library' Framework에 대한 보충 문서
: http://coscup.org/2010/slides/15_3_1300_android_game_engine.pdf


4. Sample Code.
1) 'Image Load' 방법











- "Image_Load_Activity.java"
public class Image_Load_Activity extends RokonActivity  {
 public static final float GAME_WIDTH = 480f;
 public static final float GAME_HEIGHT = 320f;
 private GameScence scene;
    public void onCreate() {
        debugMode();
        forceFullscreen();
        forceLandscape();
        setGameSize(GAME_WIDTH, GAME_HEIGHT);
        setDrawPriority(DrawPriority.PRIORITY_VBO);
        setGraphicsPath("textures/");
        createEngine();
    } // End of onCreate
   
    public void onLoadComplete() {
        Textures.load();
        setScene(scene = new GameScence());
    } // End of onLoadComplete
}

- "GameScence.java"
public class GameScence extends Scene {
    private FixedBackground background;
    public GameScence() {
        super();
        setBackground(background = new FixedBackground(Textures.background));
    } // End of GameScence
    @Override
    public void onGameLoop() {
    } // End of onGameLoop
    @Override
    public void onPause() {
    } // End of onPause
    @Override
    public void onResume() {
    } // End of onResume
    @Override
    public void onReady() {
    } // End of onReady
   
}

- "Textures.java"
public class Textures {
    public static TextureAtlas atlas;
    public static Texture background;
    public static void load() {
        atlas = new TextureAtlas();
        atlas.insert(background = new Texture("background.png"));
        atlas.complete();
    } // End of load
   
}

2) 'Image'를 화면에 보여주는 방법












- "Add_Image_Activity.java"
public class Add_Image_Activity extends RokonActivity  {
 public static final float GAME_WIDTH = 480f;
 public static final float GAME_HEIGHT = 320f;
 private GameScence1 scene;
    public void onCreate() {
        debugMode();
        forceFullscreen();
        forceLandscape();
        setGameSize(GAME_WIDTH, GAME_HEIGHT);
        setDrawPriority(DrawPriority.PRIORITY_VBO);
        setGraphicsPath("textures/");
        createEngine();
    } // End of onCreate
   
    public void onLoadComplete() {
        Textures1.load();
        setScene(scene = new GameScence1());
    } // End of onLoadComplete
}

- "GameScence1.java"
public class GameScence1 extends Scene {
    private FixedBackground background;
    private Sprite bob, bob2, bob3;
   
    public GameScence1() {
     // 이것은 3개의 요정을 1 계층에 사용하는것을 의미 합니다.
        super(1,3);
        setBackground(background = new FixedBackground(Textures1.background));
       
        // Create the Bob sprites.
        // 한 장면에 3개의 요정을 추가하도록 합니다. (이름을  밥 이라고 하기로 했어요)
        // 첫번째와 두번째 파라미터는 요정의 x,y 위치를, 3번째와 4번째는 크기를 나타냅니다
        bob = new Sprite(100, 220, Textures1.bob.getWidth(), Textures1.bob.getHeight());
        bob.setTexture(Textures1.bob);
        bob2 = new Sprite(100, 180, Textures1.bob.getWidth(), Textures1.bob.getHeight());
        bob2.setTexture(Textures1.bob);
        bob3 = new Sprite(100, 260, Textures1.bob.getWidth(), Textures1.bob.getHeight());
        bob3.setTexture(Textures1.bob);
        // Add the Bob sprites to the first layer.
        // 장면에 위의 것들을 추가합니다
        add(0, bob);
        add(0, bob2);
        add(0, bob3);
    } // End of GameScence
    @Override
    public void onGameLoop() {
    } // End of onGameLoop
    @Override
    public void onPause() {
    } // End of onPause
    @Override
    public void onResume() {
    } // End of onResume
    @Override
    public void onReady() {
     // x 450, y100 로 5000ms/5 초 동안 움직입니다.
     bob3.moveTo(450, 100, 5000);
     bob.moveTo(450, 100, 4000);
     bob2.moveTo(450, 100, 3000);
    } // End of onReady
   
}

- "Textures1.java"
public class Textures1 {
    public static TextureAtlas atlas1;
    public static Texture background, bob;
    public static void load() {
        atlas1 = new TextureAtlas();
        atlas1.insert(background = new Texture("background1.png"));
        atlas1.insert(bob = new Texture("android.png"));
        atlas1.complete();
    } // End of load
   
}

3) 'Image'를 "Touch Move" 하는 방법













- "Touch_Image_Activity.java"
public class Touch_Image_Activity extends RokonActivity  {
 public static final float GAME_WIDTH = 480f;
 public static final float GAME_HEIGHT = 320f;
 private GameScence2 scene;
    public void onCreate() {
        debugMode();
        forceFullscreen();
        forceLandscape();
        setGameSize(GAME_WIDTH, GAME_HEIGHT);
        setDrawPriority(DrawPriority.PRIORITY_VBO);
        setGraphicsPath("textures/");
        createEngine();
    } // End of onCreate
   
    public void onLoadComplete() {
        Textures2.load();
        setScene(scene = new GameScence2());
    } // End of onLoadComplete
}

- "GameScence2.java"
public class GameScence2 extends Scene {
    private FixedBackground background;
    private Sprite bob;
   
    public GameScence2() {
     // 이것은 3개의 요정을 1 계층에 사용하는것을 의미 합니다.
        super(1,1);
        setBackground(background = new FixedBackground(Textures2.background));
       
        // Create the Bob sprites.
        // 한 장면에 3개의 요정을 추가하도록 합니다. (이름을  밥 이라고 하기로 했어요)
        // 첫번째와 두번째 파라미터는 요정의 x,y 위치를, 3번째와 4번째는 크기를 나타냅니다
        bob = new Sprite(100, 220, Textures2.bob.getWidth(), Textures2.bob.getHeight());
        bob.setTexture(Textures2.bob);
        // Add the Bob sprites to the first layer.
        // 장면에 위의 것들을 추가합니다
        add(0, bob);

    } // End of GameScence2
    @Override
    public void onGameLoop() {
    } // End of onGameLoop
    @Override
    public void onPause() {
    } // End of onPause
    @Override
    public void onResume() {
    } // End of onResume
    @Override
    public void onReady() {
    } // End of onReady
   
    // 'pointerCount' 는 사용자가 일반적으로 누른 상태의 손가락의 측정값
    public void onTouchDown(float x, float y, MotionEvent event, int pointerCount, int pointerId) {
        // This is called when you press down on the screen.
    }
    //'pointerCount' 는 사용자가 일반적으로 누른 상태의 손가락의 측정값
    public void onTouchMove(float x, float y, MotionEvent event, int pointerCount, int pointerId) {
        // This is called when you move your finger over the screen.
     //(ie pretty much every frame if your holding your finger down)
        // Here we'll just make Bob follow your finger.
        bob.x = x - (Textures2.bob.getWidth() / 2);
        bob.y = y - (Textures2.bob.getHeight() / 2);
    }
    // 'pointerCount' 는 사용자가 일반적으로 누른 상태의 손가락의 측정값
    public void onTouchUp(float x, float y, MotionEvent event, int pointerCount, int pointerId) {
        // And this is called when you stop pressing.
    }
   
}

- "Textures2.java"
public class Textures2 {
    public static TextureAtlas atlas1;
    public static Texture background, bob;
    public static void load() {
        atlas1 = new TextureAtlas();
        atlas1.insert(background = new Texture("background1.png"));
        atlas1.insert(bob = new Texture("android.png"));
        atlas1.complete();
    } // End of load
   
}


4) 'Image'를 "Touch"에 따라 변경 하는 방법













- "Modifiers_Use_Activity.java"
public class Modifiers_Use_Activity extends RokonActivity  {
 public static final float GAME_WIDTH = 480f;
 public static final float GAME_HEIGHT = 320f;
 private GameScence3 scene;
    public void onCreate() {
        debugMode();
        forceFullscreen();
        forceLandscape();
        setGameSize(GAME_WIDTH, GAME_HEIGHT);
        setDrawPriority(DrawPriority.PRIORITY_VBO);
        setGraphicsPath("textures/");
        createEngine();
    } // End of onCreate
   
    public void onLoadComplete() {
        Textures3.load();
        setScene(scene = new GameScence3());
    } // End of onLoadComplete
}

- "GameScence3.java"
public class GameScence3 extends Scene {
    private FixedBackground background;
    private Sprite bob;
    private ColorModifier modifier;
   
    public GameScence3() {
     // 이것은 3개의 요정을 1 계층에  사용하는것을 의미 합니다.
        super(1,3);
        setBackground(background = new FixedBackground(Textures3.background));
       
        // Create the Bob sprites.
        // 한 장면에 3개의 요정을 추가하도록 합니다. (이름을  밥 이라고 하기로 했어요)
        // 첫번째와 두번째 파라미터는 요정의 x,y 위치를, 3번째와 4번째는 크기를 나타냅니다
        bob = new Sprite(100, 220, Textures3.bob.getWidth(), Textures3.bob.getHeight());
        bob.setTexture(Textures3.bob);
        // Add the Bob sprites to the first layer.
        // 장면에 위의 것들을 추가합니다
        add(0, bob);
        // And create the modifier.
        modifier = new ColorModifier();
    } // End of GameScence
    @Override
    public void onGameLoop() {
    } // End of onGameLoop
    @Override
    public void onPause() {
    } // End of onPause
    @Override
    public void onResume() {
    } // End of onResume
    @Override
    public void onReady() {
    } // End of onReady
   
    public void onTouchUp(float x, float y, MotionEvent event, int pointerCount, int pointerId) {
        // Add your modifier to the sprite.
        bob.addModifier(modifier);
    }
   
}

- "Textures3.java"
public class Textures3 {
    public static TextureAtlas atlas1;
    public static Texture background, bob;
    public static void load() {
        atlas1 = new TextureAtlas();
        atlas1.insert(background = new Texture("background1.png"));
        atlas1.insert(bob = new Texture("android.png"));
        atlas1.complete();
    } // End of load
   
}

추가로 문의 사항이나, 궁금한 점이 계시면 연락주세요.
(joonryang@gmail.com)
※ 도움이 되셨다면, ^^. 맨 위 광고클릭 좀..ㅎㅎ

댓글 없음:

댓글 쓰기