2014-01-19 2 views
0

대학 프로젝트 용 2D 게임을 만들고 있는데,이 시점에서 고민 중입니다. 기본적으로. 오른쪽에서 왼쪽으로 이동하려는 배경이 있습니다 (전화 가로 채기). 문제는, 내가 시도해도간에 그것은 위로부터 아래로가는 것이다. 저는 OpenGL에서 엔진을 만들고 있어요. 그리고 저는 텍스처의 삼각형에 대한 좌표를 가지고있는 클래스를 가지고 있습니다. 배경을 어떻게 든 뒤쪽으로 향하게 만들었지 만 오리엔테이션을 바꿀 수는 없습니다. 여기 소스 코드 (scrollBackground 방법)입니다 :Android - 내 게임의 배경을 수평으로 옮기기 (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); 
    } 

} 

답변

0

귀하의 문제가 여기에있을 것 같다; glTranslatef (X, Y, Z); Y 구성 요소를 수정합니다. bgScroll1을 X 위치로 이동해보십시오.

gl.glTranslatef(bgScroll1, 0.0f, 0.0f); //przewijanie tekstury 
+0

고맙습니다. 그것은 다음과 같이 동작합니다 : (bgScroll1, 0.0f, 0.0f); = (x, y, z); 첫 번째 변수에 배치 된 bgScroll은 X 축, 두 번째 var -> Y 축을 스크롤합니다. 기타. – user3213145

관련 문제