0
我正在为我的大学项目制作一个2D游戏,而我在这一点上被卡住了。基本上是 。我有一个背景,我想从右向左移动(按住手机按钮)。问题是,无论我尝试它从上到下。我在OpenGL中创建引擎,并且拥有保存三角纹理坐标的类。不知何故,我强迫背景倒退,但我无法改变方向。 这里是源代码(scrollBackground方法):Android - 移动我的游戏背景horizontaly(OpenGL)
package com.example.spaceimpact_remake;
import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;
import android.opengl.GLSurfaceView.Renderer;
public class GameRenderer implements Renderer{
private Background background = new Background();
private Background background2 = new Background();
private float bgScroll1;
private float bgScroll2;
@Override
public void onDrawFrame(GL10 gl) {
try{
Thread.sleep(SFEngine.GAME_THREAD_FPS_SLEEP);
} catch (InterruptedException e){
e.printStackTrace();
}
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
scrollBackground1(gl);
scrollBackground2(gl);
gl.glEnable(GL10.GL_BLEND);
gl.glBlendFunc(GL10.GL_ONE, GL10.GL_ONE);
}
private void scrollBackground1(GL10 gl){
if (bgScroll1 == Float.MAX_VALUE){
bgScroll1 = 0f;
}
gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glLoadIdentity();
gl.glPushMatrix();
gl.glScalef(1f, 1f, 1f);
gl.glTranslatef(0f, 0f, 0f);
gl.glMatrixMode(GL10.GL_TEXTURE);
gl.glLoadIdentity();
gl.glTranslatef(0.0f, bgScroll1, -0.0f); //przewijanie tekstury
background.draw(gl);
gl.glPopMatrix();
bgScroll1 += SFEngine.SCROLL_BACKGROUND_1;
gl.glLoadIdentity();
}
private void scrollBackground2(GL10 gl){
if (bgScroll1 == Float.MAX_VALUE){
bgScroll1 = 0f;
}
gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glLoadIdentity();
gl.glPushMatrix();
gl.glScalef(1f, 1f, 1f);
gl.glTranslatef(0f, 0f, 0f);
gl.glMatrixMode(GL10.GL_TEXTURE);
gl.glLoadIdentity();
gl.glTranslatef(0.0f, bgScroll2, 0.0f);
background2.draw(gl);
gl.glPopMatrix();
bgScroll2 += SFEngine.SCROLL_BACKGROUND_2;
gl.glLoadIdentity();
}
@Override
public void onSurfaceChanged(GL10 gl, int width, int height) {
gl.glViewport(0, 0, width, height);
gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glLoadIdentity();
gl.glOrthof(0f, 1f, 0f, 1f, -1f, 1f);
}
@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
//włączenie w OpenGL mapowania tekstur 2D
gl.glEnable(GL10.GL_TEXTURE_2D);
gl.glClearDepthf(1.0f);
gl.glEnable(GL10.GL_DEPTH_TEST);
gl.glDepthFunc(GL10.GL_LEQUAL);
//przeźroczystość
gl.glEnable(GL10.GL_BLEND);
gl.glBlendFunc(GL10.GL_ONE, GL10.GL_ONE);
background.loadTexture(gl, SFEngine.BACKGROUND_LAYER_ONE, SFEngine.context);
background2.loadTexture(gl, SFEngine.BACKGROUND_LAYER_TWO, SFEngine.context);
}
}
谢谢。它是这样工作的: (bgScroll1,0.0f,0.0f); =(x,y,z); bgScroll放置在第一个变量上将滚动X轴,第二个var - > Y轴。等等。 – user3213145