0

我想创造一种老虎机。我用谷歌搜索并找到了一个示例代码。

import com.greensock.*;
import com.greensock.easing.*;


var blitMask1:BlitMask = new BlitMask( strip1, strip1.x, strip1.y,
                         strip1.width, 100, true, true, 0xffff00, true);    

spin_btn.addEventListener(MouseEvent.CLICK, spin);

function spin(event:MouseEvent):void {    
        spin_btn.visible = false;           
        var newNumber:Number = (randomNumber(0, 9) * 100) + 1200;
        TweenMax.to(strip1, 1, {y:String(newNumber), onComplete:showBtn});
}

function showBtn() {
    spin_btn.visible = true;
}

function randomNumber(min:Number, max:Number):Number {
    return Math.floor(Math.random() * (1 + max - min) + min);
}

舞台上有一个名为 strip1 的对象,它有 10 个孩子。有没有办法在虚拟老虎机停止后找出舞台上的哪个数字(孩子)?

换句话说,一个对象有一个补间方法,我想在补间之后找出它的位置。

4

2 回答 2

2

我最近为此开发了一台老虎机。我敢肯定有很多方法可以做到这一点,但这是我做的方式。这必须为每个卷轴完成。
在您的 blitmask 中通常可以看到三个符号。如果您的 blitmask 高一个符号,那么此方法将为您提供可见符号
首先声明一个变量以跟踪中心符号。
我定位了我的条带,使第三个符号位于 blitmask 窗口的中心,记住这不是索引。
基本上你知道它会降落在哪里,所以你可以在它降落之前找出符号是什么。

var REEL1:Number = 3;


function spin(event:MouseEvent):void  
{
    var newNumber:Number = (randomNumber(1, 10)) ;
    //call function to find the symbol to land
    REEL1 = GetReelPosition(REEL1, newNumber);
    //work out the amount to tween. Random number * symbol height + strip length
    //if you want a longer spin add more strip lengths
    newNumber = (newNumber * 100) + 1000;
    var myTimeline:TimelineMax = new TimelineMax();
    myTimeline.append(new TweenLite(Strip1, 2, {y:String(newNumber)}));
//get target symbol as movieclip
var currentTile:MovieClip = Strip1.getChildAt(REEL1-1) as MovieClip;
//if you have export for actionscript, this will tell what the object is
    trace(String(currentTile));
}

创建条带时,从图像中制作符号,导出为动作脚本,然后从上到下添加到条带中。如果更改符号,则必须再次从上到下删除并粘贴。该索引反映了添加符号的顺序。

function GetReelPosition(reel:Number,num:Number):Number
{   
    reel = reel - num;
    switch(reel)
    {
//if symbol is the first number on the strip and random
//number = 1 (1-1) then the centre symbol is the last on the strip
        case 0:
          reel = 10;
          break;
//if symbol is the first number on the strip and random
//number = 10 (1-10) then the centre symbol is the first on the strip
        case 1:
        case -9:
          reel = 1;
          break;
        case 2:
        case -8:
          reel = 2;
          break;
        case 3:
        case -7:
          reel = 3;
          break;
        case 4:
        case -6:
          reel = 4;
          break;
        case 5:
        case -5:
          reel = 5;
          break;
        case 6:
        case -4:
          reel = 6;
          break;
        case 7:
        case -3:
          reel = 7;
          break;
        case 8:
        case -2:
          reel = 8;
          break;
        //case 9, -1:
        case 9:
        case -1:
          reel =  9;
          break;
    }
    return reel;

}

我更新了开关代码。案例 9,-1:不可靠。我不确定我选择了哪种语言。

这是我的第一个 Flash 项目,我很快就完成了这台老虎机。我确信有更好的方法来做到这一点。看看我的插槽?
http://rcras.com/pokies/funnyfarm

于 2013-07-07T01:16:19.233 回答
1

使用类变量来跟踪当前可见的元素。

您可以使用 TweenMax 的onCompleteParams参数来传递所需的数字。这将在onComplete处理程序中可用。当补间完成(老虎机停止)时设置变量。

///... 

var selectedChildIndex:Number = -1;

function spin(event:MouseEvent):void {    
        spin_btn.visible = false;           
        var newNumber:Number = (randomNumber(0, 9) * 100) + 1200;           
        TweenMax.to(strip1, 1, {y:String(newNumber),
                    onComplete:showBtn,  onCompleteParams:[1]});            
}    

function showBtn(index) {
    spin_btn.visible = true;
    selectedChildIndex = index;
}
于 2013-07-06T03:01:26.403 回答