【问题标题】:How to make angry birds scoring type "three stars rating" in flash?如何在Flash中制作愤怒的小鸟评分类型“三颗星评级”?
【发布时间】:2015-11-18 20:03:02
【问题描述】:

我想制作一个评分系统,像愤怒的小鸟一样根据分数显示星星。

如果你得到:3 分 = 3 星,1-2 分 = 2 星,0 = 1 星

星星将是一个图像。 回答所有三个问题后,积分将保存。这些点将以星形的形式出现,如上所示。我非常需要这个。

【问题讨论】:

  • 这很……模糊。我们需要更多信息。从这些问题开始:如何得分?每个问题都得一分吗?你打算如何点亮每颗星星?星星是短片还是图像?

标签: actionscript-3 flash actionscript adobe


【解决方案1】:
  • 为一颗“亮”星和一个“暗”星创建图像;
  • 将它们的实例放在舞台上,“亮”星与“暗”星重叠,但最初被隐藏;
  • 保留一个包含对“点亮”实例图像的引用的数组,并显示一个与您的分数成正比的数字。

下面是更通用的解决方案:

public class StarsScoring extends Sprite {

    [Embed(source = "path/To/DimImage.jpg")]
    private var _dimStar: Class;

    [Embed(source = "path/To/LitImage.jpg")]
    private var _litStar: Class;

    private const GAP: uint = 10;
    private const GROUP_X: uint = 25;
    private const GROUP_Y: uint = 25;

    private var _litStars: Array = [];
    private var _numStars: uint;

    private function _buildScoringUI(): void {
        var litStar: Bitmap, dimStar: Bitmap, hOffset: Number = GROUP_X;
        for (var i: int = 0; i < _numStars; i++) {
            litStar = (new _litStar()) as Bitmap;
            dimStar = (new _dimStar()) as Bitmap;

            litStar.x = dimStar.x = hOffset;
            litStar.y = dimStar.y = GROUP_Y;
            litStar.visible = false;
            addChild(_dimStar);
            addChild(_litStar);

            _litStars.push(litStar);

            hOffset += (litStar.bitmapData.width + GAP);
        }
    }

    public function StarsScoring(numStars: uint = 3): void {
        _numStars = numStars;
        _buildScoringUI();
    }

    public function updateScore(score: uint, total: uint): void {
        var percent: Number = (score / total);
        var threshold: uint = Math.round(percent * _litStars.length);
        for (var i: int = 0; i < _litStars.length; i++) {
            var litStar: Bitmap = (_litStars[i] as Bitmap);
            litStar.visible = (i <= threshold);
        }
    }
}

这个课程的优点是你可以使用任意数量的星星,并且得分会自动适应。要使用它:

var stars : StarsScoring = new StarsScoring (3);
addChild (stars);
stars.updateScore (1,3); // Will "lit" first star image

从未测试/编译过此代码(有机会时会这样做),但即便如此,它也应该为您指明正确的方向。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-13
    • 1970-01-01
    相关资源
    最近更新 更多