防着Example中的代码写的,没有什么好说的!直接贴代码:
public class PathModifierMy extends SimpleBaseGameActivity {
private int mCameraWidth = 0;
private int mCameraHeight = 0;
private RepeatingSpriteBackground mRepeatingSpriteBackground;
private BitmapTextureAtlas mPlayer;
private TiledTextureRegion mPlayerRegion;
Path mPlayerPath;
AnimatedSprite mPlayerAnimatedSprite;
PathModifier mPathModifier;
LoopEntityModifier mLoopEntityModifier;
private void initCameraSize() {
mCameraWidth = getResources().getDisplayMetrics().widthPixels;
mCameraHeight = getResources().getDisplayMetrics().heightPixels;
}
@Override
public EngineOptions onCreateEngineOptions() {
initCameraSize();
Camera camera = new Camera(0, 0, mCameraWidth, mCameraHeight);
return new EngineOptions(true, ScreenOrientation.LANDSCAPE_FIXED,
new RatioResolutionPolicy(mCameraWidth, mCameraHeight), camera);
}
@Override
protected void onCreateResources() {
BitmapTextureAtlasTextureRegionFactory.setAssetBasePath("gfx/");
mRepeatingSpriteBackground = new RepeatingSpriteBackground(
mCameraWidth, mCameraHeight, getTextureManager(),
AssetBitmapTextureAtlasSource.create(getAssets(),
"gfx/background_grass.png"),
getVertexBufferObjectManager());
mPlayer = new BitmapTextureAtlas(getTextureManager(), 128, 128);
mPlayerRegion = BitmapTextureAtlasTextureRegionFactory
.createTiledFromAsset(mPlayer, this, "player.png", 0, 0, 3, 4);
mPlayer.load();
}
@Override
protected Scene onCreateScene() {
mEngine.registerUpdateHandler(new FPSLogger());
Scene scene = new Scene();
scene.setBackground(mRepeatingSpriteBackground);
/* Create the face and add it to the scene. */
mPlayerAnimatedSprite = new AnimatedSprite(10, 10, 48, 64,
this.mPlayerRegion, this.getVertexBufferObjectManager());
// 构造path,6为Path链接的次数,即后面to的个数,可以大于,但是不能小于
mPlayerPath = new Path(6)
// 初始点
.to(10, 10)
// 到第一个拐点
.to(mCameraWidth / 4.0f, mCameraHeight - 64)
// 到第二个拐点
.to(mCameraWidth / 2.0f, mCameraHeight / 2.0f)
// 到第三个拐点
.to(3 * mCameraWidth / 4.0f, mCameraHeight - 64)
// 到第四个拐点
.to(mCameraWidth - 64, 10);
mPathModifier = new PathModifier(30, mPlayerPath, null,
mPathModifierListener, EaseSineInOut.getInstance());
mLoopEntityModifier = new LoopEntityModifier(mPathModifier);
mPlayerAnimatedSprite.registerEntityModifier(mLoopEntityModifier);
scene.attachChild(mPlayerAnimatedSprite);
return scene;
}
IPathModifierListener mPathModifierListener = new IPathModifierListener() {
@Override
public void onPathWaypointStarted(PathModifier pPathModifier,
IEntity pEntity, int pWaypointIndex) {
switch (pWaypointIndex) {
case 0:
mPlayerAnimatedSprite.animate(new long[] { 200, 200, 200 }, 6,
8, true);
break;
case 1:
mPlayerAnimatedSprite.animate(new long[] { 200, 200, 200 }, 0,
2, true);
break;
case 2:
mPlayerAnimatedSprite.animate(new long[] { 200, 200, 200 }, 6,
8, true);
break;
case 3:
mPlayerAnimatedSprite.animate(new long[] { 200, 200, 200 }, 0,
2, true);
break;
case 4:
mPlayerAnimatedSprite.animate(new long[] { 200, 200, 200 }, 9,
11, true);
break;
default:
break;
}
}
@Override
public void onPathWaypointFinished(PathModifier pPathModifier,
IEntity pEntity, int pWaypointIndex) {
}
@Override
public void onPathStarted(PathModifier pPathModifier, IEntity pEntity) {
Debug.d(" [onPathStarted] ");
}
@Override
public void onPathFinished(PathModifier pPathModifier, IEntity pEntity) {
Debug.d(" [onPathFinished] ");
}
};
}