游戏开发之--真枪实战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的几个绘制函数就可以直接实用了。甚至能很快的换成opgl es的方式。因为游戏只向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 ?[复制]