대부분 엔드엔진을 이용하면 디지털컨트롤러 등으로 스프라이트를 이동합니다. 하지만 전 오히려 그게 좀 부자연스러워서 버튼터치방식으로 4방향 이동시켜볼려고 합니다. 이번에 우리 막내가 슈팅게임을 하나 만들어 달라고 해서 만들면서 겸사겸사 포스팅해봅니다.

 

 private boolean movePlayerL = false;
 private boolean movePlayerR = false;
 private boolean movePlayerU = false;
 private boolean movePlayerD = false;

 private Sprite btnMoveL; 
 private Sprite btnMoveR;
 private Sprite btnMoveU;
 private Sprite btnMoveD;

  ----------------------------------

//플레이어를 셋팅합니다.

private void setplayer() {
  player = getBaseActivity().getResourceUtil().getAnimatedSprite("spaceship00.png",1,7);
  player.setPosition((int) getBaseActivity().getEngine().getCamera().getWidth() / 2 - player.getWidth() / 2,
    (int) getBaseActivity().getEngine().getCamera().getHeight() / 2 - player.getHeight() /2);
  player.setCurrentTileIndex(0);
  attachChild(player);
 }

//오른쪽이동버튼

private void controlR() {
  btnMoveR = new Sprite(pX,pY,(getBaseActivity().getResourceUtil().getSprite("control/mover.png")).getTextureRegion(), getBaseActivity().getVertexBufferObjectManager()){
  public boolean onAreaTouched(final TouchEvent pSceneTouchEvent, final float pTouchAreaLocalX, final float pTouchAreaLocalY){
   if(pSceneTouchEvent.getAction() == TouchEvent.ACTION_DOWN) {
    clickValue = 1;
    movePlayerR = true;
    player.animate(50);
   }
   if(pSceneTouchEvent.getAction() == TouchEvent.ACTION_UP) {
    movePlayerR = false;
    player.stopAnimation();
    player.setCurrentTileIndex(0);
   }
   return false;
  }
  @Override
  protected void onManagedUpdate(float pSecondsElapsed) {
   
   
   int minX = 0;
   int maxX = (int) getBaseActivity().getEngine().getCamera()
     .getWidth() - (int) player.getWidth();
   if (movePlayerR && clickValue == 1 &&  player.getX() <= maxX){
    
    player.setPosition(player.getX()+10, player.getY());   
    }else if (player.getX() == maxX){
     player.setPosition(maxX,player.getY());
     
   }
   super.onManagedUpdate(pSecondsElapsed);
  }
 };
 btnMoveR.setPosition(125, 370); 
 registerTouchArea(btnMoveR);
 attachChild(btnMoveR); 
 }

//위와 같이 나머지 이동버튼을 생성하면 끝!!!

 

Posted by BeansLove
,

먼저 지금 사용하게될 다음과 같은 그래픽이미지를 준비합니다. 크기는 50X50입니다.

 

 

위의 box스프라이트를 이용해서 게임의 기본판을 짜보도록 하겠습니다.

 

기본적으로 메인액티비티의 엔드엔진 설정은 알고 있으시다는 가정하에 진행합니다. 궁금한게 있으신 분은 메일이나 트위터로 문의 주시면 가능한 범위 내에서 답변드리겠습니다.

트위터 : https://twitter.com/BombSquad1104

메일 : usagi0509@naver.com

 

메인액티비티 설정 후 전 SudokuScene이라는 클래스를 생성합니다.

[메인액티비티]

@Override
 protected Scene onCreateScene() {

SudokuScene sudokuScene = new SudokuScene(this);
    return sudokuScene;

}

 

[ SudokuScene]

 

 

박스의 배치는 위와 같이 for문을 사용하여 배치합니다.

boxC와 boxN은 아직 기본 배치만 하기 때문에 알파값을 0으로 줍니다.

그리고 AVD로 한번 돌려 보겠습니다. 제대로 배치가 되었는지...

 

 

