Impact 主题(三):使用资源

图像和声音文件所在路径
加载图像或声音文件时,这个文件的路径总是相对于游戏运行的 .html 文件的。换句话说,你的 .js 文件的位置是无关紧要的。

这样,让我们假设有以下的目录结构,你的 game.js 由 game.html 加载:Kilofox.Net
  1. /mygame/game.html
  2. /mygame/lib/game.js
  3. /mygame/media/some-image.png
  4. /mygame/media/some-sound.ogg
  5. /mygame/media/some-sound.mp3
复制代码

现在,您想要在 game.js 文件中加载 some-image.png,需要像下面这样做:Kilofox.Net
  1. // 文件 game.html 位于 /mygame/,这就意味着所有的资源引用都是相对于 /mygame/ 的
  2. var someImage = new ig.Image( 'media/some-image.png' );

  3. // 声音也完全一样
  4. var someSound = new ig.Sound( 'media/some-sound.*' );

  5. // AnimationSheets 也是
  6. var someAnimSheet = new ig.AnimationSheet( 'media/some-image.png', 8, 8 );
复制代码

路径 “media/some-sound.*“ 实际上是有效的。Impact 将根据浏览器的能力来加载相应的声音文件(MP3 或 Ogg 格式)。见 ig.Sound

使用预加载器
你的游戏所需要的所有声音和图像文件,都应该通过”预加载器“来载入,以便在需要时使它们真正可用。Kilofox.Net

在一个尚未加载的图像上调用 draw() 方法,它不会做任何事情。试图播放一个尚未加载的声音文件,会导致严重的滞后。

在加载期间创建的所有 ig.Image、ig.Font、ig.AnimationSheet 和 ig.Sound 实例都将被追加到 Preloader 的资源链。只有在运行时创建的图像和声音,才不会由 Preloader 载入。
  1. MyGame = ig.Game.extend({
  2.     // 这个图像将由 preloader 载入。脚本一执行,它就被创建了。
  3.     titleImage: new ig.Image( 'media/title.png' ),
  4.     
  5.     init: function() {
  6.         // 这个图像文件不是由 preloader 载入的。
  7.         // init() 方法仅在 preloader 完成后,游戏开始时调用。
  8.         this.backgroundImage = new ig.Image( 'media/background.png' );
  9.     }
  10. });
复制代码

缓存
所有资源均自动缓存。不管多长时间需要它们,它们只加载一次。例如,如果两个实体共享同一个 AnimationSheet 图像,它不会被加载两次。因此,这是完全有效的:Kilofox.Net
  1. EntityPlayer = ig.Entity.extend({
  2.     animSheet: new ig.AnimationSheet( 'media/player.png', 16, 16 )
  3.     …
  4. });

  5. EntityPlayerGibs = ig.Entity.extend({
  6.     // 玩家 gibs 使用相同的图像文件
  7.     animSheet: new ig.AnimationSheet( 'media/player.png', 8, 8 )
  8.     …
  9. });
复制代码

您也可以用这个办法来确保背景音乐由 Preloader 加载。在加载时,你不能使用 ig.music.add() ,但是你可以使用已经加载的 ig.Sound 的实例的声音文件。Kilofox.Net
  1. MyGame = ig.Game.extend({
  2.     // 确保音乐由 preloader 加载。
  3.     // 传递 'false' 作为第二个参数,以防止这个声音为多声道。
  4.     bgtune: new ig.Sound( 'media/background-tune.*', false ),
  5.     
  6.     init: function() {
  7.         // 现在把文件添加到播放列表
  8.         ig.music.add( this.bgtune );
  9.         
  10.         // 您也可以再次指定路径:
  11.         // ig.music.add( 'media/background-tune.*' );
  12.         
  13.         // 准备播放!
  14.         ig.music.play();
  15.     }
  16. });
复制代码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值