AndEngine之Rotation3DExample

本文介绍了一个使用自定义纹理和3D旋转效果的精灵显示示例。该示例通过禁用背面剔除来展示精灵的3D旋转,并在场景中实现循环旋转动画。

public class Rotation3DExample extends BaseExample {
 // ===========================================================
 // Constants
 // ===========================================================

 private static final int CAMERA_WIDTH = 720;
 private static final int CAMERA_HEIGHT = 480;

 // ===========================================================
 // Fields
 // ===========================================================

 private Camera mCamera;
 private Texture mTexture;
 private TextureRegion mFaceTextureRegion;

 // ===========================================================
 // Constructors
 // ===========================================================

 // ===========================================================
 // Getter & Setter
 // ===========================================================

 // ===========================================================
 // Methods for/from SuperClass/Interfaces
 // ===========================================================

 @Override
 public Engine onLoadEngine() {
  this.mCamera = new Camera(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT);
  this.mCamera.setZClippingPlanes(-100, 100);
  return new Engine(new EngineOptions(true, ScreenOrientation.LANDSCAPE, new RatioResolutionPolicy(CAMERA_WIDTH, CAMERA_HEIGHT), this.mCamera));
 }

 @Override
 public void onLoadResources() {
  this.mTexture = new Texture(32, 32, TextureOptions.BILINEAR_PREMULTIPLYALPHA);
  this.mFaceTextureRegion = TextureRegionFactory.createFromAsset(this.mTexture, this, "gfx/face_box.png", 0, 0);

  this.mEngine.getTextureManager().loadTexture(this.mTexture);
 }

 @Override
 public Scene onLoadScene() {
  this.mEngine.registerUpdateHandler(new FPSLogger());

  final Scene scene = new Scene(1);
  scene.setBackground(new ColorBackground(0.09804f, 0.6274f, 0.8784f));

  /* Calculate the coordinates for the face, so its centered on the camera. */
  final int centerX = (CAMERA_WIDTH - this.mFaceTextureRegion.getWidth()) / 2;
  final int centerY = (CAMERA_HEIGHT - this.mFaceTextureRegion.getHeight()) / 2;

  /* Create the face and add it to the scene. */
  final Sprite face = new Sprite(centerX, centerY, this.mFaceTextureRegion) {
   @Override
   protected void applyRotation(final GL10 pGL) {
    /* Disable culling so we can see the backside of this sprite. */
    GLHelper.disableCulling(pGL);//背面检测
    
    final float rotation = this.mRotation;

    if(rotation != 0) {
     final float rotationCenterX = this.mRotationCenterX;
     final float rotationCenterY = this.mRotationCenterY;
     //pGL.glTranslatef(rotationCenterX, rotationCenterY, 0)跟pGL.glTranslatef(rotationCenterX, rotationCenterY, 0);绕过中心点的竖直方向翻转
     pGL.glTranslatef(rotationCenterX, rotationCenterY, 0);
     /* Note we are applying rotation around the y-axis and not the z-axis anymore! */
     pGL.glRotatef(rotation, 0, 1, 0);//延Y轴转
     pGL.glTranslatef(rotationCenterX, rotationCenterY, 0);
    }
   }

   @Override
   protected void drawVertices(final GL10 pGL, final Camera pCamera) {
    super.drawVertices(pGL, pCamera);

    /* Enable culling as 'normal' entities profit from culling. */
    GLHelper.enableCulling(pGL);
   }
  };
  face.addShapeModifier(new LoopShapeModifier(new RotationModifier(6, 0, 360)));//duration 是设置的动画执行时间
  scene.getTopLayer().addEntity(face);

  return scene;
 }

 @Override
 public void onLoadComplete() {

 }

 // ===========================================================
 // Methods
 // ===========================================================

 // ===========================================================
 // Inner and Anonymous Classes
 // ===========================================================
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值