음...만족스럽게 배치가 되었네요..위와 같은 배치법을 이용하면 다양한 보드게임을 구현해 볼 수 있을 것입니다.

Posted by BeansLove
,

AndEngineExamples내에 즉, src/org.andengine.examples 아래의 4군데

 

・BoundCameraExample
・HullAlgorithmExample

・SplitScreenExample
・TextBreakExample.java


이상의 4군데에서 에러가 발생한 경우 해결방법

 

・BoundCameraExample
・SplitScreenExample 의 경우

 

[수정전]--빨간부분

 

 // ===========================================================
 // Methods
 // ===========================================================

 private void addFace(final float pX, final float pY) {
  final FixtureDef objectFixtureDef = PhysicsFactory.createFixtureDef(1, 0.5f, 0.5f);

  final AnimatedSprite face = new AnimatedSprite(pX, pY, this.mBoxFaceTextureRegion, this.getVertexBufferObjectManager()).animate(100);

 

[수정 후]

 

 final AnimatedSprite face = new AnimatedSprite(pX, pY, this.mBoxFaceTextureRegion, this.getVertexBufferObjectManager());
face
.animate(100);

・HullAlgorithmExample

[수정전]--빨간부분

 

 import org.andengine.entity.primitive.vbo.DrawMode;

 

[수정 후]

 

 import org.andengine.entity.primitive.DrawMode;

・TextBreakExample.java

 

[수정전]--빨간부분

 

 @Override
 public Scene onCreateScene() {
  this.mEngine.registerUpdateHandler(new FPSLogger());

  final Scene scene = new Scene();
  scene.setBackground(new Background(0.09804f, 0.6274f, 0.8784f));

  final VertexBufferObjectManager vertexBufferObjectManager = this.getVertexBufferObjectManager();
  this.mText = new Text(50, 40, this.mFont, "", 1000, new TextOptions(AutoWrap.LETTERS, AUTOWRAP_WIDTH, Text.LEADING_DEFAULT, HorizontalAlign.CENTER), vertexBufferObjectManager);
  scene.attachChild(this.mText);

 

[수정 후]

 

 this.mText = new Text(50, 40, this.mFont, "", 1000, new TextOptions(AutoWrap.LETTERS, AUTOWRAP_WIDTH,  HorizontalAlign.CENTER, Text.LEADING_DEFAULT), vertexBufferObjectManager);

Posted by BeansLove
,

엔드엔진으로 사다리폭탄제거 게임 "The Bomb Squad"를 개발완료 오픈하였습니다.

 

 

각  스테이지를 클리어함에 따라 자신의 계급도 올라가게 됩니다.

 

 

첫단계는 쉬운 편이지만 방심은 금물!. 자신의 계급이 올라감에 따라 고난이도의 스테이지가 등장합니다.

 

 

 

모든 스테이지를 클리어하여 최고계급에 오르게 되면 시간단축대결모드로 넘어갑니다.

 

 

 

https://play.google.com/store/apps/details?id=com.beansarcade.bombsquad

 

 

 

Posted by BeansLove
,

저번 포스트 andEngine(엔드엔진) Util인 Modifier에 관한 메모 를 실제로 게임에 적용해 보겠습니다. 가장 간단하게 어플을 실행하면 플레이화면에 "READY"가 표시 되고 몇 초후 "START"로 변경되면서 핸들러가 시작되는 구조를 만들어봤습니다.

 

먼저 아래와 같이 제한시간과 디바이스에 내장된 폰트를 이용해 화면에 표시합니다.

 

 

그리고 저번 포스트에서 말씀드린 Modify를 장착하도록 합니다.

 

 

그리고 테스트를 해봅니다.

 

START가 사라진 후 왼쪽 상단의 타임이 변화하기 시작합니다.

이상 andEngine 지근지근 씹어보기 였습니다.~~ 좋은 하루 되세요.

 

Posted by BeansLove
,