Android(andengine + box2d)初学者——拖动一个物体(sprite/body)

标签 android box2d andengine

我目前正在学习一些教程来介绍 andEngine 和 box2d,我想拖动一个对象(附在 body 上的 Sprite ),同时它正在弹跳(它已注册到物理世界).

我想拖动,这样我可以看到我的角色在移动。仅当我如下注释代码(我注册物理连接器的部分)时它才有效。如果我取消注释,一切都会起作用(例如,即使我设置了其他属性),setPosition 除外! - 我确定代码正在进入 ACTION_MOVE 案例

问题 1:为什么这种方法不起作用? - 也许我必须拖动 body 而不是 Sprite ?

问题 2:如何在 onAreaTouched 中引用 body 并在其中进行操作? - 我尝试了很多不同的方法,但你必须在仅声明 Sprite 时创建 onAreaTouch。

引用:http://stuartmct.co.uk/2012/07/18/andengine-touch-events-with-sprites-and-shapes/和 AndEngine 书

Sprite sPlayer = new Sprite(CAMERA_WIDTH / 2, CAMERA_HEIGHT / 2,
                playerTextureRegion,
                this.mEngine.getVertexBufferObjectManager()) {
            @Override
            public boolean onAreaTouched(final TouchEvent pSceneTouchEvent,
                    final float pTouchAreaLocalX, final float pTouchAreaLocalY) {
                Log.i(this.getClass().getName(), "area touched");
                switch (pSceneTouchEvent.getAction()) {
                case TouchEvent.ACTION_DOWN:
                    break;
                case TouchEvent.ACTION_UP:
                    break;
                case TouchEvent.ACTION_MOVE:
                    this.setPosition(pSceneTouchEvent.getX() - this.getWidth()
                            / 2, pSceneTouchEvent.getY() - this.getHeight() / 2);
                    break;
                }

                return true;
            }
        };


        FixtureDef PLAYER_FIX = PhysicsFactory.createFixtureDef(10.0f, 0.75f,
                0.0f);
        // apply all forces, collisions to body - Dynamic
        Body body = PhysicsFactory.createCircleBody(physicsWorld, sPlayer,
                BodyType.DynamicBody, PLAYER_FIX);

下面的代码不允许我设置 Sprite 的位置:

/*
        // relate to collisions after adding to scene
        physicsWorld.registerPhysicsConnector(new PhysicsConnector(sPlayer,
                body, true, true));

*/      

        this.scene.registerTouchArea(sPlayer);
        this.scene.setTouchAreaBindingOnActionDownEnabled(true);
        this.scene.attachChild(sPlayer);

最佳答案

你需要去

myPad.setTransform(pSceneTouchEvent.getX() - (this.getWidth() /2), pSceneTouchEvent.getY() - (this.getHeight()/2), 0);//最后的零是用来设置角度的

因为使用 box2d 你需要移动 body 和物理连接器

physicsWorld.registerPhysicsConnector(新物理连接器(sPlayer, 正文,真实,真实));

将使 Sprite 跟随 body 。

关于Android(andengine + box2d)初学者——拖动一个物体(sprite/body),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14448827/

相关文章:

android - NFC和NDEF有什么关系

iphone - 如何订阅设备方向(非界面方向)事件?

android - 反方向射击? - AndEngine经典教程

java - AndEngine - BuildableTextureAtlas 的大小

android - 如何搜索 HTML 中的内容而不是标签

android - 获取从中膨胀 View 的资源 ID

java - 致命信号11(和引擎项目)

android - 按下 'power button' 时 AndEngine 应用程序重新启动

android - 以编程方式自动接受传入的蓝牙文件

java - 多个夹具的 Box2D 原点