Note that there are some explanatory texts on larger screens.

plurals
  1. POAndroid openGL ES 2.0 scene scrolling
    primarykey
    data
    text
    <p>I'm working on a simple game for android using openGL es 2.0. Game will be in 2D, something like old supermario, where player can move left-right/up-down but no depth. </p> <p>Level will be larger than screen, so graphics will have to scroll. Here is where the problem comes. I don't know where/when to stop scrolling. </p> <p>Example. Lets say that background is 100x100 sized square with texture. Lets say that on screen there is only 1/4 of the background visible at any time. When I then move screen to the right, I would like it to stop scrolling when right edge of background comes at the edge of the screen.</p> <p>The best I can do now, is to stop scrolling when center of "view" is at the edge of background. But this isn't good, because 3/4 of the screen are than blank.</p> <p>How can I calculate this "offset" from center of view to edge of screen? </p> <p>Note: I don't want to use orthographic projection.</p> <p>Here is code of renderer.</p> <pre><code>package com.huntedseas; import javax.microedition.khronos.egl.EGLConfig; import javax.microedition.khronos.opengles.GL10; import android.opengl.GLES20; import android.opengl.GLSurfaceView.Renderer; import android.opengl.Matrix; import android.util.Log; public class GameRenderer implements Renderer { protected LevelGenerator generator; protected SquareGL squareGL; protected static float angleX; protected static float angleY; protected static float angleZ; protected static float viewX = 0; protected static float viewY = 0; //private float viewZ = 0; private float[] mProjectionMatrix = new float[16]; //Projekcijska matrika private float[] mVMatrix = new float[16]; private float[] mMVPMatrix = new float[16]; @Override public void onSurfaceCreated(GL10 unused, EGLConfig conunused) { GLES20.glClearColor(1.0f,1.0f,1.0f,1.0f); GLES20.glDisable(GLES20.GL_CULL_FACE); //No culling of back faces \\ To nevem al je treba da je uklopljeno al ne GLES20.glDisable(GLES20.GL_DEPTH_TEST); //No depth testing \\ --||-- GLES20.glEnable(GLES20.GL_BLEND); //Blending GLES20.glBlendFunc(GLES20.GL_SRC_ALPHA,GLES20.GL_ONE_MINUS_SRC_ALPHA); //Interpolated blending generator = new LevelGenerator(); } @Override public void onDrawFrame(GL10 unused) { GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT); moveView(); Matrix.setLookAtM(mVMatrix, 0, viewY, viewX, -10, viewY, viewX, 0, 0.0f, 1.0f, 0.0f); //set view Matrix.multiplyMM(mMVPMatrix, 0, mProjectionMatrix, 0, mVMatrix, 0); //calculate view transformation generator.draw(mMVPMatrix); } @Override public void onSurfaceChanged(GL10 unused, int width, int height) { GLES20.glViewport(0, 0, width, height); float ratio = (float) width/height; float left =-ratio; float right = ratio; float bottom = -1.0f; float top = 1.0f; float near = 1.0f; float far = 20.0f; Log.d("ratio","ratio: "+left+" r: "+right+" w: "+width+" h: "+height); Matrix.frustumM(mProjectionMatrix, 0, left, right, bottom, top, near, far); } long lastTime = System.currentTimeMillis(); public void moveView(){ if((System.currentTimeMillis()-lastTime) &gt;= 33){ lastTime = System.currentTimeMillis(); Log.d("viewX","viewX: "+viewX + "viewY:"+viewY); if( (viewX - angleX/10) &lt; Level1.viewXP &amp;&amp; (viewX - angleX/10) &gt; Level1.viewXM) viewX -= angleX/10; if( (viewY - angleY/10) &lt; Level1.viewYP &amp;&amp; (viewY - angleY/10) &gt; Level1.viewYM) viewY -= angleY/10; //if(Math.abs(viewX - angleX/10) &lt; 10) viewX-=angleX/10; //if(Math.abs(viewY - angleY/10) &lt; 10) viewY-=angleY/10; //if(Math.abs(viewZ - (angleZ-5)/10) &lt; 10) viewZ+=(angleZ-5)/10; } } } </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload