重生之崛起在美国极北译:管理用到的资源是任何一个游戏的重要组成部分,而我们主要关注精灵。我们希望每一个精灵只被加载一次。并且方便一群精灵出现在屏幕的中心位置。根据这种想法我们实现了一个
译:单例简单来说就是一个类只有唯一的一个可用实例对象。很多情况下我们这么做是为了将问题简化。但是有时候有更好的设计原因迫使我们限制一个类只可能被创建一个唯一的实例。
译:单例指一个类只能被创建的一个唯一的实例。静态get方法使我们可以获取该类唯一的实例。
译:第一步要做的是从硬盘上获取精灵图片。在Java中,我们通常可以使用ClassLoader来加载图片(类加载器根据类路径来加载资源,所有我们需要将图片和类一起保存在包里)。这样我们很容易将图片资源和类一起打包发布。有些同志更愿意使用直接访问文件这种可行的好办法(使用标准I/O库)。但在本文中我们坚持使用ClassLoader,因为它支持webstart。(注意,加载精灵,缓存精灵都在getSprite(Stringref)方法实现,ref为图片路径)
译:重点注意上面代码中的方法调用链是为了获得当前类的专门类加载器(就像在webstart中找到的一样)。返回的URL指向相对于类路径根目录的路径字符串参数ref指定的图片。
译:下一步要做的是加载图片。在Java中,使用实用工具类ImageIO来加载图片是非常简单的问题。我们使用下面的代码来加载图片:
译:最后,我们需要分配一些显存用于存储我们加载的图片。这样绘图时就不会占用CPU资源,我们仅仅靠显卡就可以完成绘图工作了。
补充解释:Transparency接口定义用于实现类的通用透明模式。其BITMASK常量属性表示完全不透明的图像数据(alpha值为1.0)或完全透明的图像数据(alpha值为0.0)。
译:SpriteStore的另外一个责任是缓存已经加载的图片。我们使用一个HashMap来实现缓存图片。这个map通过字符串来映射我们加载的精灵和精灵拥有的图片。当我们加载一个精灵后,我们把它这样添加到map里:
译:同样地,每当需要一个精灵时我们都检查它是否已经在这个map里了。如果存在,我们返回缓存的拷贝而不是重新加载一个新的拷贝。
|