在补间后找到一个对象

时间:2013-07-05 21:37:13

标签: actionscript-3 flash

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

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个孩子。在虚拟老虎机停止后,有没有办法找出舞台上的哪个号码(孩子)?

换句话说,对象有一个补间方法,我想知道补间后它的位置是什么。

2 个答案:

答案 0 :(得分:2)

我最近开发了一台老虎机。我确信有很多方法可以做到这一点,但这就是我这样做的方式。必须为每个卷轴完成此操作 在你的blitmask中通常可以看到三个符号。如果您的blitmask是一个符号高,那么此方法将为您提供可见符号
首先声明一个变量来跟踪中心符号 我定位了我的条带,以便第3个符号位于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

答案 1 :(得分: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;
}