【问题标题】:How to Detect Collide with Random Generated Sprite AndEngine?如何检测与随机生成的 Sprite AndEngine 的碰撞?
【发布时间】:2016-04-08 03:46:42
【问题描述】:

首先对不起我的英语不好...

场景: 我已经加载了 3 种精灵
1. 播放器
2. 障碍物(生成随机 X 坐标)
3. 矩形(障碍物)

我已经创建了每秒自动生成障碍物,生成后障碍物会随着重力下降。
每个障碍物都有矩形作为它的孩子。我将使用这个矩形来检测与玩家的碰撞。
如果玩家撞到这个矩形我需要改变分数,如果玩家撞到障碍我需要杀死玩家

_scene.registerUpdateHandler(new TimerHandler(0.5f, true, new ITimerCallback() {

        @Override
        public void onTimePassed(TimerHandler pTimerHandler) {
            int _coorx = randInt(0,_constants.CAMERA_WIDTH);

            // OBSTACLE
            _obstacle = new Sprite(_coorx, -50, _obstacletr, getVertexBufferObjectManager());
            _obstaclefd = PhysicsFactory.createFixtureDef(10.0f, 1.0f, 0.0f);
            _obstaclebody = PhysicsFactory.createCircleBody(_physicsworld, _obstacle, BodyType.DynamicBody, _obstaclefd);
            _physicsworld.registerPhysicsConnector(new PhysicsConnector(_obstacle, _obstaclebody, true, false));

            // OBSTACLE RECTANGLE
            _obstaclerectangle = new Rectangle(-_coorx, 0, _constants.CAMERA_WIDTH, 5, getVertexBufferObjectManager());
            _obstaclerectangle.registerUpdateHandler(new IUpdateHandler(){

                @Override
                public void onUpdate(float pSecondsElapsed) {
                    if(_obstaclerectangle.collidesWith(_player1)) {
                        _obstaclerectangle.setColor(1, 0, 0);
                    } else {
                        _obstaclerectangle.setColor(0, 1, 0);
                    }
                }

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

                }

            });
            _obstacle.attachChild(_obstaclerectangle);

            _scene.attachChild(_obstacle);
        }

    }));

【问题讨论】:

    标签: android andengine


    【解决方案1】:

    您需要一个 ContactListener。

    创建一个实现ContactListener的碰撞器类:

    public class Collider implements ContactListener {...}
    

    然后将碰撞器类添加到世界中:

    youPhysicworld.setContactListener(collider);
    

    在 Collider 类中,您必须实现在发生物理事件(beginContact、endCONtact、preSolve、postSolve)时将调用的方法。 在这些方法中,您可以随意处理事件。

    【讨论】:

    • 已经解决了。我使用数组来保存精灵,onUpdate 通过检查数组索引来检测所有对象。但是感谢您的解决方案,我可以将其用于其他问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-21
    • 1970-01-01
    • 2014-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多