Оригинал статьи
Это руководство по применение обработчиков обновления спрайтов/объектом. Оно охватывает следующие моменты:
1. Создание спрайта
2. Подключение слушателя к спрайтам/объектам, которые могут быть обновлены
3. Обработка нажатий на спрайты
Итак, приступим. Во-первых нам нужно будет создать новый спрайт. Убедитесь, что у вас есть текстуры и установите TextureRegion, а затем создайте следующую функцию в своём классе:
Не забудьте изменить имя TextureRegion mYourSpritesTextureRegion на то, которое вы используете для своего спрайта!
После этого, определите метод onLoadScene() и протестируйте выше приложение. Вы должны увидеть спрайт на вашем экране в точке X=100 и Y=100.
Теперь мы хотим получить возможность что-нибудь сделать с нашим спрайтом. Давайте сделаем изменение положения спрайта при его перетаскивании. Для этого необходимо изменить метод createSprite(), добавить в него слушателя, который будет вызываться при нажатии. Вот обновленный код:
Что мы сделали, так это добавили IOnAreaTouchedListener на спрайт и зарегистрировали на сцене. Теперь, когда мы нажимаем на спрайт, будет вызван метод onAreaTouched() и мы можем управлять в этом методе обновлением спрайта.
Для того, чтобы спрайт двигался за пальцем, когда вы его касаетесь, необходимо добавить следующий код в метод onAreaTouched():
Если вы сейчас исполните этот код, результаты будут выглядеть несколько странно, т.к. позиция спрайта определяется его левым верхним углом. Для исправления этого необходимо обновить код:
Снова запустите приложение, теперь вы должны получить спрайт, послушно бегающий за вашим пальцем.
Всё это можно оформить в виде отдельного класса MySprite унаследованного от Sprite, перегрузив его методы:
И создавать спрайт следующим образом:
Это руководство по применение обработчиков обновления спрайтов/объектом. Оно охватывает следующие моменты:
1. Создание спрайта
2. Подключение слушателя к спрайтам/объектам, которые могут быть обновлены
3. Обработка нажатий на спрайты
Итак, приступим. Во-первых нам нужно будет создать новый спрайт. Убедитесь, что у вас есть текстуры и установите TextureRegion, а затем создайте следующую функцию в своём классе:
private void createSprite() { final Sprite sprite = new Sprite(100, 100, mYourSpritesTextureRegion); this.mEngine.getScene().getTopLayer().addEntity(sprite); }
Не забудьте изменить имя TextureRegion mYourSpritesTextureRegion на то, которое вы используете для своего спрайта!
После этого, определите метод onLoadScene() и протестируйте выше приложение. Вы должны увидеть спрайт на вашем экране в точке X=100 и Y=100.
Теперь мы хотим получить возможность что-нибудь сделать с нашим спрайтом. Давайте сделаем изменение положения спрайта при его перетаскивании. Для этого необходимо изменить метод createSprite(), добавить в него слушателя, который будет вызываться при нажатии. Вот обновленный код:
private void createSprite() { final Scene scene = this.mEngine.getScene(); final Sprite sprite = new Sprite(100, 100, mYourSpritesTextureRegion) { @Override public boolean onAreaTouched(TouchEvent pSceneTouchEvent, float pTouchAreaLocalX, float pTouchAreaLocalY) { } }; scene.registerTouchArea(sprite); scene.getTopLayer().addEntity(sprite); }
Что мы сделали, так это добавили IOnAreaTouchedListener на спрайт и зарегистрировали на сцене. Теперь, когда мы нажимаем на спрайт, будет вызван метод onAreaTouched() и мы можем управлять в этом методе обновлением спрайта.
Для того, чтобы спрайт двигался за пальцем, когда вы его касаетесь, необходимо добавить следующий код в метод onAreaTouched():
sprite.setPosition(pSceneTouchEvent.getX(), pSceneTouchEvent.getY());
Если вы сейчас исполните этот код, результаты будут выглядеть несколько странно, т.к. позиция спрайта определяется его левым верхним углом. Для исправления этого необходимо обновить код:
sprite.setPosition(pSceneTouchEvent.getX() - this.getWidth()/2, pSceneTouchEvent.getY() - this.getHeight()/2);
Снова запустите приложение, теперь вы должны получить спрайт, послушно бегающий за вашим пальцем.
Всё это можно оформить в виде отдельного класса MySprite унаследованного от Sprite, перегрузив его методы:
private class MySprite extends Sprite { public MySprite(float pX, float pY, TextureRegion pTextureRegion) { super(pX, pY, pTextureRegion); // TODO Auto-generated constructor stub } @Override protected void onManagedUpdate(float pSecondsElapsed) { // TODO Auto-generated method stub super.onManagedUpdate(pSecondsElapsed); } @Override public boolean onAreaTouched(TouchEvent pSceneTouchEvent) { setPosition(pSceneTouchEvent.getX(), pSceneTouchEvent.getY()); return true; } }
И создавать спрайт следующим образом:
final MySprite mySprite = new MySprite(100, 100, texReg); scene.registerTouchArea(mySprite); scene.getTopLayer().addEntity(mySprite);
Комментариев нет:
Отправить комментарий