public class FrameMovie extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(new FrameMovieView(this));
}
}
class FrameMovieView extends SurfaceView implements Callback,Runnable{
private SurfaceHolder mSurfaceHolder;
private Thread mThread;
private Canvas mCanvas;
private boolean mFlag;
private Bitmap[] mFishBitmaps=new Bitmap[10];
private int mCurrentFrame;
private Paint mPaint;
public FrameMovieView(Context context) {
super(context);
mSurfaceHolder=this.getHolder();
mSurfaceHolder.addCallback(this);
mPaint=new Paint();
mPaint.setColor(Color.WHITE);
mPaint.setAntiAlias(true);
setFocusable(true);
for (int i = 0; i < mFishBitmaps.length; i++) {
mFishBitmaps[i]=BitmapFactory.decodeResource(getResources(), R.drawable.fish0+i);
}
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
// TODO Auto-generated method stub
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
mFlag=true;
mThread=new Thread(this,"My Thread");
mThread.start();
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
mFlag=false;
}
@Override
public void run() {
while (mFlag) {
long start=System.currentTimeMillis();
myDraw();
logic();
long end=System.currentTimeMillis();
if((end-start)<50){
try {
Thread.sleep(50-(end-start));
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
private void logic() {
mCurrentFrame++;
if(mCurrentFrame>=mFishBitmaps.length){
mCurrentFrame=0;
}
}
private void myDraw() {
mCanvas=mSurfaceHolder.lockCanvas();
if (mCanvas != null) {
mCanvas.drawColor(Color.WHITE);
mCanvas.drawBitmap(mFishBitmaps[mCurrentFrame], 0,0,mPaint);
}
mSurfaceHolder.unlockCanvasAndPost(mCanvas);
}
}

问题一:
private void logic() { mCurrentFrame++; if(mCurrentFrame>=mFishBitmaps.length){ mCurrentFrame=0; } }在刚开始写这个函数的时候将if(mCurrentFrame>=mFishBitmaps.length)写成if(mCurrentFrame>mFishBitmaps.length)导致画面播放一会之后出现java.lang.ArrayIndexOutOfBoundsException
本文深入探讨了游戏开发中的图像渲染技术与特效实现方法,包括OpenGL、ES滤镜、OpenCV图像处理等核心内容,旨在为游戏开发者提供高效、直观的视觉体验解决方案。

被折叠的 条评论
为什么被折叠?



