跟我来玩IGFrame(三) GSprite精灵类

 各位转载请注明出处,谢谢合作~作者:ioozhuangzi

在说精灵之前,首先先要说明以下JavaGraphics类,因为整个图形绘制过程都是使用它来完成的。由于Graphics封装的很好很强大,个人觉得再封装一层在0.2版本意义不大,为兼容安卓,下个版本会以Graphics为基准进行封装,所以还请各位多多了解此类。

Graphics类是所有图形上下文的抽象基类,在使用是由系统(JVM)提供一个实例,我们就可以在目标上绘制图形了。简单来说我们可以把它想像为“画笔”,它提供了一些基本的图形绘制方法,比如

public abstract void drawLine(int x1, int y1, int x2, int y2)//绘制直线

public void drawRect(int x, int y, int width, int height)//绘制矩形

还有绘制椭圆(圆形)、圆角矩形、填充图形、任意多边形、字符串和图片等等,详细的请去看看JDK文档。

看过第一章应该会发现在GModel里的onRender()中提供了Graphics的实例,不过是Graphics2D

public void onRender(Graphics2D g2d)//渲染帧

Graphics2DJDK1.1之后加入的Graphics扩展类,加入了如图形转换、组合以及新的图形绘制功能。为了保证兼容性,很多类中保留了Graphics,但实际系统传递的实例还是Graphics2D,为了使用方便,IGFrame直接使用了Graphics2D。其它相关Graphics详情请参考JDK文档。

 

下面进入正题来说org.ioo.igframe.sprite.GSprite,精灵类

首先说说什么是精灵(Sprite),这个,我说我也不知道您能接受吗?呵呵,现在假定您玩过游戏,那么你在画面中看到的一切都可以称之为精灵,比如人物、背景、道具等等。他们都拥有各自的属性(位置、宽高等等)以及呈现的图片资源。IGFrame中的Gsprite就是封装了他们通用属性的类,我们可以直接使用它,也可以在此基础上派生出其它的类。

直接使用GSprite的例子请看示例代码,就不贴出代码了。

代码:\src\org\ioo\igframe\samples\sample03.SpriteTest

Tip:其实您只要仔细看过每个示例,基本就能完全了解IGFrame的几乎所有的用法了)

 

代码中使用了public GSprite(String filePath)构造方法,filePath是图片所在的路径,图片支持类型为jpg/gif/png,这里推荐使用png

其实Gsprite还有其它的构造方法:

public GSprite()//什么都没干,不推荐使用默认构造,自己初始化太麻烦

public GSprite(BufferedImage image)//使用一个BufferedImage来构造

public GSprite(GSprite sprite)//使用已存在的精灵来构造

第一种构造方法一般会用在共享图片资源构造时,比如我们要创建一组精灵,它们的图片资源是相同,如果反复加载会浪费内存,所以我们可以用同一个BufferedImage引用来构造精灵。(关于BufferedImage类的相关内容请参考JDK文档,在这里认为它是一个图片对象即可)

第二种构造方法相当于完全复制了一个精灵,当然图片也是指向了同一个引用。

 

对于图片来说都是矩形的,您应该知道吧,虽然有些图片看起来不是矩形的,那是因为周围是透明的,但还是确实存在的。如果您不想承认这个也请您承认先。来看GSprite其它的方法:

//加载图片,如果你使用Gsprite()来构造或者想构造之后更改图片时使用该方法

 

public void loadImage(String filePath)//参数和构造方法相同

public void loadImage(BufferedImage image)//重载的方法

 

//获取/设置精灵所在的横纵坐标,精灵图片的左上角所在坐标值

//图片是矩形的,应该已经得到您的认可(或者已强行认可o(_)o…

public int getX() / public void setX(int x)

public int getY() / public void setY(int y)

//精灵图片的宽高,再次请您认可图片是矩形的

public int getWidth() / public void setWidth(int width)

public int getHeight() / public void setHeight(int height)

//获取精灵图片的中心点坐标

public int getCenterX() / public void setCenterX(int centerX)

public int getCenterY() / public void setCenterY(int centerY)

 

public void setVisible(boolean visible)//设置精灵是否可见

public void setFilpRender(boolean filpRender)//设置左右对称翻转显示

//相对于某个矩形居中,比如给定窗口的(0,0,WIDTH,HEIGHT)矩形,那么精灵会移动到居中

public void center(Rectangle rect)//Rectangle是矩形对象,详见JDK文档

public void center(int x, int y, int width, int height)//矩形的左上角坐标和宽高

//这个方法是用来做矩形碰撞检测的,判断两个精灵矩形是否交叉

public boolean collisionWith(GSprite sprite)

 

//更新渲染帧

public void render(Graphics2D g2d)//默认的精灵渲染方法,一般在onRender方法里调用

//更新精灵帧

public void update()//默认什么都不做,主要用来重写的,一般在onUpdate方法里调用

 

说到这还要说一下IGFrameorg.ioo.igframe.sprite.SpriteManager这个类,用于托管精灵。

使用可以参考示例代码

代码:org.ioo.igframe.samples.ninja.NinjaTest

main方法的有这句

gFrame.autoRender(true);//自动渲染

onLoad方法中的这句代码添加了需要管理的精灵

SpriteManager.add(bg, wt , ninja, j5, j4);//可添加多个精灵,根据添加顺序显示

在游戏循环中就会在每一帧自动调用精灵的updaterender方法,这样做我们就不需要在onRenderonUpdate方法中手工调用精灵的renderupdate方法了。

当然SpriteManager也可以托管精灵输入事件,但需要重写精灵的onMouseProconKeyProc方法来处理鼠标和键盘事件,默认Gsprite的方法是什么也不做。

 

关于Gsprite类容我先写到这,还有一些方法和特性可以关注我以后的教程。您也可以瞧瞧我提供的示例代码,可以发现更多IGFrame的使用方法。

本人文笔水平实在有限,看的不明白的地方还请您留言提问或者加Q群210816248~验证:IGFrame
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值