游戏开发之--真枪实战9--graphics抽取

 

.graphics抽取

通过前的介绍应该对游戏的总体结构有所了解了。这里再多说点:

就是绘制的时候需要Canvas和Paint。这样传递函数不方便也是的绘制的方式复杂化。不利于为何和使用引擎。

这个时候我们可以将绘制的具体操作抽象出来。用一个单独的对象来管理。如下:

复制代码import android.content.Context;

import android.graphics.Bitmap;

import android.graphics.Canvas;

import android.graphics.Paint;

import android.graphics.Rect;

import android.graphics.RectF;

import android.graphics.drawable.BitmapDrawable;

public class GameGraphics {

//使用单件

private final static GameGraphics instance = new GameGraphics();

private GameGraphics(){}

private Canvas m_canvas = null;//画布

private Paint m_paint = null;//画笔

private Context m_context = null;//context对象

public static GameGraphics Instance()

{

return instance;

}

public void setContext(Context context)

{

m_context = context;

}

//初始化

public void init(Canvas canvas,Paint paint)

{

m_canvas = canvas;

m_paint = paint;

}

public Bitmap getBitmap(int resid)

{

return ((BitmapDrawable)m_context.getResources().getDrawable(resid)).getBitmap();

}

//绘制字符串。这个时候不不再需要canvas了。因为游戏一般只会有一个canvas就够了

//m_canvas就是当先画布的引用

public void draw(String text,int x,int y,Paint paint)

{

m_canvas.drawText(text,x,y,paint);

}

public void draw(String text,int x,int y)

{

m_canvas.drawText(text,x,y,m_paint);

}

public void draw(Rect rect,int color)

{

int colortmp = m_paint.getColor();

m_paint.setColor(color);

m_canvas.drawRect(rect, m_paint);

m_paint.setColor(colortmp);

}

public void draw(RectF rect,int color)

{

int colortmp = m_paint.getColor();

m_paint.setColor(color);

m_canvas.drawRect(rect, m_paint);

m_paint.setColor(colortmp);

}

public void draw(Bitmap bitmap,int x,int y)

{

m_canvas.drawBitmap(bitmap, x, y, m_paint);

}

public void draw(Bitmap bitmap,Rect src,Rect dst)

{

m_canvas.drawBitmap(bitmap, src, dst, m_paint);

}

public void draw(Bitmap bitmap,Rect src,RectF dst)

{

m_canvas.drawBitmap(bitmap, src, dst, m_paint);

}

}

复制代码

这个时候可以将tile和menubutton的操作代替了。

这个就是有个体会。就是向GameGraphics发送挥着命令就行了。具体游戏逻辑处理需要代码。

这个GameGraphics就可以做绘制部分的引擎初步。是结构的初步。就是把某些系统相关的实用一个类型进行隔离开,。

这样无论我们实用什么引擎只要实现一线GameGraphics的几个绘制函数就可以直接实用了。甚至能很快的换成opgles的方式。因为游戏只向GameGraphics发送请求,

嘿嘿。就先到这里吧。

希望浅薄的分析对大家有点用。对游戏有个大概的认识。欢迎回帖交流。低于50字的免回。谢谢

 原文地址:http://www.cmd100.com/bbs/thread-7027-1-3.html

另外附上邀请码

http://www.cmd100.com/bbs/home.php?mod=invite&id=298&c=ylxe1m  [复制] ylxe1m  [复制]
http://www.cmd100.com/bbs/home.php?mod=invite&id=297&c=yu411u  [复制] yu411u  [复制]
http://www.cmd100.com/bbs/home.php?mod=invite&id=296&c=mol06n  [复制] mol06n  [复制]
http://www.cmd100.com/bbs/home.php?mod=invite&id=295&c=0aiiie  [复制] 0aiiie  [复制]
http://www.cmd100.com/bbs/home.php?mod=invite&id=294&c=1tyqsj  [复制] 1tyqsj  [复制]
http://www.cmd100.com/bbs/home.php?mod=invite&id=49&c=ddvesp  [复制] ddvesp  [复制]
http://www.cmd100.com/bbs/home.php?mod=invite&id=48&c=hwom35  [复制] hwom35  [复制]
http://www.cmd100.com/bbs/home.php?mod=invite&id=47&c=r9111t  [复制] r9111t  [复制]
http://www.cmd100.com/bbs/home.php?mod=invite&id=46&c=haddzg  [复制] haddzg  [复制]
http://www.cmd100.com/bbs/home.php?mod=invite&id=45&c=9du4y6  [复制] 9du4y6  [复制]

相关推荐