AndEngine动动精灵onSceneTouchEvent [英] AndEngine Move move sprite to onSceneTouchEvent

查看:191
本文介绍了AndEngine动动精灵onSceneTouchEvent的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我不知道为什么,但是当我触摸屏幕我的精灵不会移动到选定的位置。什么错?

onSceneTouchEvent(工作正常):

 公共布尔onSceneTouchEvent(决赛现场pScene,最终的TouchEvent pSceneTouchEvent){
        如果(this.physicsWorld!= NULL){
            如果(pSceneTouchEvent.isActionDown()){
                如果(NPCSelected!= -1){//硅喜哈非NPC seleccionat,-1帽
                    最后矩形RECT =新的Rectangle(pSceneTouchEvent.getX(),pSceneTouchEvent.getY(),10,10,vbom);
                    rect.setColor(Color.GREEN);
                    attachChild(RECT);
                    npcArray [NPCSelected] .setToMovePosition(pSceneTouchEvent.getX(),pSceneTouchEvent.getY());
                }
                返回true;
            }
        }
        返回false;
    }

NPC(移动到错误的地方):

 私人无效createPhysics(最终照相机的摄像头,PhysicsWorld physicsWorld){
        // TODO自动生成方法存根
        bodyNpc = PhysicsFactory.createCircleBody(physicsWorld,为此,BodyType.KinematicBody,PhysicsFactory.createFixtureDef(0,0,0));        bodyNpc.setUserData(N+ ArrayPosition);        physicsWorld.registerPhysicsConnector(新PhysicsConnector(这一点,bodyNpc,真,假)
        {
            @覆盖
            公共无效的onUpdate(浮动pSecondsElapsed)
            {
                super.onUpdate(pSecondsElapsed);                如果(toMovePosition!= NULL){
                    bodyNpc.setLinearVelocity(新Vector2(toMovePosition).SUB(bodyNpc.getPosition()),也没有());
                    Log.w(人大,+ toMovePosition);
                }
            }
        });
    }

&吸气放; setter方法​​:

 公共无效setToMovePosition(浮点像素,浮动PY){
    this.toMovePosition =新Vector2(PX,PY);
}公共Vector2 getToMovePosition(){
    返回this.toMovePosition;
}

感谢。


解决方案

好吧,我找到了解决办法:

<$p$p><$c$c>npcArray[NPCSelected].setToMovePosition(pSceneTouchEvent.getX()/PhysicsConstants.PIXEL_TO_METER_RATIO_DEFAULT, pSceneTouchEvent.getY()/ PhysicsConstants.PIXEL_TO_METER_RATIO_DEFAULT);

我需要通过划分:

  PhysicsConstants.PIXEL_TO_METER_RATIO_DEFAULT

<一个href=\"http://stackoverflow.com/questions/11991622/andengine-use-of-pixel-to-meter-ratio\">Explanation

I don't know why, but when I touch the screen my sprite doesn't move to selected position. Whats wrong?

onSceneTouchEvent (works ok):

public boolean onSceneTouchEvent(final Scene pScene, final TouchEvent pSceneTouchEvent) {
        if(this.physicsWorld != null) {
            if(pSceneTouchEvent.isActionDown()) {
                if(NPCSelected != -1){ //Si hi ha un NPC seleccionat, -1 cap
                    final Rectangle rect = new Rectangle(pSceneTouchEvent.getX(), pSceneTouchEvent.getY(), 10, 10, vbom);
                    rect.setColor(Color.GREEN);
                    attachChild(rect);
                    npcArray[NPCSelected].setToMovePosition(pSceneTouchEvent.getX(), pSceneTouchEvent.getY()); 
                }
                return true;
            }
        }
        return false;
    }

Npc (moves to wrong place):

private void createPhysics(final Camera camera, PhysicsWorld physicsWorld) {
        // TODO Auto-generated method stub
        bodyNpc = PhysicsFactory.createCircleBody(physicsWorld, this, BodyType.KinematicBody, PhysicsFactory.createFixtureDef(0, 0, 0));

        bodyNpc.setUserData("N" + ArrayPosition);

        physicsWorld.registerPhysicsConnector(new PhysicsConnector(this, bodyNpc, true, false)
        {
            @Override
            public void onUpdate(float pSecondsElapsed)
            {
                super.onUpdate(pSecondsElapsed);

                if(toMovePosition != null){
                    bodyNpc.setLinearVelocity(new Vector2(toMovePosition).sub(bodyNpc.getPosition()).nor());
                    Log.w("Npc", ""+toMovePosition);
                }
            }
        });
    }

Getters & setters:

public void setToMovePosition(float px, float py){
    this.toMovePosition = new Vector2(px, py);
}

public Vector2 getToMovePosition(){
    return this.toMovePosition; 
}

Thanks.

解决方案

Ok, I found the solution:

npcArray[NPCSelected].setToMovePosition(pSceneTouchEvent.getX()/PhysicsConstants.PIXEL_TO_METER_RATIO_DEFAULT, pSceneTouchEvent.getY()/PhysicsConstants.PIXEL_TO_METER_RATIO_DEFAULT);

I needed to divide by:

PhysicsConstants.PIXEL_TO_METER_RATIO_DEFAULT

Explanation

这篇关于AndEngine动动精灵onSceneTouchEvent的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