ハエの表示と移動まで
EsGameRenderクラスにハエの表示と移動の処理を追加。
GCが走ると一瞬、移動が止まる…。LogCatを見るとGCに100msほどかかっている。
package sample.game; import javax.microedition.khronos.egl.EGLConfig; import javax.microedition.khronos.opengles.GL10; import sample.game.utils.TextureLoader; import android.content.Context; import android.opengl.GLSurfaceView; import android.util.Log; import static sample.game.utils.GraphicUtils.*; public class EsGameRender implements GLSurfaceView.Renderer { private final int one = 0x10000; private Context context; public EsGameRender(Context context){ this.context = context; } @Override public void onDrawFrame(GL10 gl10) { makeWorld(gl10); drawTextureRectangle(gl10, context, 0.0f, 0.0f, 2.0f, 3.0f, background, 0, 0, 0, one);//背景 moveTarget(); gl10.glPushMatrix(); gl10.glTranslatef(targetX, targetY, 0.0f); gl10.glRotatef(targetAngle, 0.0f, 0.0f, 1.0f); gl10.glScalef(targetSize, targetSize, 1.0f); drawTextureRectangle(gl10, context, 0.0f, 0.0f, 1.0f, 1.0f, target, 0, 0, 0, one);//標的 gl10.glPopMatrix(); } private void moveTarget() { //100回に1度の割合で方向を転換する。 if((int)(Math.random() * (100+1)) % 100 == 0 ){ //旋回角度を-2.0〜2.0の範囲で変化させる。 targetTurnAngle = (float) (Math.random() * 4.0f - 2.0f ); Log.d("EsGame", "方向転換! targetTurnAngle=" + targetTurnAngle); } targetAngle = targetAngle + targetTurnAngle; double theta = targetAngle / 180.0 * Math.PI; targetX = (float) (targetX + Math.cos(theta) * targetSpeed); targetY = (float) (targetY + Math.sin(theta) * targetSpeed); //画面外へ出たら反対の端へ移動させる if(targetX >= 2.0f){ targetX -= 4.0f; }else if(targetX <= -2.0f){ targetX += 4.0f; } if(targetY >= 2.5f){ targetY -= 5.0f; }else if(targetY <= -2.5f){ targetY += 5.0f; } } @Override public void onSurfaceChanged(GL10 gl10, int width, int height) { gl10.glViewport(0, 0, width, height); } @Override public void onSurfaceCreated(GL10 gl10, EGLConfig eglconfig) { background = TextureLoader.loadTexture(gl10, context, R.drawable.circuit);//リソース読み込み target = TextureLoader.loadTexture(gl10, context, R.drawable.fly); targetAngle = 30.0f;//初期の角度は30度 targetX = 0.5f; //右に0.5f targetY = -0.5f; //下に0.5f targetSize = 0.5f; //大きさ targetSpeed = 0.05f; //速度 targetTurnAngle = 1.0f; //旋回角度 } private int background ; private int target; private float targetAngle; private float targetX,targetY; private float targetSize; private float targetSpeed; private float targetTurnAngle; }