Re: FrameWork (Motor) ANDEngine GLES2

#18558
Anónimo
Inactivo

Acabamos de lanzar una nueva app con este motor y hemos aprendido muchísimo.

Una de las cosas a tener en cuenta al usar cualquier motor que use OpenGL o directamente OpenGl es que las texturas tienen que estar en potencia de 2 y la posición de estas para su mejor calidad en posiciones enteras.

La segunda es una clase que hizo uno chico que se apoya en el sistema de reescalamiento del AndEngine pero quitando las bandas negras tan molestas que se formaban cuando el tamaño de la pantalla no era proporcionalmente igual.

También algo que nos trajo algún problema ha sido el diseñar para diversas versiones de Android, ya que las versiones 4.x tienen botones no físicos en dispositivos modernos que hacen que el tamaño de la pantalla sea menor, y esto hace mas difícil la colocación de objetos en pantalla que se quieran visibles, ya que en versiones anteriores a la 4.x o bien móviles con botones físicos no existe estos botones táctiles.

Aquí os dejo la clase de reescalamiento sin bordes.

import org.andengine.engine.options.resolutionpolicy.BaseResolutionPolicy;
import org.andengine.opengl.view.RenderSurfaceView;

import android.view.View.MeasureSpec;

public class CroppedResolutionPolicy extends BaseResolutionPolicy
{
// ===========================================================
// Fields
// ===========================================================

private final float mCameraWidth;
private final float mCameraHeight;
private float mMarginVertical; // Pixels from top of canvas to visible area, and from bottom of canvas to visible area
private float mMarginHorizontal; // Pixels from left of canvas to visible area, and from right of canvas to visible area
public int measuredWidth, measuredHeight;
float nCanvasRatio;
float nCamRatio;

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

public CroppedResolutionPolicy(final float nCameraWidth, final float nCameraHeight)
{
this.mCameraWidth = nCameraWidth;
this.mCameraHeight = nCameraHeight;

this.mMarginVertical = 0;
this.mMarginHorizontal = 0;
}

// ===========================================================
// Getter & Setter
// ===========================================================
public float getMarginVertical()
{
return this.mMarginVertical;
}

public float getMarginHorizontal()
{
return this.mMarginHorizontal;
}

@Override
public void onMeasure(RenderSurfaceView pRenderSurfaceView, int pWidthMeasureSpec, int pHeightMeasureSpec)
{
BaseResolutionPolicy.throwOnNotMeasureSpecEXACTLY(pWidthMeasureSpec, pHeightMeasureSpec);

measuredWidth = MeasureSpec.getSize(pWidthMeasureSpec);
measuredHeight = MeasureSpec.getSize(pHeightMeasureSpec);

nCamRatio = (float)mCameraWidth / (float)mCameraHeight;
nCanvasRatio = (float)measuredWidth / (float)measuredHeight;

if( (float)measuredWidth / (float)measuredHeight < nCamRatio )
{
// Scale to fit height, width will crop
measuredWidth = (int) ( measuredHeight * nCamRatio);
this.mMarginHorizontal = ( this.mCameraWidth – ( (float) this.mCameraHeight * nCanvasRatio ) ) / 2.0f;
}
else
{
// Scale to fit width, height will crop
measuredHeight = (int) ( measuredWidth / nCamRatio );
float Resultado=(float) this.mCameraWidth / nCanvasRatio;
this.mMarginVertical = ( this.mCameraHeight – Resultado) / 2.0f;
}

pRenderSurfaceView.setMeasuredDimensionProxy(measuredWidth, measuredHeight);
}
}

y aquí la manera de usarla.
CroppedResolutionPolicy canvasSurface = new CroppedResolutionPolicy(480, 800);

final EngineOptions engineOptions = new EngineOptions(true, ScreenOrientation.PORTRAIT_FIXED, canvasSurface, this.mCamera);

A quienes visitais Todoandroid.es os ofrecemos un cupón descuento para la tienda AliExpress. Por compras superiores a 5$, tendrás 4$ de descuento. No es demasiado, pero algo ayuda ;D

Si e has decidido a comprar un nuevo teléfono móvil Android, smartwatch, pulsera de actividad, TV BOX, u otros productos.

Más Menos
Finaliza el:01-10-2020