AndEngine动动精灵onSceneTouchEvent [英] AndEngine Move move sprite to onSceneTouchEvent
本文介绍了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
这篇关于AndEngine动动精灵onSceneTouchEvent的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文