-1

所以我有对我的角色来说应该是不可行走的精灵。

问题是我不确定如何做到这一点。

这是我正在尝试的。当从关卡加载精灵时,我将精灵添加到链接列表中。

然后我遍历列表以检测角色是否与任何不可行走的精灵/瓷砖发生碰撞。

我在大约每秒运行的引擎更新线程上执行此操作。

这是我这样做的方法:

mScene.registerUpdateHandler(new IUpdateHandler(){

        @Override
        public void onUpdate(float pSecondsElapsed) {


            Iterator<Sprite> wall_collision = unwalkable_Sprites.iterator();

            while(wall_collision.hasNext()){
                Sprite sprite = wall_collision.next();

                if(character_sprite.collidesWith(sprite)){


                }
            }

        }

        @Override
        public void reset() {
            // TODO Auto-generated method stub

        }

    });

所以问题是当角色与不可行走的瓷砖碰撞时我如何定位角色,这样角色甚至不会越过瓷砖......对用户来说,它应该看起来像一个边界。

有没有人有任何建议或知道我该怎么做?

4

1 回答 1

2

看看这个例子

使用与示例中的“地面”相同的代码为您不可行走的瓷砖。你应该使用静态体:

this.mPhysicsWorld = new PhysicsWorld(new Vector2(0, SensorManager.GRAVITY_EARTH), false);
final FixtureDef wallFixtureDef = PhysicsFactory.createFixtureDef(0, 0.5f, 0.5f);

在这里,您可以使用 Shape 作为示例或例如 Sprite

//final Shape yourTile = new Rectangle(0, CAMERA_HEIGHT - 2, CAMERA_WIDTH, 2); Sprite yourTile = new Sprite(...); PhysicsFactory.createBoxBody(this.mPhysicsWorld, yourTile, BodyType.StaticBody, wallFixtureDef);

在这里你可以找到AndEngine的 box2dExtension(它需要使用 Bodies)

对不起我的英语:) 希望这会对你有所帮助。

PS,您不再需要检查此问题的碰撞。

于 2012-12-03T05:52:06.010 回答