Andengine 2d боковой скроллер, как Марио - PullRequest
3 голосов
/ 22 декабря 2011

У меня есть вопрос там.Как я делаю персонажа с гравитацией и доступным для правильной ходьбы, то есть какие функции мне нужно использовать и как я могу определить приспособления?И мне нужен мир физики box2d (я использую мозаичные карты)?Поэтому, если вы можете, пожалуйста, скажите мне, как сделать 2-й платформер боковой прокрутки, как Марио с андегином.

Мой код, что я пытаюсь сделать:

    // Character:
    charactersprite = new Sprite(40, 0, this.character);
    charactersprite.setScaleX(0.65f);

    this.mScene.setOnSceneTouchListener( this);

    // PHYSICS
    final FixtureDef characterfictur = PhysicsFactory.createFixtureDef(0, 0f,0.5f);


    this.mScene.registerUpdateHandler(this.mPhysicsWorld);

    final Body body = PhysicsFactory.createBoxBody(this.mPhysicsWorld, charactersprite, BodyType.DynamicBody, characterfictur);

    this.mPhysicsWorld.registerPhysicsConnector(new PhysicsConnector(charactersprite, body, true, false));
    mScene.attachChild(charactersprite);

    createUnwalkableObjects(mTMXTiledMap);
    final PhysicsHandler physicsHandler = new PhysicsHandler(charactersprite);
    charactersprite.registerUpdateHandler(physicsHandler);


    // HUD
    HUD my = new HUD();
    Sprite forward = new Sprite( 50, CAMERA_HEIGHT - 170, forwardr){
        @Override
        public boolean onAreaTouched(TouchEvent pEvent, float pX, float pY){
            if(!pEvent.isActionUp()){
                charactersprite.getTextureRegion().setFlippedHorizontal(false);

            body.setLinearVelocity(new Vector2(CHAR_MOVING_SPEED,body.getLinearVelocity().y)); // Don't look at there
            //body.applyLinearImpulse(new Vector2(2,0), body.getPosition());

            }else{
                //body.applyLinearImpulse(new Vector2(0,0), body.getPosition());
                physicsHandler.setVelocity(0, 0);
                body.setLinearVelocity(new Vector2(0,body.getLinearVelocity().y)); // Don't look at there 
            }
            return false;

                       }
    };

И немного вперед1006 *

private void createUnwalkableObjects(TMXTiledMap map){
    // Loop through the object groups

     for(final TMXObjectGroup group: map.getTMXObjectGroups()) {

             //if(group.getTMXObjectGroupProperties().containsTMXProperty("Zeme", "true")){
                     // This is our "wall" layer. Create the boxes from it

                     for(final TMXObject object : group.getTMXObjects()) {

                            final Rectangle rect = new Rectangle(object.getX(), object.getY(),object.getWidth(), object.getHeight());
                            final FixtureDef boxFixtureDef = PhysicsFactory.createFixtureDef(0, 0,1f);
                            PhysicsFactory.createBoxBody(this.mPhysicsWorld, rect, BodyType.StaticBody, boxFixtureDef);
                            rect.setVisible(false);
                            mScene.attachChild(rect);
                     }
             //}
     }

}

Так что это не сработало должным образом.Так что я делаю не так?Пожалуйста, помогите мне.Большое спасибо!

1 Ответ

4 голосов
/ 01 января 2012

Вещи, которые вам понадобятся:

  • BoundCamera (чтобы создать границы для вашей карты)
  • преследуйте сущность (ваш игрок, поэтому камера будет следовать за вашей сущностью)
  • FixtureDef с небольшой эластичностью (для предотвращения внезапной остановки игрока на земле)
  • создание корпусов для ваших статических объектов (таких как стены и т. Д.)
  • такие вещи, как прыжок - просто используйте setLinearVelocity

У каждой «функции», упомянутой выше, есть свой пример - просто проверьте и приведите примеры движков.

В этой теме я дал еще несколько советов о том, как кодировать такую ​​игру: CLICK

...