Phaser教程翻译-制作一个幸运大转轮

原帖地址:Create a wheel of fortune for your HTML5 games with Phaser in only a few lines

文件列表:

index.html的内容:只是引入了js文件,设置了一下背景颜色。其他什么都没有

<!DOCTYPE html>
<html>
    <head>
    <style type="text/css">
        body{
            background: #000000;
            padding:0px;
            margin:0px;
        }
    </style>
    <script src="phaser.min.js"></script>
     <script src = "game.js"></script>
    </head>
    <body>
    </body>
</html>

用到的两张图片:

最终效果图:

正文:
你想在游戏中给你的玩家一个随机奖品,幸运大转轮正是你需要的。

我正在玩的游戏中有一个游戏叫 Down The Mountain,里面有一个幸运大转轮,每六个小时可以转一次,就可以获得奖品。

这就是我做的,用了一样的图片,希望Umbrella Games的人不要介意。

点击大转轮的任何位置开始旋转,然后就可以看到得到了什么奖励。
下面是加了注释的源码,有几行用了tweens和easing。

// game对象
var game;
// 大转轮
var wheel; 
// 是否可以旋转转轮
var canSpin;
// 转轮分的份数,一共八份
var slices = 8;
// 一个数组,里面保存了每一份对应的奖励
var slicePrizes = ["A KEY!!!", "50 STARS", "500 STARS", "BAD LUCK!!!", "200 STARS", "100 STARS", "150 STARS", "BAD LUCK!!!"];
// 最后得到的奖励
var prize;
// 显示奖励的文本
var prizeText;

window.onload = function() {    
     // 458x488大小的游戏对象
    game = new Phaser.Game(458, 488, Phaser.AUTO, "");
     // 添加"PlayGame"状态 
     game.state.add("PlayGame",playGame);
     // 进入"PlayGame" 状态
     game.state.start("PlayGame");
}

// 游戏场景

var playGame = function(game){};

playGame.prototype = {
     // 预加载函数,只执行一次
     preload: function(){
          // 预加载两张图片
          game.load.image("wheel", "wheel.png");
          game.load.image("pin", "pin.png");     
     },
     // 创建这个场景的函数
    create: function(){
          // 给游戏设定一个背景颜色
        game.stage.backgroundColor = "#880044";
          // 把转轮添加到中间位置
        wheel = game.add.sprite(game.width / 2, game.width / 2, "wheel");
          // 设置转轮的锚点
          wheel.anchor.set(0.5);
          // 把指针添加到中间位置
          var pin = game.add.sprite(game.width / 2, game.width / 2, "pin");
          // 把锚点设置在中间位置
          pin.anchor.set(0.5);
          // 添加一个文本,来显示奖励结果
          prizeText = game.add.text(game.world.centerX, 480, "");
          // 把锚点设置在中间位置
          prizeText.anchor.set(0.5);
          // 设置文本居中对齐
          prizeText.align = "center";
          // 在游戏刚开始时,我们可以旋转转轮
          canSpin = true;
          // 添加鼠标点击事件,调用spin函数
          game.input.onDown.add(this.spin, this);       
    },
     //调用spin函数开始旋转
     spin:function(){
          //先判断当前状态是否可以旋转
          if(canSpin){  
               // 重置显示奖励结果的文本
               prizeText.text = "";
               // 随机得到一个旋转的整圈数
               var rounds = game.rnd.between(2, 4);
               // 随机得到一个旋转的角度
               var degrees = game.rnd.between(0, 360);
               // 在旋转结束之前,我们就可以算出获得的是哪个奖励
               prize = slices - 1 - Math.floor(degrees / (360 / slices));
               // 开始旋转,把canSpin设置为false,旋转过程中不能再转了
               canSpin = false;
               // 开始一个缓动动画,转到360 * rounds + degrees这个角度
               // 用quadratic easing来模拟摩擦力,转动慢慢变慢
               var spinTween = game.add.tween(wheel).to({
                    angle: 360 * rounds + degrees
               }, 3000, Phaser.Easing.Quadratic.Out, true);
               // 缓动动画结束后,调用winPrize函数
               spinTween.onComplete.add(this.winPrize, this);
          }
     },
     // 显示奖励结果的函数
     winPrize:function(){
          // 现在可以再次旋转转轮
          canSpin = true;
          // 用文本来显示奖励结果
          prizeText.text = slicePrizes[prize];
     }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值