好的,這裏是代碼。我想要它做什麼翻譯屏幕跟隨對象l2rArrow。它的確如此,但l2rArrow仍然飛過了屏幕。即使我將翻譯設置爲l2rArrow的x,y,當它應該保持死點時,l2rArrow仍然最終會從屏幕上移開。OPENGL ES glTranslatef問題
當我將camX乘以25時,它似乎跟隨它略微更好,但只是略微。箭頭仍然飛離屏幕。
public void Render(GL10 gl, float deltaTime) {
//Log.d("Game", "Render");
gl.glViewport(0, 0, Screen.SCREEN_WIDTH, Screen.SCREEN_HEIGHT);
gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glLoadIdentity();
gl.glOrthof(0, Screen.WIDTH_SCALE, 0, Screen.HEIGHT_SCALE, 1, -1);
gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glLoadIdentity();
gl.glEnable(GL10.GL_BLEND);
gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);
gl.glEnable(GL10.GL_TEXTURE_2D);
MeshRect mRect; // this holds all of our rectangles
// draw the sky/backdrop************************************************************
texture.bind(gl, Texture.TEXTURE_SKY1);
mRect = new MeshRect(Sky.getMyRect());
mRect.Draw(GL10.GL_TRIANGLES, gl);
//draw clouds***********************************************************************
clouds.Update();
Vector<Cloud> vClouds = clouds.getClouds();
for (int i = 0; i < vClouds.size(); i++){
vClouds.get(i).Update(deltaTime);
texture.bind(gl, Texture.TEXTURE_CLOUDS1);
mRect = new MeshRect(vClouds.get(i).getMyRect());
mRect.Draw(GL10.GL_TRIANGLES, gl);
if (vClouds.get(i).hasRunCourse()){
clouds.RemoveCloud(vClouds.get(i).getID());
}
}
// draw arrows and applied power ups***********************************************************************
boolean hasTranslated = false;
if (!l2rArrow.isFired) {
gl.glPushMatrix(); //save our state
gl.glTranslatef(l2rArrow.GetToOriginX, l2rArrow.GetToOriginY, 0f); // translate to origin 0,0,0
gl.glRotatef(LBow.getAngle(), 0f, 0f, 1f); //rotate
gl.glTranslatef(-l2rArrow.GetToOriginX, -l2rArrow.GetToOriginY, 0f); // translate to where we want to draw it
texture.bind(gl, Texture.TEXTURE_L2RARROW);
mRect = new MeshRect(l2rArrow.getMyRect());
mRect.Draw(GL10.GL_TRIANGLES, gl);
gl.glPopMatrix(); //return to saved state
} else {
l2rArrow.Update(deltaTime);
texture.bind(gl, Texture.TEXTURE_L2RARROW);
mRect = new MeshRect(l2rArrow.getMyRect());
mRect.Draw(GL10.GL_TRIANGLES, gl);
hasTranslated = true;
gl.glPushMatrix();
float camX = (float) ((l2rArrow.startX - l2rArrow.PosX));
camX = camX * 25;
float camY = (float) ((l2rArrow.startY - l2rArrow.PosY));
if (camY > 0) { camY = 0;}
gl.glTranslatef(camX, camY,0f);
if (l2rArrow.hasCollided) {
//run collision code for detecting a hit and ending turn
}
}
/**=======================================================================================================
* Everything between here should be effected by translate | | gl.gltranslatef(x,y,z) x = Xoffset
*=======================================================================================================*/
/**=======================================================================================================
* gl.glPopMatrix(); back to origin
*=======================================================================================================*/
if (hasTranslated){
gl.glPopMatrix();
}
//finish drawing other non translated
}
OK,所以我要來結束它有一些東西需要與那些需要的,正要研究更進了。兩者有什麼區別?爲什麼我應該打電話給另一個呢? – WIllJBD 2012-08-05 04:49:35
我建議你閱讀下面的內容:http://www.songho.ca/opengl/gl_transform.html – 2012-08-05 04:54:09
好吧,我閱讀它,我試圖看看這是否是我的問題,它似乎不是。我更新了問題和代碼。 – WIllJBD 2012-08-05 05:40:47