《Beginning Android(安卓)Games》Chapter3给出的基本框架
16lz
2021-01-26
一个游戏的基础框架大致分为这几个部分:
1 Window management
2 Input
3 File I/O
4 Graphics
5 Audio
6 Game framework
之后书中给出了具体每一部分接口的定义,如下:
Input接口
public interface Input {public static class KeyEvent{public static final int KEY_DOWN=0;public static final int KEY_UP=1;public int type;public int keyCode;public char keyChar;}public static class TouchEvent{public static final int TOUCH_DOWN=0;public static final int TOUCH_UP=1;public static final int TOUCH_DRAGGED=2;public int type;public int x,y;public int pointer;}public boolean isKeyPressed(int keyCode);public boolean isTouchDown(int pointer);public int getTouchX(int pointer);public int getTouchY(int pointer);public float getAccelX();public float getAccelY();public float getAccelZ();public List<KeyEvent> getKeyEvents();public List<TouchEvent> getTouchEvents();}
FileIO接口
public interface FileIO {public InputStream readAsset(String fileName) throws IOException;public InputStream readFile(String fileName) throws IOException;public OutputStream writeFile(String fileName) throws IOException;}
Audio接口 其中还包含了Music和Sound的接口定义
public interface Audio {public Music newMusic(String filename);public Sound newSound(String filename);}
public interface Music {public void play();public void stop();public void pause();public void setLooping(boolean looping);public void setVolume(float volume);public boolean isPlaying();public boolean isStopped();public boolean isLooping();public void dispose();}
public interface Sound {public void play(float volume);public void dispose();}
Graphics接口的定义 包括Pixmap
public interface Graphics {public static enum PixmapFormat {ARGB8888, ARGB84444, RGB565}public Pixmap newPixmap(String fileName, PixmapFormat format);public void clear(int color);public void drawPixel(int x, int y, int color);public void drawLine(int x, int y, int x2, int y2, int color);public void drawRect(int x, int y, int width, int height, int color);public void drawPixmap(Pixmap pixmap, int x, int y, int srcX, int srcY,int srcWidth, int srcHeight);public void drawPixmap(Pixmap pixmap,int x,int y);public int getWidth();public int getHeight();}
public interface Pixmap {public int getWidth();public PixmapFormat getFormat();public void dispose();}
最后是Game接口的定义 以及抽象类Screen
public interface Game {public Input getInput();public FileIO getFileIO();public Graphics getGraphics();public Audio getAudio();public void setScreen(Screen screen);public Screen getCurrentScreen();public Screen getStartScreen();}
public abstract class Screen {protected final Game game;public Screen(Game game){this.game=game;}//更新状态public abstract void update(float deltaTime);//刷新画面public abstract void present(float deltaTime);public abstract void pause();public abstract void resume();public abstract void dispose();}
以上就基本实现了最简单的框架 觉得还是比较清晰的 所以照搬记录一下
最后Chapter3还提到了Frame Rate–Independent Movement 也就是固定帧数的问题
例如若每次循环移动1个像素点 在60FPS的情况下 1秒就移动了60个像素 而30FPS则移动了30个像素 这样移动的速度相当于提升了2倍 作者给出的解决方案是根据deltaTime 计算应该移动的实际距离 也就是从x+=1 改成x+=30*deltaTime 30是希望的每秒移动像素值
————————————题外话——————————
再想到之前看到的一个介绍 游戏基本是一个循环 : 更新状态——重新绘制——休眠——更新状态
而其中的休眠时间并不是一个固定值 而是动态计算的 休眠长度=理想值-处理用去的时间 其实也跟上面的思路类似
更多相关文章
- android中的mvp模式(二)
- android RecyclerView响应点击事件
- Android(安卓)IPC之Binder连接池BinderPool
- Android(安卓)中dp 和px 转换及原理分析
- Android(安卓)Netd ndc
- binder 实例分析
- Android(安卓)dip, dp, px, sp区别
- android中的dp,px深度解析
- 【Android高级工程师】Android项目开发如何设计整体架构?