如何在Array中保存3个对象的位置,以便通过AS3在彼此之间建立随机位置?

时间:2016-09-10 11:54:02

标签: actionscript-3

如何在Array中保存3个对象的位置,以便通过AS3在彼此之间建立随机位置?

import flash.geom.Point;

var arry:Point = new Point();

arry[0] = arry[78,200];
arry[1] = arry[217,200];
arry[2] = arry[356,200];

//object called b1

b1.x = arry[0][0];
b1.y = arry[0][1];

//object called b2

b2.x = arry[1][0];
b2.y = arry[1][1];

//object called b3

b3.x = arry[2][0];
b3.y = arry[2][1];

//make objects swap positions between each other

var rand:Number = (Math.random()*arry.length);

//output to see random position [[78,200],[217,200],[356,200]]

trace(arry);

像这样随机添加补间...... https://www.youtube.com/watch?v=8m_m64plQ6E

3 个答案:

答案 0 :(得分:0)

在编译时你应该得到这个错误我想:" ReferenceError:错误#1069" 这是一种存储位置的方法(例如您在youtube中提供的链接):

display: none;

所以这里有九个点来放置视频中的剪辑。 您只需要添加一个函数来交换存储在另一个Vector中的九个框。 在你的情况下。

对于3个职位,如果我理解你的问题,请执行以下操作。

active-slide

答案 1 :(得分:0)

所以,你还不清楚! 你的问题是找一个随机的位置?

如果这是您面临的问题,这可能对您有所帮助:

import flash.geom.Point;

var positions:Vector.<Point >  = new Vector.<Point > (3);
var numbers:Vector.<uint> = new Vector.<uint>();
var numbersAllowed:uint = 3;
var rndNmbrs:Vector.<uint> = new Vector.<uint>(3);;

var p1:Point = new Point(78,200);
var p2:Point = new Point(217,200);
var p3:Point = new Point(356,200);

positions[0] = p1;
positions[1] = p2;
positions[2] = p3;

trace(positions);

function populateRndNmbrs(n:uint):void {
    for (var i:uint = 0; i < n; i++)
    {
        numbers[i] = i;
    }
}
populateRndNmbrs(numbersAllowed);

function populateRandomNumbers(n:uint):void
{
    var rnd:uint;
    for (var i:uint = 0; i < n; i++)
    {
        rnd = numbers[Math.floor(Math.random() * numbers.length)];
        for (var j:uint = 0; j < numbers.length; j++)
        {
            if (rnd == numbers[j])
            {
                numbers.splice(j,1);
            }
        }

        rndNmbrs[i] = rnd;
    }
}
populateRandomNumbers(numbersAllowed);
trace("rndNmbrs = " + rndNmbrs);
for (var i:uint = 0; i < numbersAllowed; i++)
{
    trace("b"+ (i+1) + ".x = " + positions[rndNmbrs[i]].x);
    trace("b"+ (i+1) + ".y = " + positions[rndNmbrs[i]].y);
    // In place of trace, you should place the boxes at those random positions.;
}
//output:
//(x=78, y=200),(x=217, y=200),(x=356, y=200)
//rndNmbrs = 2,0,1
//b1.x = 356
//b1.y = 200
//b2.x = 78
//b2.y = 200
//b3.x = 217
//b3.y = 200

这就是你想要的吗?或者您想知道如何创建动作效果? 我不确定你真正需要什么...... 这将帮助您将所有框放在随机位置。

您可以像下面这样执行此操作,并添加一个函数来检查随机位置是否不相同。 只有3个MovieClip,你将经常拥有相同的随机位置,只要它们存储在&#34;位置Vector&#34;

var squares:Vector.<MovieClip> = new Vector.<MovieClip>(3);
function populateMCs(target:DisplayObjectContainer,n:uint):void{
        for (var i:uint = 0; i < n; i++){
            squares[i] = target["b"+(i+1)];
        }
}
function swapMCs():void{
    for (var i:uint=0; i<squares.length; i++){
        squares[i].x = positions[rndNmbrs[i]].x;
        squares[i].y = positions[rndNmbrs[i]].y;
    }
}
populateMCs(this,numbersAllowed);
swapMCs();

答案 2 :(得分:0)

我举一个例子来说明在AS3中获得动作效果。 我不是翻译AS2 - &gt; AS3和视频不是显示代码的最佳方式:(

这将使您的盒子顺利移动,但不是您想要的方式。 现在,你必须学习AS3并尝试自己完成这项工作。

然后,如果您有其他问题,请明确询问您想要的内容。

sock_reader(...)