Из моего поиска я нашел методы, подобные onUpdate-
и onUpdateManager
, но я должен делать это неправильно, потому что не могу найти. Я использую .runOnUpdateThread(Runabale);
, но он не работаетНепрерывное касание в Andengine
Если это помогает, это часть моего кода:
public class GameActivity extends SimpleBaseGameActivity {
private boolean action_up ,action_down;
Sprite eliSprite;
Runnable runabale=new Runnable() {
@Override
public void run() {
Log.d("UPDATE","OnUpdate");
if (action_down){
eliSprite.setY(eliSprite.getY()-10);
}
}
};
защищены Scene onCreateScene() { Сцены з = новая сцена();
PhysicsWorld mWorld =new PhysicsWorld(new Vector2(0, SensorManager.GRAVITY_EARTH),true);
eliSprite = new Sprite(400, 240, james_walking[3], getVertexBufferObjectManager());
final Sprite eliSprite2 = new Sprite(400, 370, james_walking[0], getVertexBufferObjectManager());
eliSprite.setScale(0.5f);
eliSprite2.setScale(0.5f);
FixtureDef characteristics= PhysicsFactory.createFixtureDef(1,0,.5f);
final Body b= PhysicsFactory.createBoxBody(mWorld, eliSprite, BodyDef.BodyType.DynamicBody,characteristics);
mWorld.registerPhysicsConnector(new PhysicsConnector(eliSprite,b));
FixtureDef characteristics2= PhysicsFactory.createFixtureDef(1,.90f,1);
final Body b2= PhysicsFactory.createCircleBody(mWorld,eliSprite2, BodyDef.BodyType.StaticBody,characteristics2);
mWorld.registerPhysicsConnector(new PhysicsConnector(eliSprite2,b2));
s.attachChild(eliSprite);
s.attachChild(eliSprite2);
s.registerUpdateHandler(mWorld);
s.setTouchAreaBindingOnActionDownEnabled(true);
s.setOnSceneTouchListener(new IOnSceneTouchListener() {
@Override
public boolean onSceneTouchEvent(Scene pScene, TouchEvent pSceneTouchEvent) {
action_down = pSceneTouchEvent.isActionDown();
action_up = pSceneTouchEvent.isActionUp();
return true;
}
});
this.getEngine().runOnUpdateThread(runabale);
return s;
}
EDIT
@Override
public void runOnUpdateThread(Runnable pRunnable) {
super.runOnUpdateThread(pRunnable);
if(action_down) {
Log.d("UPDATE","ActionDown pressed");
b.setTransform(b.getPosition().x,b.getPosition().y-10,0);
}
}
@Override
protected Scene onCreateScene() {
Scene s = new Scene();
PhysicsWorld mWorld =new PhysicsWorld(new Vector2(0, 0),true);
eliSprite = new AnimatedSprite(400,240,james_walking,getVertexBufferObjectManager());
eliSprite.setScale(0.5f);
eliSprite.animate(200,true);
FixtureDef characteristics= PhysicsFactory.createFixtureDef(1,0,.5f);
b= PhysicsFactory.createBoxBody(mWorld, eliSprite, BodyDef.BodyType.DynamicBody,characteristics);
mWorld.registerPhysicsConnector(new PhysicsConnector(eliSprite,b));
s.attachChild(eliSprite);
s.setOnSceneTouchListener(new IOnSceneTouchListener() {
@Override
public boolean onSceneTouchEvent(Scene pScene, TouchEvent pSceneTouchEvent) {
action_down= pSceneTouchEvent.isActionDown();
return true;
}
});
s.registerUpdateHandler(mWorld);
s.setTouchAreaBindingOnActionDownEnabled(true);
return s;
}
Вы повсюду! Во всяком случае, теперь у меня непрерывное касание, но, как ни странно, он просто перемещается один раз (althoe logcat показывает, что 'eliSprite.setPosition (eliSprite.getX(), eliSprite.getY() - 10f);' выполняется каждый раз и когда я реализую палец он возвращается к тому, где он был раньше. Почему? –
Можете ли вы опубликовать свои onmanagedupdate и onareatouched методы в исходном сообщении вопроса. На данный момент нам ничего не нужно. –
Дело в том, что мы перемещаем спрайт, если он связан с телом, мы должны переместить тело вместо этого. Sprite будет следовать. –