android游戏开发自学笔记3-3
来源:互联网 发布:python 自定义迭代器 编辑:程序博客网 时间:2024/06/06 07:49
游戏的代码的确多,再开一页吧。等代码写好了。再给每段代码写清楚来龙去脉,设计思路吧。现在是根据书上所说,调试代码阶段。嘿嘿。
package com.gamestudy.mrnom.framework.impl;import android.graphics.Bitmap;import com.gamestudy.mrnom.framework.Graphics.PixmapFormat;import com.gamestudy.mrnom.framework.Pixmap;public class AndroidPixmap implements Pixmap {Bitmap bitmap;PixmapFormat format;public AndroidPixmap(Bitmap bitmap, PixmapFormat format) {this.bitmap = bitmap;this.format = format;}@Overridepublic int getWidth() {return bitmap.getWidth();}@Overridepublic int getHeight() {return bitmap.getHeight();}@Overridepublic PixmapFormat getFormat() {return format;}@Overridepublic void dispose() {bitmap.recycle();}}
package com.gamestudy.mrnom.framework.impl;import java.io.IOException;import java.io.InputStream;import android.content.res.AssetManager;import android.graphics.Bitmap;import android.graphics.Bitmap.Config;import android.graphics.BitmapFactory;import android.graphics.BitmapFactory.Options;import android.graphics.Canvas;import android.graphics.Paint;import android.graphics.Paint.Style;import android.graphics.Rect;import com.gamestudy.mrnom.framework.Graphics;import com.gamestudy.mrnom.framework.Pixmap;public class AndroidGraphics implements Graphics {AssetManager assets;Bitmap frameBuffer;Canvas canvas;Paint paint;Rect srcRect = new Rect();Rect dstRect = new Rect();public AndroidGraphics(AssetManager assets, Bitmap frameBuffer) {this.assets = assets;this.frameBuffer = frameBuffer;this.canvas = new Canvas(frameBuffer);this.paint = new Paint();}@Overridepublic Pixmap newPixmap(String fileName, PixmapFormat format) {Config config = null;if (format == PixmapFormat.RGB565)config = Config.RGB_565;else if (format == PixmapFormat.ARGB4444)config = Config.ARGB_4444;elseconfig = Config.ARGB_8888;Options options = new Options();options.inPreferredConfig = config;InputStream in = null;Bitmap bitmap = null;try {in = assets.open(fileName);bitmap = BitmapFactory.decodeStream(in);if (bitmap == null)throw new RuntimeException("Couldn't load bitmap from asset '"+ fileName + "'");} catch (IOException e) {throw new RuntimeException("Couldn't load bitmap from asset '"+ fileName + "'");} finally {if (in != null) {try {in.close();} catch (IOException e) {}}}if (bitmap.getConfig() == Config.RGB_565)format = PixmapFormat.RGB565;else if (bitmap.getConfig() == Config.ARGB_4444)format = PixmapFormat.ARGB4444;elseformat = PixmapFormat.ARGB8888;return new AndroidPixmap(bitmap, format);}@Overridepublic void clear(int color) {canvas.drawRGB((color & 0xff0000) >> 16, (color & 0xff00) >> 8,(color & 0xff));}@Overridepublic void drawPixel(int x, int y, int color) {paint.setColor(color);canvas.drawPoint(x, y, paint);}@Overridepublic void drawLine(int x, int y, int x2, int y2, int color) {paint.setColor(color);canvas.drawLine(x, y, x2, y2, paint);}@Overridepublic void drawRect(int x, int y, int width, int height, int color) {paint.setColor(color);paint.setStyle(Style.FILL);canvas.drawRect(x, y, x + width - 1, y + width - 1, paint);}@Overridepublic void drawPixmap(Pixmap pixmap, int x, int y, int srcX, int srcY,int srcWidth, int srcHeight) {srcRect.left = srcX;srcRect.top = srcY;srcRect.right = srcX + srcWidth - 1;srcRect.bottom = srcY + srcHeight - 1;dstRect.left = x;dstRect.top = y;dstRect.right = x + srcWidth - 1;dstRect.bottom = y + srcHeight - 1;canvas.drawBitmap(((AndroidPixmap) pixmap).bitmap, srcRect, dstRect,null);}@Overridepublic void drawPixmap(Pixmap pixmap, int x, int y) {canvas.drawBitmap(((AndroidPixmap)pixmap).bitmap, x, y, null);}@Overridepublic int getWidth() {return frameBuffer.getWidth();}@Overridepublic int getHeight() {return frameBuffer.getHeight();}}
package com.gamestudy.mrnom.framework.impl;import android.app.Activity;import android.content.Context;import android.content.res.Configuration;import android.graphics.Bitmap;import android.graphics.Bitmap.Config;import android.os.Bundle;import android.os.PowerManager;import android.os.PowerManager.WakeLock;import android.view.Window;import android.view.WindowManager;import com.gamestudy.mrnom.framework.Audio;import com.gamestudy.mrnom.framework.FileIO;import com.gamestudy.mrnom.framework.Game;import com.gamestudy.mrnom.framework.Graphics;import com.gamestudy.mrnom.framework.Input;import com.gamestudy.mrnom.framework.Screen;public abstract class AndroidGame extends Activity implements Game {AndroidFastRenderView renderView;Graphics graphics;Audio audio;Input input;FileIO fileIO;Screen screen;WakeLock wakeLock;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);requestWindowFeature(Window.FEATURE_NO_TITLE);getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);boolean isLandscape = getResources().getConfiguration().orientation ==Configuration.ORIENTATION_LANDSCAPE;int frameBufferWidth = isLandscape ? 480 : 320;int frameBufferHeight = isLandscape ? 320 : 480;Bitmap frameBuffer = Bitmap.createBitmap(frameBufferWidth,frameBufferHeight, Config.RGB_565);float scaleX = (float) frameBufferWidth/ getWindowManager().getDefaultDisplay().getWidth();float scaleY = (float) frameBufferHeight/ getWindowManager().getDefaultDisplay().getHeight();renderView = new AndroidFastRenderView(this, frameBuffer);graphics = new AndroidGraphics(getAssets(), frameBuffer);fileIO = new AndroidFileIO(getAssets());audio = new AndroidAudio(this);input = new AndroidInput(this, renderView, scaleX, scaleY);screen = getStartScreen();setContentView(renderView);PowerManager powerManager = (PowerManager)getSystemService(Context.POWER_SERVICE);wakeLock = powerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK, "GLGame");}@Overridepublic void onResume() {super.onResume();wakeLock.acquire();screen.resume();renderView.resume();}@Overridepublic void onPause() {super.onPause();wakeLock.release();renderView.pause();screen.pause();if (isFinishing())screen.dispose();}@Overridepublic Input getInput() {return input;}@Overridepublic FileIO getFileIO() {return fileIO;}@Overridepublic Graphics getGraphics() {return graphics;}@Overridepublic Audio getAudio() {return audio;}@Overridepublic void setScreen(Screen screen) {if (screen == null)throw new IllegalArgumentException("Screen must not be null");this.screen.pause();this.screen.dispose();screen.resume();screen.update(0);this.screen = screen;}public Screen getCurrentScreen() {return screen;}}
package com.gamestudy.mrnom.framework.impl;import android.graphics.Bitmap;import android.graphics.Canvas;import android.graphics.Rect;import android.view.SurfaceHolder;import android.view.SurfaceView;public class AndroidFastRenderView extends SurfaceView implements Runnable {AndroidGame game;Bitmap framebuffer;Thread renderThread = null;SurfaceHolder holder;volatile boolean running = false;public AndroidFastRenderView(AndroidGame game, Bitmap framebuffer) {super(game);this.game = game;this.framebuffer = framebuffer;this.holder = getHolder();}public void resume() {running = true;renderThread = new Thread(this);renderThread.start();}public void run() {Rect dstRect = new Rect();long startTime = System.nanoTime();while(running) {if(!holder.getSurface().isValid())continue;float deltaTime = (System.nanoTime()-startTime) / 1000000000.0f;startTime = System.nanoTime();game.getCurrentScreen().update(deltaTime);game.getCurrentScreen().present(deltaTime);Canvas canvas = holder.lockCanvas();canvas.getClipBounds(dstRect);canvas.drawBitmap(framebuffer, null, dstRect, null);holder.unlockCanvasAndPost(canvas);}}public void pause() {running = false;while(true) {try {renderThread.join();break;} catch (InterruptedException e) {// retry}}}}
- android游戏开发自学笔记3-3
- android游戏开发自学笔记3-2
- android游戏开发自学笔记3 接口impl设计
- android游戏开发自学笔记2 基础知识
- android游戏开发自学笔记1 接口设计
- android游戏开发自学笔记4 Activity相关
- android游戏开发自学笔记5 Activity相关
- android游戏开发自学笔记6 运行mr.nom
- Android自学笔记(3)
- 自学Unity3D游戏开发(3)刚体和碰撞
- Android自学笔记-3-ADB的常用命令
- 如何自学3d游戏
- Blender自学笔记 3
- python自学笔记 3
- c++自学笔记3
- python自学笔记3
- android自学总结3
- Android自学笔记[1]---Android开发中常用的命令
- DOS/Windows和Linux/Unix间文件格式和字符集转换
- 博客的开端,希望是个好的开始
- VC++2012编程演练数据结构《12》二叉排序树
- 《Android应用性能优化》试读:第一章:Java代码优化
- 封装 ASIHTTPRequest 多请求管理类
- android游戏开发自学笔记3-3
- SimpleTagSupport类的生命周期及用BodyTagSupport类开发自定义标签
- omnetpp debug功能
- 缓存实例
- UILabel的text顶部或底部显示
- 算法导论——合并排序
- openCV实现卡通画的效果
- 软件应用无所不在 正吞噬整个世界
- hadoop 常出错问题